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

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 12
Зарегистрирован: Пт фев 24, 2017 10:30:37

Сообщение Baltazar66 »

Приветствую. В общем есть желание собрать небольшую компактную девайсину на atmega 328, с парой кнопок, светодиодов и гироскопом, и, поскольку девайсина планируется максимально компактная, хороший аккумулятор в неё не запихаешь. Посему встал вопрос о понижении прожорливости девайсины. В программном плане, вроде бы проблем нет, отправляем дивайсину спать, пока её не трогают, и вроде бы всё понятно, но на готовых ардуинах приляпан понижающиё стабилизатор, который жрёт гораздо больше самого микроконтроллера, поэтому логично было бы построить свою плату. Подскажите пожалуйста, кто сталкивался, какую минимальную обвязку нужно прицепить к микроконтроллеру, чтобы он работал как надо, какие подводные камни могут возникать при таком минималистичном построении схемы и как грамотно организовать питание, и замер напряжения питания для контроля, если питать планируется только от одного стандартного аккумулятора(3,7-4,2 вольта), который будет заряжаться при помощи платы зарядки.
Реклама
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Сообщение Novice user »

[uquote="Baltazar66",url="/forum/viewtopic.php?p=3489176#p3489176"]какую минимальную обвязку нужно прицепить к микроконтроллеру, чтобы он работал как надо[/uquote]
мк,пара конденсаторов и питание-все!!!для верности подтянуть reset к плюсу резистором,питание измерять при помощи ADC14
Реклама
Родился
Сообщения: 12
Зарегистрирован: Пт фев 24, 2017 10:30:37

Сообщение Baltazar66 »

[uquote="Novice user",url="/forum/viewtopic.php?p=3489179#p3489179"][uquote="Baltazar66",url="/forum/viewtopic.php?p=3489176#p3489176"]какую минимальную обвязку нужно прицепить к микроконтроллеру, чтобы он работал как надо[/uquote]
мк,пара конденсаторов и питание-все!!!для верности подтянуть reset к плюсу резистором,питание измерять при помощи ADC14[/uquote]
А можно поподробнее про ADC14? первый раз про это слышу.
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Сообщение Novice user »

в даташите все есть,в разделе "ADMUX – ADC Multiplexer Selection Register"
Реклама
Эиком - электронные компоненты и радиодетали
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

[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 можно не использовать.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

компаратором можно мерять питание если на него rc повесить, раз в минуту конденсатор заряжать до Uпит и (компаратор обеспечит постоянство контрольного уровня) мерять время его разрядки (или наоборот - разряжать и мерить время зарядки). результат, конечно сильно нелинеен, но отслеживание несколоьких уровней обеспечит. конденсатортважно брать с хорошим ткс. систему отключать не обязательно т.к. конденсатор постоянный ток не проводит.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Ivanoff-iv писал(а):систему отключать не обязательно
Если устраивают дополнительные ~50мкА собственного потребления компаратора, то да, можно не отключать.
Потребление_компаратора.PNG
(39.68 КБ) 714 скачиваний
А RC-цепочку можно подключать не только к компаратору, а к любой лапе, т.к. на входе стоит триггер Шмитта. Поскольку в работу включается таймер, частота тактирования должна должна быть стабильна при изменении питания.
Друг Кота
Сообщения: 3342
Зарегистрирован: Ср янв 02, 2013 08:37:35

Сообщение АСУ »

[uquote="Baltazar66",url="/forum/viewtopic.php?p=3489176#p3489176"]и замер напряжения питания для контроля,[/uquote]
Замер напряжения питания для такого случая удобно организовать без использования выводов МК, а так же без каких либо делителей. Делается это следующим образом – опорным напряжением выбирается напряжение питания, а на вход мультиплексора подаём внутреннее опорное напряжение 1,1 В. (MUX = 14). Далее рассчитываем результат значения для минимального питающего напряжения и контролируем его при работе МК.
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

[uquote="АСУ",url="/forum/viewtopic.php?p=3490365#p3490365"]...без использования выводов МК, а так же без каких либо делителей...[/uquote]Предлагалось выше
Novice user писал(а):...мк,пара конденсаторов и питание-все!!!для верности подтянуть reset к плюсу резистором,питание измерять при помощи ADC14
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

под системой я имел ввиду RC цепочку - конденсатор зарядится до напряжения питания и потребление прекратится (в отличии от делителя на 2х резисторах)
__________________
использовать компаратор предпочтительней, т.к. у него напряжение перехода в лог1 не изменяется вслед за изменением питающего напряжения
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1363
Зарегистрирован: Чт апр 04, 2013 22:22:57
Откуда: Белгород, РФ

Сообщение SIM31 »

на готовых ардуинах
Если из Arduino IDE программировать, там нужно учесть что таймер 0 будет примерно 1000 раз в секунду будить микроконтроллер, для подсчета текущего времени. Нужно в прерывании ISR0 дописать чтобы в сон уходил или в основной программе этот момент ловить.
Мудрый кот
Аватара пользователя
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк

Сообщение RoboC »

Не буду плодить новых тем..
мега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;
}
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Контактная информация:
Мудрый кот
Аватара пользователя
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк

Сообщение RoboC »

вопрос закрыт.
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Контактная информация:
Друг Кота
Сообщения: 9176
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

Интересная тема.
Хочу уменьшить потребление Atmega 8 на сколько это вообще теоретически возможно (например для радиопульта на батарейках).
Baltazar66 писал(а):В программном плане, вроде бы проблем нет, отправляем дивайсину спать, пока её не трогают, и вроде бы всё понятно, но на готовых ардуинах приляпан понижающиё стабилизатор, который жрёт гораздо больше самого микроконтроллера, поэтому логично было бы построить свою плату.
Да, логично было бы построить свою плату (думаю на 3-x транзисторов пойдёт). А МК будет включаться только по нажатию любойй кнопки.
АСУ писал(а):Замер напряжения питания для такого случая удобно организовать без использования выводов МК, а так же без каких либо делителей. Делается это следующим образом – опорным напряжением выбирается напряжение питания, а на вход мультиплексора подаём внутреннее опорное напряжение 1,1 В. (MUX = 14).
Блин ... в Atmega 8 MUX = 14 нет.))
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Есть. :)
1110 1.30V (VBG)
1111 0V (GND)
СпойлерИзображение
Вложения
adc_mux14.png
(37.09 КБ) 667 скачиваний
Друг Кота
Сообщения: 9176
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

Точно! 1,23 V )) Блин... а нафига я ставил внешний ИОН на диоде...
1.jpg
(130.01 КБ) 662 скачивания
Вот я торможу)) :)))

А как вам такая схема ?
пульт.JPG
(57.27 КБ) 510 скачиваний
По идеи в режиме ожидания ток пульта должен быть... наноамперы))... (ток утечки транзистора Э-К).
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Сообщение Novice user »

Если поставить атмега88 то транзисторы можно убрать,все кнопки на прерывания PCINT
Друг Кота
Сообщения: 9176
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

По даташиту 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 штук резисторов в схему? Не слишком дофига?))
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

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

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

могу ли я на стандартной обвязки (я не электронщик) настроить режим 128 kHz Internal Oscillator ? какой более экономичный режим будет этот или дефолтный Internal RC ?
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

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

Вернуться в «AVR»