реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Борьба за микроамперы, ATmega324P, RTC
ivainc1789
сообщение Dec 14 2009, 20:02
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



В текущей программе реализован элементарный счетчик секунд на базе таймера2 и часы на его основе. Хотелось бы добиться уменьшения потребления и сделать так, чтобы в sleep mode микроконтроллер просыпался 1 раз в 8 сек (или реже?), а при нажатии пользователем на клавишу просыпался и автоматически корректировал счет времени и показывал его пользователю в формате HH:MM:SS. При этом пользователь не должен заметить самого переключения (по индикации секунд).
Сходу мне удалось только при wake up ждать пока наступит переполнение от таймера, прибавлять 8 сек и только потом переключаться в режим 1 раз в сек используя OC2A. Ясно, что пользователь максимум в течение 8 сек видит что ЧАСЫ ОСТАНОВИЛИСЬ ))). Это плохо. Учитывая, что индикация времени задача типовая может кто-нибудь поделится идеями?
Интересно, почему прескалер таймера2 имеет такой "небольшой" предделитель? Ведь при тактировании от 32.768kHz можно пробуждать контроллер не реже 1 раза в 8 сек. Стоит ли заморачиваться, если потребуется раз в минуту? И вообще заметно ли увеличится при этом жизнь батареи? Количественно оценить не смог...
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Dec 14 2009, 20:47
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



ivainc1789 Для начала - что выбрано в качестве индикатора ? Потому как обычно индикатор и лимитирует энергопотребление, а прерывания Timer2 - это копейки, при частоте прерываний 16 Hz это порядка пары uA (@3.6V, RC-тактирование), сам осциллятор жрет существенно больше. А вот индикатор со столь малым потреблением - уже непросто (разве что речь о микроконтроллерах с поддержкой сегментных LCD). Да, и за какой бюджет энергопотребления боремся ?
Причина редактирования: Избыточное цитирование
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Dec 14 2009, 21:14
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



rx3apf Индикатор у меня LCD WH-1202 но я его отрубаю (как и вообще все перед уходом в спячку). Устройство используется пару раз в неделю, поэтому микропотребление важно... При пробуждении необходимо отображать время с точностью до 1 сек. Питается устройство от двух элементов AAA. Также на борту сс1100, 1wire, клава, пьезоизлучатель. Стабилизатор импульсный L6920 от STM. В принципе я достиг неплохих показателей по потреблению, если выключить часы, то амперметр VC9808 показывает в спячке 38 мкА (верится с трудом, уж очень мало). Работа часов в течение недели в режиме пробуждения MCU 1раз/сек кажется достойной борьбы за использование режима 1раз/8сек или реже. Мне кажется оптимально 1раз/мин. Но... может это нецелесообразно?
Причина редактирования: Избыточное цитирование
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Dec 14 2009, 21:25
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(ivainc1789 @ Dec 15 2009, 00:14) *
Питается устройство от двух элементов AAA. Также на борту сс1100, 1wire, клава, пьезоизлучатель. Стабилизатор импульсный L6920 от STM.

Пардон, а на кой черт там импульсный стабилизатор ? Ради индикатора и 1-wire ? Если ради индикатора, то TIC107 и забыть про проблему питания.
Цитата
В принципе я достиг неплохих показателей по потреблению, если выключить часы, то амперметр VC9808 показывает в спячке 38 мкА (верится с трудом, уж очень мало).

Многовато, вообще-то, если речь идет о экономии. Впрочем, года три от алкалиновых AAA должно работать.
Цитата
Работа часов в течение недели в режиме пробуждения MCU 1раз/сек кажется достойной борьбы за использование режима 1раз/8сек или реже. Мне кажется оптимально 1раз/мин. Но... может это нецелесообразно?

Достижимые цифры я уже привел, даже при 16-Hz прерывании это всего лишь пара uA (осциллятор жрет в разы больше). Но все это меньше упомянутых 38 uA.

Для примера я приведу цифры потребления моих приборов - ~25 uA @3.6V, ATmega8/168 (для 168 - экономичнее) @3.69 MHz, CC1100 с ежесекундным опросом, частота прерываний переполнения таймера - 16 Hz (опрос датчиков).

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

Сообщение отредактировал rx3apf - Dec 14 2009, 21:27
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 15 2009, 00:18
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Вы можете при просыпании пересчитывать на ходу значения таймера и переинициализировать на прерывания 1с. Причём я делаю даже проще. Можно по другому таймеру сделать прерывания 1с (точность не очень важна, главное чтобы близко было) при просыпании высчитывать значение, не корректируя сам RTC, а только для индикации. Ну а при прерывании от RTC, корректировать это значение.

Для уменьшения можно действительно поставить RTC внешний типа ds1307 к примеру. CR2032 на пару лет хватит. А то и больше - я не смотрел. Стоимость китайских аналогов - меньше 1$.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Dec 15 2009, 14:53
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(SasaVitebsk @ Dec 15 2009, 03:18) *
Для уменьшения можно действительно поставить RTC внешний типа ds1307 к примеру.

Так да уж DS1337 и просыпаться по будильнику можно хоть раз в год и сорость записи чтения... клиент ничего и не заметит

Сообщение отредактировал ILYAUL - Dec 15 2009, 14:55


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Dec 15 2009, 16:37
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



Цитата
Пардон, а на кой черт там импульсный стабилизатор ?
То есть как? Вкл/выкл нагрузок просаживают питание! А нагрузки-то нехилые: что сс1100, что подсветка (LED) LCD. Как вы обходитесь без стабилизатора, если применяете сс1100??? У меня сделано так, что пока батарея свежая - стабилизатор выключен, как только при сильной нагрузке ее напряжение снизится до 2V стаб. включается и уже не откл. в sleep/wakeup. Далее, первое же прерывание от L6920(~LBO) (Vbat = 1.2V) и предупреждаем пользователя "батарея разряжена". Далее, первый же сброс по BOD 1v8 - и попадаем в замкнутый цикл "замените батарею". ИМХО такой подход обеспечит более длит работу от батарей чем вариант без стабилизатора...
Цитата
Вы можете при просыпании пересчитывать на ходу значения таймера и переинициализировать на прерывания 1с.
Об этом то и речь - как это сделать получше. Только нужно учесть, что мало перейти при просыпании в режим 1с, нужно еще и правильно зайти при засыпании в режим 8с. Причем ждать пока окончатся текущие 8с не хотелось бы... Вообщем, наверное тут достаточно использовать вроде только прерывание OC2A, его должно хватить. Остальные процедуры коррекции можно расположить в основной программе. Щас попробую...
Цитата
Для уменьшения можно действительно поставить RTC внешний типа ds1307 к примеру. CR2032 на пару лет хватит.
Это уже изврат в данном контексте. Уже есть две батарейки AAA и мощные потребители.

Сейчас вот подумал: если сс1100 находится в PWD, то стоит ли его это состояние "обновлять" стробом при каждом пробуждении MCU когда нужны только часы (wakeup 1раз в 8 сек)? Для обработки строба сс1100 должен проснуться? Нет ли здесь ресурса для экономии? Но появляется риск, что, например, в грозу сс1100 может сбойнуть сам по себе, перейти в состояние IDLE и разрядить батарею...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 15 2009, 19:50
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(ivainc1789 @ Dec 15 2009, 20:37) *
Об этом то и речь - как это сделать получше. Только нужно учесть, что мало перейти при просыпании в режим 1с, нужно еще и правильно зайти при засыпании в режим 8с. Причем ждать пока окончатся текущие 8с не хотелось бы... Вообщем, наверное тут достаточно использовать вроде только прерывание OC2A, его должно хватить. Остальные процедуры коррекции можно расположить в основной программе. Щас попробую...


Я немного попроще решение предложил. Представте, что помимо прерывания от RTC(Timer2) вы инициируете прерывание с периодом 1с (Timer0 к примеру). Оно работает только при просыпании и при просыпании пересчитываете текущее время. Именно по этому прерыванию вы и отображаете врямя на индикаторе.

Просто при работе с внешними часами придётся городить что-то подобное. Я, например, DS перечитываю раз в минуту, и по нему корректирую внутренний таймер.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Dec 15 2009, 20:36
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(ivainc1789 @ Dec 15 2009, 19:37) *
То есть как? Вкл/выкл нагрузок просаживают питание! А нагрузки-то нехилые: что сс1100, что подсветка (LED) LCD. Как вы обходитесь без стабилизатора, если применяете сс1100???

1100 вместе с процессором при максимальной мощности на TX - до 30 mA, я использую литий-тиониловую батарею с довольно большим внутренним сопротивлением, но проблем по причине просадки не испытываю. Правда, супервизор на 2.9V оказался "великоват". А пара алкалиновых батарей - это уж по крайней мере 2.5V даже когда на грани издыхания, а у 1100 нижняя граница питания - 1.8V. Это с запасом. Вот подсветка LED - да, штука прожорливая. Если, конечно, использовать дешевые модули с желто-зеленой подсветкой...
Цитата
У меня сделано так, что пока батарея свежая - стабилизатор выключен, как только при сильной нагрузке ее напряжение снизится до 2V стаб. включается и уже не откл. в sleep/wakeup. Далее, первое же прерывание от L6920(~LBO) (Vbat = 1.2V) и предупреждаем пользователя "батарея разряжена". Далее, первый же сброс по BOD 1v8 - и попадаем в замкнутый цикл "замените батарею". ИМХО такой подход обеспечит более длит работу от батарей чем вариант без стабилизатора...

Соглашусь, пожалуй. Решение вполне разумное.
Цитата
Об этом то и речь - как это сделать получше. Только нужно учесть, что мало перейти при просыпании в режим 1с, нужно еще и правильно зайти при засыпании в режим 8с. Причем ждать пока окончатся текущие 8с не хотелось бы... Вообщем, наверное тут достаточно использовать вроде только прерывание OC2A, его должно хватить. Остальные процедуры коррекции можно расположить в основной программе. Щас попробую...

Проснувшись по внешнему событию, вполне можно вытащить содержимое таймера с разрешением 1/32 sec. А дальше никто не мешает вести отсчет по границе секунды (по компаратору таймера), не перенастраивая прескалер таймера (1024). И обновлять показание на индикаторе раз в секунду.
Цитата
Сейчас вот подумал: если сс1100 находится в PWD, то стоит ли его это состояние "обновлять" стробом при каждом пробуждении MCU когда нужны только часы (wakeup 1раз в 8 сек)? Для обработки строба сс1100 должен проснуться? Нет ли здесь ресурса для экономии?

Для обработки строба - да, должен проснуться. Это довольно быстро (~40 uS), но если это не требуется прибору - то зачем ?
Цитата
Но появляется риск, что, например, в грозу сс1100 может сбойнуть сам по себе, перейти в состояние IDLE и разрядить батарею...

Сам по себе - вряд ли. Но у меня с "высоковольтным" супервизором была проблема, когда просадка из-за передачи сбрасывала супервизор, а трансивер оставался на передаче, и батарейки были такие, что ЭДС оставалась слишком низкой для "реанимации". На всякий случай пришлось ввести ключ по питанию трансивера...
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Dec 19 2009, 15:58
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



Нет, все же есть проблема с часами на AVR. Корректировку я сделал правильно и все работает. Но столкнулся теперь с проблемой слишком "резкого" пробуждения микроконтроллера из спячки и связанной с этим просадкой в цепи его питания при отключенном имп. преобразователе L6920. Просадка столь существенная при полуразряженных элементах ААА, что BOD(1v8) срабатывает запросто. Ясно, что имп. преобразователь по питанию отключать нельзя. Вторая проблема - это его включение при пробуждении, приводящее снова к просадке по питанию...
Потребление устройства с ходом часов и вкл. преобразователем составляет около 50мкА, что в принципе приемлемо, но на будущее становится ясно: использование отдельной ИС часов/календаря крайне желательно...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 19 2009, 16:43
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Есть проблема и при засыпании. Всё это уменьшает срок работы от батареи.
Но всётаки при ежедневном включении-выключении мега48 от CR2032 около года жила.

Но неустойчивость, плохая повторяемость и прочие проблемы привели меня к необходимости отказаться от меги. Использую внешние часы. Всётаки удобнее.

MSP430 для этих целей (по общим отзывам) значительнее удобнее. Я думал, разрекламированная PicoPower что-то изменит, - ан нет судя по вашим отзывам.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 12:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01464 секунд с 7
ELECTRONIX ©2004-2016