Страница 1 из 2
Повышение энергоэффективности часов-термометра
Добавлено: Вт май 03, 2011 02:37:20
Stalker-U
Доброго всем времени суток! Вот к Первому мая для похода в горы сделал себе девайс(часы-термометр). Собственно состоит он из Atmega16A(тактовый внутренний на 1 Мг, питание 5В), датчика ds18b20, часового кварца, кнопок и дисплея (2 строки по 8 символов) Питание от кроны через ЕН5А. На дисплей выводится температура с точностью до тысячных и время с точностью до секунд. Опрос датчика каждые 21 секунду. Программа следующей структупы: сначала выделение памяти, настройка исспользуемых портов, инициализация дисплея и настройка прерывания для Т2 в ассинхронном режиме(я думаю стандартно). Потом идёт основной цикл, где ничего не происходит, а просто съедаются такты до появления прерывания от таймера(в нём то и опрашиваются кнопки, датчик, считается время и выводится результат на экран) а потом опять в основной цикл. По дисплею: подсветку не подключал, обновляю раз в секунду питание 5В. Про датчик написал. Вопрос вот в чём: как снизить энергопотребление?!? Мой поход был расчитан на 3 суток, а девайс перестал показывать на исходе вторых(подогрев возле костра, под звуки гитары его временно реанимировал

, притом время не сбивалось). У меня есть мысли: нужно что-то делать с питанием и исспользовать энергосберегающий режим. Может что-то ещё! Но это только мысли. Подскажите какой режим выбрать, и как оптимально запитать(схему пожалуйста по возможности)! И может ещё что нибудь можно сделать? Может дисплей какой- нибудь другой? Хотелось бы, что б девайс как и сейчас помещался в мыльницу. И ещё вопрос: иногда показывает температуру +28, а на улице намного ниже, но при следующем измерении всё нормально(глюк однако)- эт у датчиков бывает такое?(в протеусе не было).
Re: Повышение энергоэффективности часов-термометра
Добавлено: Вт май 03, 2011 03:03:41
Danko
Stalker-U писал(а):... Потом идёт основной цикл, где ничего не происходит, а просто съедаются такты до появления прерывания от таймера
совершенно верно здесь МК нужно усыплять.
Stalker-U писал(а):...Мой поход был расчитан на 3 суток, а девайс перестал показывать на исходе вторых(подогрев возле костра, под звуки гитары его временно реанимировал

, притом время не сбивалось).
да скорее всего именно
показывать т.е. для МК питания хватало, а вот контрастность на LCD исчезла и индикатор продолжал показывать, только Вы ничего не видели.
Stalker-U писал(а):...подогрев возле костра, под звуки гитары его временно реанимировал
все кварцы любят одну температуру так, что врать часы будут нехило.
Re: Повышение энергоэффективности часов-термометра
Добавлено: Вт май 03, 2011 06:37:49
pyzhman
Stalker-U писал(а):Питание от кроны через ЕН5А.
Половина емкости батареи - на ветер.
А проц надо усыплять. Если есть возможность, то и ЖКИ тушить, а зажигать "по требованию".
Re: Повышение энергоэффективности часов-термометра
Добавлено: Вт май 03, 2011 09:32:22
uk8amk
1. Применить понижающий ШИМ преобразователь с большим КПД.
2. Использовать расширенные режимы сна, всякие power-down и standby.
3. Отключать всю лишнюю периферию в т.ч. ЖКИ и термодатчик.
4. Отображать время и температуру по запросу. Т.е. например нажали кнопку, МК проснулся, подал питание на ЖКИ, инициализировал его, подал питание на термодатчик, опросило его, вывел показания. Подождал несколько секунд и снова в сон.
На месяц точно должно хватить.
Re: Повышение энергоэффективности часов-термометра
Добавлено: Вт май 03, 2011 10:09:21
Jack_A
Stalker-U писал(а): На дисплей выводится температура с точностью до тысячных
Уже смешно. Представляю очередь из метрологических центром за эим шедевром для использования его если не для государственного, то уж для рабочего эталона температуры.
Re: Повышение энергоэффективности часов-термометра
Добавлено: Вт май 03, 2011 10:39:16
pyzhman
На вкус и цвет, уважаемый,...
Re: Повышение энергоэффективности часов-термометра
Добавлено: Вт май 03, 2011 13:20:45
murzila
Питать можно и от более емкого источника (например, батареек АА) через step-up converter.
Re: Повышение энергоэффективности часов-термометра
Добавлено: Ср май 04, 2011 23:47:26
Stalker-U
Вот дошли руки до энергосберегающего режима. Открыл даташит на Русском(т.к. буржуазный не знаю) и прочитал: за энергосбережение отвечает регистр MCUCR. Чтоб разрешить режим энергосбережения нужно выставить 6 бит(SE). Далее выставляю биты 5 и 4(вроде SM1 и SM0)-экономичный "Power-save" т.е.:
В главном цикле пишу Sleep и контроллер вообще не просыпается! подскажите, где ошибка? Вроде должен проснуться по прерыванию T2(переполнение). Таймер работает на часовом кварце. И ещё вопрос, как сконфигурировать порты перед засыпанием(мнение рунета при поиске разошлось)?
Re: Повышение энергоэффективности часов-термометра
Добавлено: Чт май 05, 2011 00:19:01
O-LED
Stalker-U В главном цикле пишу Sleep и контроллер вообще не просыпается! подскажите, где ошибка?
а что ты хочешь увидеть? возможно контроллер просыпается, отрабатывает по кругу один цикл, и снова засыпает на секунду. Вот ты и не видишь ничего (хотя часы и тикают).
Питание от кроны через ЕН5А.
кренка потребляет 8ма - я думаю она основной потребитель энергии.
Опрос датчика каждые 21 секунду.
нафига так часто? для экономии можно измерять раз в 5-10мин. или вообще измерять по нажатию кнопки.
(подогрев возле костра, под звуки гитары его временно реанимировал

, притом время не сбивалось).
Danko правильно сказал, скорее всего напряжение село и индикатор погас, а контроллер продолжал работать. я как то пробовал до какого напряжения мега16А сохраняет работоспособность. при 1,4 вольта - контроллеры(пробовал несколько) уверенно стартовали и работали при такте в 8мгц. У вас 1мгц, так что контроллер мог работать и при ещё меньшем напряжении.
Re: Повышение энергоэффективности часов-термометра
Добавлено: Чт май 05, 2011 00:30:02
Stalker-U
Если бы проснулся и обработал прерывание, то обновился бы экран, а он замер. Пробовал в протеусе, но думаю в железе то же самое.
Re: Повышение энергоэффективности часов-термометра
Добавлено: Чт май 05, 2011 00:39:46
O-LED
а у тебя обновление экрана внутри Т2??
Re: Повышение энергоэффективности часов-термометра
Добавлено: Чт май 05, 2011 00:43:34
Stalker-U
Да. Там просчитывается время и каждую секунду обновляется экран. Вернее там стои rcall на обновление.
Re: Повышение энергоэффективности часов-термометра
Добавлено: Чт май 05, 2011 00:50:12
O-LED
Вот так попробуй
Код: Выделить всё
MCUCR=0b01110000; // режим пониженного энергопотребления - Power Sawe
Re: Повышение энергоэффективности часов-термометра
Добавлено: Чт май 05, 2011 00:54:58
Stalker-U
Попробовал. Не работает.
Re: Повышение энергоэффективности часов-термометра
Добавлено: Чт май 05, 2011 01:12:49
O-LED
хм. это строчка из моего рабочего устройства на мега16. Всё прекрасно засыпает в Power Sawe по команде Sleep, и просыпается по переполнению Т2

Re: Повышение энергоэффективности часов-термометра
Добавлено: Чт май 05, 2011 01:22:35
Stalker-U
У меня не хочет. Стал эксперементировать с режимами. если вписать MCUCR=0b11100000; (рехим ожидания), то всё работает. Но в этом режиме работает внутренний генератор-может в этом какая фишка?
Re: Повышение энергоэффективности часов-термометра
Добавлено: Чт май 05, 2011 01:30:41
O-LED
Стесняюсь спросить, а у тебя точно Т2 работает в асинхронном режите и тактируется от отдельного часового кварца?

и еще. какой у тебя ЖКИ? со своим контроллером?
Re: Повышение энергоэффективности часов-термометра
Добавлено: Чт май 05, 2011 01:37:53
Stalker-U
Я уже собирал свои часы и они шли правильно, от часового кварца. Вот настройка таймера:
Код: Выделить всё
; //настройка таймера Т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: Повышение энергоэффективности часов-термометра
Добавлено: Чт май 05, 2011 09:14:32
Stalker-U
Вот пример обрезанного кода. Здесь только необходимое для отладки, но не работает. Должен был загорется светодиод на порте С:
Код: Выделить всё
.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; //конец прерывания таймера
Пробовал в протеусе. И явно не звёзды виноваты.
Re: Повышение энергоэффективности часов-термометра
Добавлено: Чт май 05, 2011 09:52:36
Леонид Иванович
Крона и ЕН5А делают бессмысленными разные sleep-ы. Если требуется длительная работа от батарей - то никаких стабилизаторов. Только прямое питание, например, от трех батареек размера AAA.