Atmega 328 и энергоэффективность
- Сообщения: 12
- Зарегистрирован: Пт фев 24, 2017 10:30:37
Приветствую. В общем есть желание собрать небольшую компактную девайсину на atmega 328, с парой кнопок, светодиодов и гироскопом, и, поскольку девайсина планируется максимально компактная, хороший аккумулятор в неё не запихаешь. Посему встал вопрос о понижении прожорливости девайсины. В программном плане, вроде бы проблем нет, отправляем дивайсину спать, пока её не трогают, и вроде бы всё понятно, но на готовых ардуинах приляпан понижающиё стабилизатор, который жрёт гораздо больше самого микроконтроллера, поэтому логично было бы построить свою плату. Подскажите пожалуйста, кто сталкивался, какую минимальную обвязку нужно прицепить к микроконтроллеру, чтобы он работал как надо, какие подводные камни могут возникать при таком минималистичном построении схемы и как грамотно организовать питание, и замер напряжения питания для контроля, если питать планируется только от одного стандартного аккумулятора(3,7-4,2 вольта), который будет заряжаться при помощи платы зарядки.
- Реклама
[uquote="Baltazar66",url="/forum/viewtopic.php?p=3489176#p3489176"]какую минимальную обвязку нужно прицепить к микроконтроллеру, чтобы он работал как надо[/uquote]
мк,пара конденсаторов и питание-все!!!для верности подтянуть reset к плюсу резистором,питание измерять при помощи ADC14
мк,пара конденсаторов и питание-все!!!для верности подтянуть reset к плюсу резистором,питание измерять при помощи ADC14
- Сообщения: 12
- Зарегистрирован: Пт фев 24, 2017 10:30:37
[uquote="Novice user",url="/forum/viewtopic.php?p=3489179#p3489179"][uquote="Baltazar66",url="/forum/viewtopic.php?p=3489176#p3489176"]какую минимальную обвязку нужно прицепить к микроконтроллеру, чтобы он работал как надо[/uquote]
мк,пара конденсаторов и питание-все!!!для верности подтянуть reset к плюсу резистором,питание измерять при помощи ADC14[/uquote]
А можно поподробнее про ADC14? первый раз про это слышу.
мк,пара конденсаторов и питание-все!!!для верности подтянуть reset к плюсу резистором,питание измерять при помощи ADC14[/uquote]
А можно поподробнее про ADC14? первый раз про это слышу.
в даташите все есть,в разделе "ADMUX – ADC Multiplexer Selection Register"
[uquote="Baltazar66",url="/forum/viewtopic.php?p=3489176#p3489176"]... В программном плане, вроде бы проблем нет, отправляем дивайсину спать, пока её не трогают...[/uquote]Посмотрите раздел Minimizing Power Consumption DS. Прежде чем отправить в sleep желательно сделать ещё несколько движений типа - инициализировать все порты, включая XTAL/TOSC и RESET, отключить аналоговый компаратор, отключить регистром PRR тактирование неиспользуемой периферии.
В рабочем режиме держите камень в sleep idle с максимальным использованием прерываний, кнопки на PCINT, обслуживание гироскопа тоже. Контроль питания, по мне, проще с использованием аналогового компаратора. Типа, раз в минуту включается компаратор и к инвертирующему входу подключается делитель, на прямой вход BG. Если ACO=0 питание в норме. Отключается компаратор и делитель. Все. И питание под контролем и модуль ADC можно не использовать.
В рабочем режиме держите камень в sleep idle с максимальным использованием прерываний, кнопки на PCINT, обслуживание гироскопа тоже. Контроль питания, по мне, проще с использованием аналогового компаратора. Типа, раз в минуту включается компаратор и к инвертирующему входу подключается делитель, на прямой вход BG. Если ACO=0 питание в норме. Отключается компаратор и делитель. Все. И питание под контролем и модуль ADC можно не использовать.
- Реклама
компаратором можно мерять питание если на него rc повесить, раз в минуту конденсатор заряжать до Uпит и (компаратор обеспечит постоянство контрольного уровня) мерять время его разрядки (или наоборот - разряжать и мерить время зарядки). результат, конечно сильно нелинеен, но отслеживание несколоьких уровней обеспечит. конденсатортважно брать с хорошим ткс. систему отключать не обязательно т.к. конденсатор постоянный ток не проводит.
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Если устраивают дополнительные ~50мкА собственного потребления компаратора, то да, можно не отключать. А RC-цепочку можно подключать не только к компаратору, а к любой лапе, т.к. на входе стоит триггер Шмитта. Поскольку в работу включается таймер, частота тактирования должна должна быть стабильна при изменении питания.Ivanoff-iv писал(а):систему отключать не обязательно
- Сообщения: 3342
- Зарегистрирован: Ср янв 02, 2013 08:37:35
[uquote="Baltazar66",url="/forum/viewtopic.php?p=3489176#p3489176"]и замер напряжения питания для контроля,[/uquote]
Замер напряжения питания для такого случая удобно организовать без использования выводов МК, а так же без каких либо делителей. Делается это следующим образом – опорным напряжением выбирается напряжение питания, а на вход мультиплексора подаём внутреннее опорное напряжение 1,1 В. (MUX = 14). Далее рассчитываем результат значения для минимального питающего напряжения и контролируем его при работе МК.
Замер напряжения питания для такого случая удобно организовать без использования выводов МК, а так же без каких либо делителей. Делается это следующим образом – опорным напряжением выбирается напряжение питания, а на вход мультиплексора подаём внутреннее опорное напряжение 1,1 В. (MUX = 14). Далее рассчитываем результат значения для минимального питающего напряжения и контролируем его при работе МК.
[uquote="АСУ",url="/forum/viewtopic.php?p=3490365#p3490365"]...без использования выводов МК, а так же без каких либо делителей...[/uquote]Предлагалось выше
Novice user писал(а):...мк,пара конденсаторов и питание-все!!!для верности подтянуть reset к плюсу резистором,питание измерять при помощи ADC14
под системой я имел ввиду RC цепочку - конденсатор зарядится до напряжения питания и потребление прекратится (в отличии от делителя на 2х резисторах)
__________________
использовать компаратор предпочтительней, т.к. у него напряжение перехода в лог1 не изменяется вслед за изменением питающего напряжения
__________________
использовать компаратор предпочтительней, т.к. у него напряжение перехода в лог1 не изменяется вслед за изменением питающего напряжения
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Если из Arduino IDE программировать, там нужно учесть что таймер 0 будет примерно 1000 раз в секунду будить микроконтроллер, для подсчета текущего времени. Нужно в прерывании ISR0 дописать чтобы в сон уходил или в основной программе этот момент ловить.на готовых ардуинах
Не буду плодить новых тем..
мега128
Не включает компаратор после sleep.
По спаду уходит в power-down sleep,при появлении питания выходит, но больше в sleep не падает.
Может после power-down sleep я что то не включил в тактировании?
мега128
Не включает компаратор после sleep.
По спаду уходит в power-down sleep,при появлении питания выходит, но больше в sleep не падает.
Может после power-down sleep я что то не включил в тактировании?
Спойлер
Код: Выделить всё
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;
}У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
вопрос закрыт.
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Интересная тема.
Хочу уменьшить потребление Atmega 8 на сколько это вообще теоретически возможно (например для радиопульта на батарейках).
Хочу уменьшить потребление Atmega 8 на сколько это вообще теоретически возможно (например для радиопульта на батарейках).
Да, логично было бы построить свою плату (думаю на 3-x транзисторов пойдёт). А МК будет включаться только по нажатию любойй кнопки.Baltazar66 писал(а):В программном плане, вроде бы проблем нет, отправляем дивайсину спать, пока её не трогают, и вроде бы всё понятно, но на готовых ардуинах приляпан понижающиё стабилизатор, который жрёт гораздо больше самого микроконтроллера, поэтому логично было бы построить свою плату.
Блин ... в Atmega 8 MUX = 14 нет.))АСУ писал(а):Замер напряжения питания для такого случая удобно организовать без использования выводов МК, а так же без каких либо делителей. Делается это следующим образом – опорным напряжением выбирается напряжение питания, а на вход мультиплексора подаём внутреннее опорное напряжение 1,1 В. (MUX = 14).
Точно! 1,23 V )) Блин... а нафига я ставил внешний ИОН на диоде...
Вот я торможу)) 
А как вам такая схема ? По идеи в режиме ожидания ток пульта должен быть... наноамперы))... (ток утечки транзистора Э-К).
А как вам такая схема ? По идеи в режиме ожидания ток пульта должен быть... наноамперы))... (ток утечки транзистора Э-К).
Если поставить атмега88 то транзисторы можно убрать,все кнопки на прерывания PCINT
По даташиту Atmega8 в режиме Powerdown (в самом экономном режиме): при 3V =0,5 мкА.
Измерил ток Atmega8 в режиме Powerdown (в самом экономном режиме):
при 5V ~0,5 мкА (по прибору).
при 3V ~0,3 мкА (по прибору).
Ну вообщем примерно так и есть))
По даташиту Atmega88 в режиме Powerdown (в самом экономном режиме): при 1.8V = 0.1µA.
Сейчас Atmega88 под рукой нет, измерить не могу. Ну собственно разница не большая...
Пытался измерить ток транзистора... Прибор ничего не показывает... там наноамперы..)) мой прибор (шкала 150 мкА) не может измерить.))
Такие СУПЕР экономные пульты я ещё не делал))
Т.е. на каждую кнопку надо подтягивающий резистор? Надо ставить 20 штук резисторов в схему? Не слишком дофига?))
Измерил ток Atmega8 в режиме Powerdown (в самом экономном режиме):
при 5V ~0,5 мкА (по прибору).
при 3V ~0,3 мкА (по прибору).
Ну вообщем примерно так и есть))
По даташиту Atmega88 в режиме Powerdown (в самом экономном режиме): при 1.8V = 0.1µA.
Сейчас Atmega88 под рукой нет, измерить не могу. Ну собственно разница не большая...
Пытался измерить ток транзистора... Прибор ничего не показывает... там наноамперы..)) мой прибор (шкала 150 мкА) не может измерить.))
Такие СУПЕР экономные пульты я ещё не делал))
в режиме Powerdown - прерывание по низкому уровню на выводах INT0, INT1, ...Novice user писал(а):все кнопки на прерывания PCINT
Т.е. на каждую кнопку надо подтягивающий резистор? Надо ставить 20 штук резисторов в схему? Не слишком дофига?))
- Сообщения: 275
- Зарегистрирован: Сб янв 03, 2015 21:03:24
akl интересные мысли пишет...
изучая вопрос глубочайшего SLEEP_MODE_PWR_DOWN для ARDUINO PRO MINI (168/328) 3.3V используя стандартную обвязку фабричной платы, немогу определиться, какой именно режим Clock Sources [CKSEL3..0] выбрать для максимального энерго сбережения? если я правильно понимаю то это режим 128kHz IO
могу ли я на стандартной обвязки (я не электронщик) настроить режим 128 kHz Internal Oscillator ? какой более экономичный режим будет этот или дефолтный Internal RC ?
изучая вопрос глубочайшего SLEEP_MODE_PWR_DOWN для ARDUINO PRO MINI (168/328) 3.3V используя стандартную обвязку фабричной платы, немогу определиться, какой именно режим Clock Sources [CKSEL3..0] выбрать для максимального энерго сбережения? если я правильно понимаю то это режим 128kHz IO
могу ли я на стандартной обвязки (я не электронщик) настроить режим 128 kHz Internal Oscillator ? какой более экономичный режим будет этот или дефолтный Internal RC ?
не поверишь, но на одинаковое количество операций тратится примерно одинакоукя энергия, практически не зависящая от тактовой частоты...
поэтому сильно понижать тактовую стоит если или плохо настроен режим энергосбережения или в коде полно совтовых делаев...
поэтому сильно понижать тактовую стоит если или плохо настроен режим энергосбережения или в коде полно совтовых делаев...
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


