Например TDA7294

Форум РадиоКот • Просмотр темы - LED Driver на Attiny13A
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт окт 24, 2025 17:42:32

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 102 ]    , 2, , , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Вт сен 07, 2021 19:06:03 
Открыл глаза

Зарегистрирован: Вт авг 07, 2018 09:44:46
Сообщений: 66
Рейтинг сообщения: 0
Карбофос, это я просто копировала с шаблона с коммами, потом не убрала под свой вариант.
timer1 и timer2 сейчас переменные не работают, красная лампочка зажигается и все, как будто той части нет, там где timer2 мигает само по себе по timerADC (где горит и не горит по времени одинаково)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Вт сен 07, 2021 19:16:27 
Опытный кот
Аватар пользователя

Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 760
Откуда: кг
Рейтинг сообщения: 0
В этом фрагменте вы сбрасываете счетчики в 0.
Поэтому, я предложил вам переписать эту функцию, т.к. логика в ваших сравнениях отсутствует.
Код:
   if ((adc_raw <= 207)&&(adc_raw > 183))
   {
      if (countMode == 1)
      {
         PORTB = 0b00000111;
         timer1 = 0;
         timer2 = 0;
      }
      if (countMode == 0)
      {
         PORTB = 0b00000101;
         timer1 = 0;
         timer2 = 0;
      }
   }



Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Вт сен 07, 2021 19:20:52 
Открыл глаза

Зарегистрирован: Вт авг 07, 2018 09:44:46
Сообщений: 66
Рейтинг сообщения: 0
Карбофос, допустим, а разве они в следующих условиях не набирают заново счет?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Вт сен 07, 2021 19:27:25 
Опытный кот
Аватар пользователя

Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 760
Откуда: кг
Рейтинг сообщения: 0
А следующие условные блоки точно получают управление?


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Вт сен 07, 2021 19:29:36 
Открыл глаза

Зарегистрирован: Вт авг 07, 2018 09:44:46
Сообщений: 66
Рейтинг сообщения: 0
Карбофос, ну да, где условие ниже 183 зажигает лампочку красную, но на этом останавливается и не переходит к таймерному условию


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Вт сен 07, 2021 20:58:01 
Опытный кот
Аватар пользователя

Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 760
Откуда: кг
Рейтинг сообщения: 0
183 соотв-ет 3.14 вольт.
Если это LiIon - то аккумулятор разряжен.
Опять-же, если говорим про LiIon, на 3.7 вольт значение будет ~215, 3.3 вольт ~192.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Вт сен 07, 2021 21:47:04 
Открыл глаза

Зарегистрирован: Вт авг 07, 2018 09:44:46
Сообщений: 66
Рейтинг сообщения: 0
Карбофос, это я знаю, пока отметила примерные значения, чтоб хоть как-то запустить, а потом уже поправлю


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Вт сен 07, 2021 21:54:23 
Опытный кот
Аватар пользователя

Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 760
Откуда: кг
Рейтинг сообщения: 0
Да уж. :shock:
timer1 и timer2 сейчас переменные не работают, красная лампочка зажигается и все, как будто той части нет, там где timer2 мигает само по себе по timerADC

timer2 у вас нигде не используется.
2) При полунажатии на кнопку должен переключиться режим, экономящий яркость - 1-ки подаем на PB0 и PB1

Объяcните, как эта кнопка выглядит, как она включена, и что при ее "полунажатии" происходит. Фото.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Ср сен 08, 2021 06:19:02 
Открыл глаза

Зарегистрирован: Вт авг 07, 2018 09:44:46
Сообщений: 66
Рейтинг сообщения: 0
Карбофос, там timer2 вместо timerADC в куске после 183, записала там ADC, чтоб показать, что работает только с ним.
кнопка KAN-15A, замыкается полностью при нажатии, при полунажатии контакты на пару секунд размыкаются. кнопка только для включения и переключения яркости, при нажатии просто единичка на PB1, где дополнительный резистор стоит, который уменьшает свечение, фото этого не знаю зачем. Подключена к верхнему резистору на 30кОм


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Ср сен 08, 2021 09:21:52 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
Bondosha, тебе ж Карбофос показал правильную конструкцию сравнения adc_raw, что бы сама не путалась и других не путала

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Ср сен 08, 2021 18:36:47 
Открыл глаза

Зарегистрирован: Вт авг 07, 2018 09:44:46
Сообщений: 66
Рейтинг сообщения: 0
slav0n, даже с этой правильной конструкцией не работает как надо, представь себе


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Чт сен 09, 2021 08:37:19 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
да как же в нем можно разобраться, если оно такое непричесанное.
предлагаю расческу - http://format.krzaq.cc/

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Пн сен 13, 2021 17:39:42 
Открыл глаза

Зарегистрирован: Вт авг 07, 2018 09:44:46
Сообщений: 66
Рейтинг сообщения: 0
Пока вот такой конечный вариант, и опять помеха на уровне 2.3-2.5 В в виде постоянного мигания, как будто перекрывает друг друга (между режимом с миганием раз в 3 секунды и разряженным режимом). Как в итоге это поправить?

Код:
#ifndef MAIN_H_
#define MAIN_H_

#define F_CPU 1200000UL


#include <util/delay.h>
#include <avr/io.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#include <stdbool.h> // bool in C99

#define nop __asm__ __volatile__ ("nop");
typedef uint8_t u8;
typedef uint16_t u16;

int main(void);
static void setup(void);
static void wakeup(void);;
static u8 bat_getvoltage(void);

#endif /* MAIN_H_ */

#include <util/delay.h>
#include <avr/io.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#include <stdbool.h> // bool in C99
int count = 0;
volatile uint8_t timer1 = 0;
volatile uint8_t timer2 = 0;
volatile uint8_t timerADC = 0;
volatile uint8_t countMode = 0;            //????? ?????????? ??????
volatile uint8_t reqChangeMode = 0;        //????, ???????????? ????? ????????? ???????? ?????
u8 adc_raw = 0;
volatile uint8_t timerADC2 = 0;

ISR(TIM0_COMPA_vect)
{
knopka_check();
bat_check();
}

ISR(TIM0_OVF_vect){}

u8 bat_getvoltage_knopka(void) {
   _delay_us(50);
   ADCSRA |= (1 << ADSC);
   while (ADCSRA & (1 << ADSC));
   return ADCH;
}

void bat_check(void)
{
   u8 adc_raw = bat_getvoltage();
   if ((adc_raw <= 207)&&(adc_raw > 183))
   {
      if (countMode == 1)
      {
         PORTB = 0b00000111;
      } else if (countMode == 0)
      {
         PORTB = 0b00000101;
      }
   } else if ((adc_raw <= 183)&&(adc_raw > 130))
   {
      if (countMode == 1)
      {
         timer1++;
         PORTB = 0b00001011;
         if(timer1 == 100)
         {
            PORTB = 0b00001000;
            timer1 = 0;
         }
      } else if (countMode == 0)
      {
         timer1++;
         PORTB = 0b00001001;
         if(timer1 == 100)
         {
            PORTB = 0b00001000;
            timer1 = 0;
         }
      }
} else if (adc_raw <= 130)
{
   if (countMode == 1)
   {
      timer2++;
      PORTB = 0b00001111;
      if (timer2 >= 3)
      {
         PORTB = 0b00001100;
      }
      if (timer2 >= 103)
      {
         PORTB = 0b00001111;
         timer2 = 0;
      }
   } else if (countMode == 0)
   {
      timer2++;
      PORTB = 0b00001101;
      if (timer2 >= 3)
      {
         PORTB = 0b00001100;
      }
      if (timer2 >= 103)
      {
         PORTB = 0b00001101;
         timer2 = 0;
      }
   }
} else if (adc_raw > 210)
   {
      if (countMode == 1)
      {
         PORTB = 0b00001111;
      } else if (countMode == 0)
      {
         PORTB = 0b00001101;
      }
   } else if (adc_raw < 30)
   {
      DDRB = 0b00000011;
      PORTB = 0b00000000;
}
}

void knopka_check(void) {
   u8 adc_knopki = bat_getvoltage_knopka();
   if (adc_knopki < 90)
   {
      if (count < 250)
      count++;
      } else {
      if (count > 0)
      count--;
      if ((count >= 4)&&(count < 50))
      {
         countMode = (countMode + 1) & 0x1;
         reqChangeMode = 1;
         count = 0;
      }
   }
   if (reqChangeMode) {        //???? ????????? ???????? ?????
      reqChangeMode = 0;          //???????? ?????????
      switch (countMode) {        //?????????? ????? ??????
         case 0:
         {
            PORTB = 0b00001101;
         }
         break;
         case 1:
         {
            PORTB = 0b00001111;
         }
         break;
      }
   }
   }
   

int main(void)   {
   setup();
   sei ();
   while(1)    {
}
}

void setup(void){
   ADMUX =
   (1 << ADLAR) | (1 << REFS0) | (1 << MUX1) | (0 << MUX0);     
   ADCSRA |= (1 << ADEN)|(1 << ADPS2)|(1 << ADPS1)|(1 << ADATE); // Предделитель на 64 (частота АЦП 125kHz)
   ADCSRB = (1 << ADTS1)|(1 << ADTS0);
   // Выключаем аналоговый компаратор
   ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (1<<ACI) | (0<<ACIE) | (0<<ACIS1) | (0<<ACIS0);
   TCCR0B = (0 << CS02) | (1 << CS01) | (1 << CS00 ); // тактовый генератор CLK/64
   TCCR0A = (0 << WGM02) | (1 << WGM01) | (0 << WGM00); // Режим CTC
   OCR0A = 69;
   TCNT0 = 0;
   TIMSK0|=(1<<OCIE0A)|(0<<TOIE0);
   DDRB = 0b00001111;
   PORTB = 0b00001101;
   wakeup();
}

void wakeup(void) {
   ADCSRA |= (1 << ADSC);
}

u8 bat_getvoltage(void) {
   _delay_us(50);
   ADCSRA |= (1 << ADSC);
   while ((ADCSRA & (1<<ADIF))==0);
   ADCSRA|=(1<<ADIF);
   return ADCH;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Пн сен 13, 2021 19:22:04 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
написано много лишнего.
допустим такое:
Код:
 else if ((adc_raw <= 183) && (adc_raw > 130)) {
        if (countMode == 1) {
            timer1++;
            PORTB = 0b00001011;
            if (timer1 == 100) {
                PORTB = 0b00001000;
                timer1 = 0;
            }
        }
        else if (countMode == 0) {
            timer1++;
            PORTB = 0b00001001;
            if (timer1 == 100) {
                PORTB = 0b00001000;
                timer1 = 0;
            }
        }
    }

надо писать примерно так:
Код:
else if ((adc_raw <= 183) && (adc_raw > 130)) {

   if (++timer1 == 100) {
      timer1 = 0;      
      PORTB = 0b1000;
   }
   else
      PORTB = (countMode) ? 0b1011 : 0b1001;
}

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Пн сен 13, 2021 19:53:00 
Открыл глаза

Зарегистрирован: Вт авг 07, 2018 09:44:46
Сообщений: 66
Рейтинг сообщения: 0
slav0n, допустим, но мне бы лучше не по сокращению кода, а именно по проблеме помощь


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Пн сен 13, 2021 19:55:31 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 2
да просто никому нет дела до твоего чудокода

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Пн сен 13, 2021 19:58:32 
Открыл глаза

Зарегистрирован: Вт авг 07, 2018 09:44:46
Сообщений: 66
Рейтинг сообщения: 0
slav0n, "очень приятно", спасибо. когда приходишь с проблемой, а тыкают в написание


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Пн сен 13, 2021 20:06:22 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 2
так проблема же и заключается в написании

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Пн сен 13, 2021 20:09:26 
Открыл глаза

Зарегистрирован: Вт авг 07, 2018 09:44:46
Сообщений: 66
Рейтинг сообщения: 0
slav0n, с каких пор помеха вылазит от более длинного написания одного и того же?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: LED Driver на Attiny13A
СообщениеДобавлено: Пн сен 13, 2021 20:18:02 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
я так понял ты свой код переписывать не хочешь.
ну, как хочешь

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 102 ]    , 2, , , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y