Повышение энергоэффективности часов-термометра
Повышение энергоэффективности часов-термометра
Доброго всем времени суток! Вот к Первому мая для похода в горы сделал себе девайс(часы-термометр). Собственно состоит он из Atmega16A(тактовый внутренний на 1 Мг, питание 5В), датчика ds18b20, часового кварца, кнопок и дисплея (2 строки по 8 символов) Питание от кроны через ЕН5А. На дисплей выводится температура с точностью до тысячных и время с точностью до секунд. Опрос датчика каждые 21 секунду. Программа следующей структупы: сначала выделение памяти, настройка исспользуемых портов, инициализация дисплея и настройка прерывания для Т2 в ассинхронном режиме(я думаю стандартно). Потом идёт основной цикл, где ничего не происходит, а просто съедаются такты до появления прерывания от таймера(в нём то и опрашиваются кнопки, датчик, считается время и выводится результат на экран) а потом опять в основной цикл. По дисплею: подсветку не подключал, обновляю раз в секунду питание 5В. Про датчик написал. Вопрос вот в чём: как снизить энергопотребление?!? Мой поход был расчитан на 3 суток, а девайс перестал показывать на исходе вторых(подогрев возле костра, под звуки гитары его временно реанимировал
, притом время не сбивалось). У меня есть мысли: нужно что-то делать с питанием и исспользовать энергосберегающий режим. Может что-то ещё! Но это только мысли. Подскажите какой режим выбрать, и как оптимально запитать(схему пожалуйста по возможности)! И может ещё что нибудь можно сделать? Может дисплей какой- нибудь другой? Хотелось бы, что б девайс как и сейчас помещался в мыльницу. И ещё вопрос: иногда показывает температуру +28, а на улице намного ниже, но при следующем измерении всё нормально(глюк однако)- эт у датчиков бывает такое?(в протеусе не было).
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: Повышение энергоэффективности часов-термометра
совершенно верно здесь МК нужно усыплять.Stalker-U писал(а):... Потом идёт основной цикл, где ничего не происходит, а просто съедаются такты до появления прерывания от таймера
да скорее всего именно показывать т.е. для МК питания хватало, а вот контрастность на LCD исчезла и индикатор продолжал показывать, только Вы ничего не видели.Stalker-U писал(а):...Мой поход был расчитан на 3 суток, а девайс перестал показывать на исходе вторых(подогрев возле костра, под звуки гитары его временно реанимировал, притом время не сбивалось).
все кварцы любят одну температуру так, что врать часы будут нехило.Stalker-U писал(а):...подогрев возле костра, под звуки гитары его временно реанимировал
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Повышение энергоэффективности часов-термометра
Stalker-U писал(а):Питание от кроны через ЕН5А.
Половина емкости батареи - на ветер.
А проц надо усыплять. Если есть возможность, то и ЖКИ тушить, а зажигать "по требованию".
Docendo discimus
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Повышение энергоэффективности часов-термометра
1. Применить понижающий ШИМ преобразователь с большим КПД.
2. Использовать расширенные режимы сна, всякие power-down и standby.
3. Отключать всю лишнюю периферию в т.ч. ЖКИ и термодатчик.
4. Отображать время и температуру по запросу. Т.е. например нажали кнопку, МК проснулся, подал питание на ЖКИ, инициализировал его, подал питание на термодатчик, опросило его, вывел показания. Подождал несколько секунд и снова в сон.
На месяц точно должно хватить.
2. Использовать расширенные режимы сна, всякие power-down и standby.
3. Отключать всю лишнюю периферию в т.ч. ЖКИ и термодатчик.
4. Отображать время и температуру по запросу. Т.е. например нажали кнопку, МК проснулся, подал питание на ЖКИ, инициализировал его, подал питание на термодатчик, опросило его, вывел показания. Подождал несколько секунд и снова в сон.
На месяц точно должно хватить.
Re: Повышение энергоэффективности часов-термометра
Stalker-U писал(а): На дисплей выводится температура с точностью до тысячных
Уже смешно. Представляю очередь из метрологических центром за эим шедевром для использования его если не для государственного, то уж для рабочего эталона температуры.
Re: Повышение энергоэффективности часов-термометра
Питать можно и от более емкого источника (например, батареек АА) через step-up converter.
Re: Повышение энергоэффективности часов-термометра
Вот дошли руки до энергосберегающего режима. Открыл даташит на Русском(т.к. буржуазный не знаю) и прочитал: за энергосбережение отвечает регистр MCUCR. Чтоб разрешить режим энергосбережения нужно выставить 6 бит(SE). Далее выставляю биты 5 и 4(вроде SM1 и SM0)-экономичный "Power-save" т.е.:
В главном цикле пишу Sleep и контроллер вообще не просыпается! подскажите, где ошибка? Вроде должен проснуться по прерыванию T2(переполнение). Таймер работает на часовом кварце. И ещё вопрос, как сконфигурировать порты перед засыпанием(мнение рунета при поиске разошлось)?
Код: Выделить всё
ldi r16,0b00111000
out MCUCR,r16В главном цикле пишу Sleep и контроллер вообще не просыпается! подскажите, где ошибка? Вроде должен проснуться по прерыванию T2(переполнение). Таймер работает на часовом кварце. И ещё вопрос, как сконфигурировать порты перед засыпанием(мнение рунета при поиске разошлось)?
Последний раз редактировалось Stalker-U Чт май 05, 2011 00:20:15, всего редактировалось 1 раз.
Re: Повышение энергоэффективности часов-термометра
Stalker-U
а что ты хочешь увидеть? возможно контроллер просыпается, отрабатывает по кругу один цикл, и снова засыпает на секунду. Вот ты и не видишь ничего (хотя часы и тикают).В главном цикле пишу Sleep и контроллер вообще не просыпается! подскажите, где ошибка?
кренка потребляет 8ма - я думаю она основной потребитель энергии.Питание от кроны через ЕН5А.
нафига так часто? для экономии можно измерять раз в 5-10мин. или вообще измерять по нажатию кнопки.Опрос датчика каждые 21 секунду.
Danko правильно сказал, скорее всего напряжение село и индикатор погас, а контроллер продолжал работать. я как то пробовал до какого напряжения мега16А сохраняет работоспособность. при 1,4 вольта - контроллеры(пробовал несколько) уверенно стартовали и работали при такте в 8мгц. У вас 1мгц, так что контроллер мог работать и при ещё меньшем напряжении.(подогрев возле костра, под звуки гитары его временно реанимировал, притом время не сбивалось).
KIT
Re: Повышение энергоэффективности часов-термометра
Если бы проснулся и обработал прерывание, то обновился бы экран, а он замер. Пробовал в протеусе, но думаю в железе то же самое.
Re: Повышение энергоэффективности часов-термометра
Да. Там просчитывается время и каждую секунду обновляется экран. Вернее там стои rcall на обновление.
Re: Повышение энергоэффективности часов-термометра
Вот так попробуй
Код: Выделить всё
MCUCR=0b01110000; // режим пониженного энергопотребления - Power SaweKIT
Re: Повышение энергоэффективности часов-термометра
Попробовал. Не работает.
Re: Повышение энергоэффективности часов-термометра
хм. это строчка из моего рабочего устройства на мега16. Всё прекрасно засыпает в Power Sawe по команде Sleep, и просыпается по переполнению Т2 

KIT
Re: Повышение энергоэффективности часов-термометра
У меня не хочет. Стал эксперементировать с режимами. если вписать MCUCR=0b11100000; (рехим ожидания), то всё работает. Но в этом режиме работает внутренний генератор-может в этом какая фишка?
Re: Повышение энергоэффективности часов-термометра
Стесняюсь спросить, а у тебя точно Т2 работает в асинхронном режите и тактируется от отдельного часового кварца? 
и еще. какой у тебя ЖКИ? со своим контроллером?
и еще. какой у тебя ЖКИ? со своим контроллером?
KIT
Re: Повышение энергоэффективности часов-термометра
Я уже собирал свои часы и они шли правильно, от часового кварца. Вот настройка таймера:
Я исспользовал 2сек т.к. я в прерывании опрашиваю ещё и кнопки(чтоб быстрее переключались), а время пересчитываю раз в 2 прерывания, ну и обновляю тож раз в 2 прерывания. Но он не просыпается.
ЖК на HD44780. пробовал поставить в начале прерывания включение диода, но он не включается.
Код: Выделить всё
; //настройка таймера Т2 для работы с часовым кварцем для Т2(32768Hz)
ldi r16, 0b01000000
out timsk, r16; разрешаем прерывание по переполнению T2 (делим на 256)
ldi r16, 0b00001000
out ASSR,r16; асинхронный режим у Т2
ldi r16, 0b00000100
out tccr2, r16; делитель для T2 на 1/64 (т.к. 32768Hz/64/256=2сек)Я исспользовал 2сек т.к. я в прерывании опрашиваю ещё и кнопки(чтоб быстрее переключались), а время пересчитываю раз в 2 прерывания, ну и обновляю тож раз в 2 прерывания. Но он не просыпается.
ЖК на HD44780. пробовал поставить в начале прерывания включение диода, но он не включается.
Re: Повышение энергоэффективности часов-термометра
Вот пример обрезанного кода. Здесь только необходимое для отладки, но не работает. Должен был загорется светодиод на порте С:
Пробовал в протеусе. И явно не звёзды виноваты.
Код: Выделить всё
.include "D:\avr\avrasm\appnotes\m16def.inc"
.cseg
.org $0000
rjmp reset; переход на сброс
.org $0008
rjmp sow_t2; переход на переполнение T2
reset:
; //настройка стека
ldi r16,low(RamEnd); инициализация стека
out SPL,r16
ldi r17,high(RamEnd)
out SPH,r17
; //настройка таймера Т2 для работы с часовым кварцем для Т2(32768Hz)
ldi r16, 0b01000000
out timsk, r16; разрешаем прерывание по переполнению T2 (делим на 256)
ldi r16, 0b00001000
out ASSR,r16; асинхронный режим у Т2
ldi r16, 0b00000100
out tccr2, r16; делитель для T2 на 1/64 (т.к. 32768Hz/64/256=2сек)
; //начало основного цикла
nash:
sei
ldi r16,0b01110000
out MCUCR,r16
sleep
rjmp nash; //конец основного цикла
; //прерывание Т2
sow_t2:
ldi r16,0b11111111
out ddrc,r16
out portc,r16
reti; //конец прерывания таймера
Пробовал в протеусе. И явно не звёзды виноваты.
- Леонид Иванович
- Друг Кота
- Сообщения: 4779
- Зарегистрирован: Сб апр 02, 2011 12:40:46
- Откуда: Минск
- Контактная информация:
Re: Повышение энергоэффективности часов-термометра
Крона и ЕН5А делают бессмысленными разные sleep-ы. Если требуется длительная работа от батарей - то никаких стабилизаторов. Только прямое питание, например, от трех батареек размера AAA.