Обсуждаем контроллеры компании Atmel.
Ответить

Atmega 328 и энергоэффективность

Вт окт 23, 2018 21:12:22

Приветствую. В общем есть желание собрать небольшую компактную девайсину на atmega 328, с парой кнопок, светодиодов и гироскопом, и, поскольку девайсина планируется максимально компактная, хороший аккумулятор в неё не запихаешь. Посему встал вопрос о понижении прожорливости девайсины. В программном плане, вроде бы проблем нет, отправляем дивайсину спать, пока её не трогают, и вроде бы всё понятно, но на готовых ардуинах приляпан понижающиё стабилизатор, который жрёт гораздо больше самого микроконтроллера, поэтому логично было бы построить свою плату. Подскажите пожалуйста, кто сталкивался, какую минимальную обвязку нужно прицепить к микроконтроллеру, чтобы он работал как надо, какие подводные камни могут возникать при таком минималистичном построении схемы и как грамотно организовать питание, и замер напряжения питания для контроля, если питать планируется только от одного стандартного аккумулятора(3,7-4,2 вольта), который будет заряжаться при помощи платы зарядки.

Re: Atmega 328 и энергоэффективность

Вт окт 23, 2018 21:21:18

какую минимальную обвязку нужно прицепить к микроконтроллеру, чтобы он работал как надо

мк,пара конденсаторов и питание-все!!!для верности подтянуть reset к плюсу резистором,питание измерять при помощи ADC14

Re: Atmega 328 и энергоэффективность

Вт окт 23, 2018 21:25:40

какую минимальную обвязку нужно прицепить к микроконтроллеру, чтобы он работал как надо

мк,пара конденсаторов и питание-все!!!для верности подтянуть reset к плюсу резистором,питание измерять при помощи ADC14

А можно поподробнее про ADC14? первый раз про это слышу.

Re: Atmega 328 и энергоэффективность

Вт окт 23, 2018 21:28:47

в даташите все есть,в разделе "ADMUX – ADC Multiplexer Selection Register"

Re: Atmega 328 и энергоэффективность

Ср окт 24, 2018 01:58:59

... В программном плане, вроде бы проблем нет, отправляем дивайсину спать, пока её не трогают...
Посмотрите раздел Minimizing Power Consumption DS. Прежде чем отправить в sleep желательно сделать ещё несколько движений типа - инициализировать все порты, включая XTAL/TOSC и RESET, отключить аналоговый компаратор, отключить регистром PRR тактирование неиспользуемой периферии.
В рабочем режиме держите камень в sleep idle с максимальным использованием прерываний, кнопки на PCINT, обслуживание гироскопа тоже. Контроль питания, по мне, проще с использованием аналогового компаратора. Типа, раз в минуту включается компаратор и к инвертирующему входу подключается делитель, на прямой вход BG. Если ACO=0 питание в норме. Отключается компаратор и делитель. Все. И питание под контролем и модуль ADC можно не использовать.

Re: Atmega 328 и энергоэффективность

Ср окт 24, 2018 04:34:22

компаратором можно мерять питание если на него rc повесить, раз в минуту конденсатор заряжать до Uпит и (компаратор обеспечит постоянство контрольного уровня) мерять время его разрядки (или наоборот - разряжать и мерить время зарядки). результат, конечно сильно нелинеен, но отслеживание несколоьких уровней обеспечит. конденсатортважно брать с хорошим ткс. систему отключать не обязательно т.к. конденсатор постоянный ток не проводит.

Re: Atmega 328 и энергоэффективность

Ср окт 24, 2018 04:54:53

Ivanoff-iv писал(а):систему отключать не обязательно
Если устраивают дополнительные ~50мкА собственного потребления компаратора, то да, можно не отключать.
Потребление_компаратора.PNG
(39.68 KiB) Скачиваний: 671

А RC-цепочку можно подключать не только к компаратору, а к любой лапе, т.к. на входе стоит триггер Шмитта. Поскольку в работу включается таймер, частота тактирования должна должна быть стабильна при изменении питания.

Re: Atmega 328 и энергоэффективность

Чт окт 25, 2018 09:42:35

и замер напряжения питания для контроля,

Замер напряжения питания для такого случая удобно организовать без использования выводов МК, а так же без каких либо делителей. Делается это следующим образом – опорным напряжением выбирается напряжение питания, а на вход мультиплексора подаём внутреннее опорное напряжение 1,1 В. (MUX = 14). Далее рассчитываем результат значения для минимального питающего напряжения и контролируем его при работе МК.

Re: Atmega 328 и энергоэффективность

Чт окт 25, 2018 10:55:40

...без использования выводов МК, а так же без каких либо делителей...
Предлагалось выше
Novice user писал(а):...мк,пара конденсаторов и питание-все!!!для верности подтянуть reset к плюсу резистором,питание измерять при помощи ADC14

Re: Atmega 328 и энергоэффективность

Пт ноя 02, 2018 07:44:19

под системой я имел ввиду RC цепочку - конденсатор зарядится до напряжения питания и потребление прекратится (в отличии от делителя на 2х резисторах)
__________________
использовать компаратор предпочтительней, т.к. у него напряжение перехода в лог1 не изменяется вслед за изменением питающего напряжения

Re: Atmega 328 и энергоэффективность

Вс ноя 04, 2018 22:41:40

на готовых ардуинах

Если из Arduino IDE программировать, там нужно учесть что таймер 0 будет примерно 1000 раз в секунду будить микроконтроллер, для подсчета текущего времени. Нужно в прерывании ISR0 дописать чтобы в сон уходил или в основной программе этот момент ловить.

Re: Atmega 328 и энергоэффективность

Чт ноя 08, 2018 09:40:13

Не буду плодить новых тем..
мега128
Не включает компаратор после sleep.
По спаду уходит в power-down sleep,при появлении питания выходит, но больше в sleep не падает.
Может после power-down sleep я что то не включил в тактировании? :dont_know:

Спойлер
Код:
void counter_init()
{
   TCCR2 = (1<<WGM21)|(1<<CS22)|(1<<CS20);
   OCR2 = F_CPU/128/1000;
   TIMSK |= 1<<OCIE2;

   ASSR  = 1<<AS0;            // Включаем асинхронный режим таймера 0
   TCCR0 = (1<<CS02)|(1<<CS00);
   TIMSK |= (1<<TOIE0);// enable Timer0 overflow interrupt
}

ISR(ANALOG_COMP_vect)
{
   if ((ACSR&0x20)==0x20) {gl_pwrOFF=1;}
   //else { gl_pwrOFF=0;}
   //   PORTC |= (1<<PC0);PORTC &= ~(1<<PC0);
}

int main()
{
   ... инит портов
   uart_init ();
   stdout = &mystdout;
   printf("Hello, world!\n");
   
   lan_led_init();
   
      ACSR |= (0<<ACD)|(1<<ACIE)|(1<<ACIS1)|(1<<ACIS0);// Init Comparator
   counter_init();
   sei();   //printf("Int. init!\n");

   set_sleep_mode(SLEEP_MODE_PWR_SAVE);
   sleep_enable();//Разрешение входа в режим сна:

   old_sec=0;
   while(1)
   {
      if (old_sec!=second_count)   
      {   PORTC^=(1<<0);
         old_sec=second_count;
      }
      if (gl_pwrOFF)
      {
         ACSR |= (0<<ACIE);
         ACSR |= (1<<ACD);
         PORTC &= ~(1<<PC0);
         while(gl_pwrOFF)
         {   
            sleep_mode();                  //Enter sleep mode. (Will wake up from timer overflow interrupt)
            TCCR0=(1<<CS00)|(1<<CS02);                     //Write dummy value to control register
            while(ASSR&((1<<TCN0UB)|(1<<OCR0UB)|(1<<TCR0UB)));
            if((PINE & 0b00001000)) {gl_pwrOFF=0;PORTC |= (1<<PC0);}
         }
         _delay_ms(200);
         ACSR |= (0<<ACD)|(0<<ACBG)|(1<<ACI)|(0<<ACIE)|(0<<ACIC)|(1<<ACIS1)|(1<<ACIS0);
         ACSR |= (1<<ACIE);
         //      _delay_ms(10000);
      }
      

   }

   return 0;
}

Re: Atmega 328 и энергоэффективность

Чт ноя 08, 2018 21:39:46

вопрос закрыт.

Re: Atmega 328 и энергоэффективность

Пт ноя 09, 2018 16:15:09

Интересная тема.
Хочу уменьшить потребление Atmega 8 на сколько это вообще теоретически возможно (например для радиопульта на батарейках).
Baltazar66 писал(а):В программном плане, вроде бы проблем нет, отправляем дивайсину спать, пока её не трогают, и вроде бы всё понятно, но на готовых ардуинах приляпан понижающиё стабилизатор, который жрёт гораздо больше самого микроконтроллера, поэтому логично было бы построить свою плату.

Да, логично было бы построить свою плату (думаю на 3-x транзисторов пойдёт). А МК будет включаться только по нажатию любойй кнопки.
АСУ писал(а):Замер напряжения питания для такого случая удобно организовать без использования выводов МК, а так же без каких либо делителей. Делается это следующим образом – опорным напряжением выбирается напряжение питания, а на вход мультиплексора подаём внутреннее опорное напряжение 1,1 В. (MUX = 14).

Блин ... в Atmega 8 MUX = 14 нет.))

Re: Atmega 328 и энергоэффективность

Пт ноя 09, 2018 16:41:11

Есть. :)
1110 1.30V (VBG)
1111 0V (GND)

СпойлерИзображение
Вложения
adc_mux14.png
(37.09 KiB) Скачиваний: 401

Re: Atmega 328 и энергоэффективность

Пт ноя 09, 2018 16:56:13

Точно! 1,23 V )) Блин... а нафига я ставил внешний ИОН на диоде...
1.jpg
(130.01 KiB) Скачиваний: 634

Вот я торможу)) :)))

А как вам такая схема ?
пульт.JPG
(57.27 KiB) Скачиваний: 472

По идеи в режиме ожидания ток пульта должен быть... наноамперы))... (ток утечки транзистора Э-К).

Re: Atmega 328 и энергоэффективность

Пт ноя 09, 2018 19:35:43

Если поставить атмега88 то транзисторы можно убрать,все кнопки на прерывания PCINT

Re: Atmega 328 и энергоэффективность

Пт ноя 09, 2018 22:28:13

По даташиту Atmega8 в режиме Powerdown (в самом экономном режиме): при 3V =0,5 мкА.

Измерил ток Atmega8 в режиме Powerdown (в самом экономном режиме):
при 5V ~0,5 мкА (по прибору).
при 3V ~0,3 мкА (по прибору).
Ну вообщем примерно так и есть))

По даташиту Atmega88 в режиме Powerdown (в самом экономном режиме): при 1.8V = 0.1µA.
Сейчас Atmega88 под рукой нет, измерить не могу. Ну собственно разница не большая...

Пытался измерить ток транзистора... Прибор ничего не показывает... там наноамперы..)) мой прибор (шкала 150 мкА) не может измерить.))
Такие СУПЕР экономные пульты я ещё не делал))
Novice user писал(а):все кнопки на прерывания PCINT

в режиме Powerdown - прерывание по низкому уровню на выводах INT0, INT1, ...

Т.е. на каждую кнопку надо подтягивающий резистор? Надо ставить 20 штук резисторов в схему? Не слишком дофига?))

Re: Atmega 328 и энергоэффективность

Пт апр 12, 2019 12:33:32

akl интересные мысли пишет...

изучая вопрос глубочайшего SLEEP_MODE_PWR_DOWN для ARDUINO PRO MINI (168/328) 3.3V используя стандартную обвязку фабричной платы, немогу определиться, какой именно режим Clock Sources [CKSEL3..0] выбрать для максимального энерго сбережения? если я правильно понимаю то это режим 128kHz IO

могу ли я на стандартной обвязки (я не электронщик) настроить режим 128 kHz Internal Oscillator ? какой более экономичный режим будет этот или дефолтный Internal RC ?

Re: Atmega 328 и энергоэффективность

Пт апр 12, 2019 14:41:43

не поверишь, но на одинаковое количество операций тратится примерно одинакоукя энергия, практически не зависящая от тактовой частоты...
поэтому сильно понижать тактовую стоит если или плохо настроен режим энергосбережения или в коде полно совтовых делаев...
Ответить