Повышение энергоэффективности часов-термометра

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
Stalker-U
Открыл глаза
Сообщения: 55
Зарегистрирован: Пн окт 11, 2010 20:59:18
Откуда: Краснодар

Повышение энергоэффективности часов-термометра

Сообщение Stalker-U »

Доброго всем времени суток! Вот к Первому мая для похода в горы сделал себе девайс(часы-термометр). Собственно состоит он из Atmega16A(тактовый внутренний на 1 Мг, питание 5В), датчика ds18b20, часового кварца, кнопок и дисплея (2 строки по 8 символов) Питание от кроны через ЕН5А. На дисплей выводится температура с точностью до тысячных и время с точностью до секунд. Опрос датчика каждые 21 секунду. Программа следующей структупы: сначала выделение памяти, настройка исспользуемых портов, инициализация дисплея и настройка прерывания для Т2 в ассинхронном режиме(я думаю стандартно). Потом идёт основной цикл, где ничего не происходит, а просто съедаются такты до появления прерывания от таймера(в нём то и опрашиваются кнопки, датчик, считается время и выводится результат на экран) а потом опять в основной цикл. По дисплею: подсветку не подключал, обновляю раз в секунду питание 5В. Про датчик написал. Вопрос вот в чём: как снизить энергопотребление?!? Мой поход был расчитан на 3 суток, а девайс перестал показывать на исходе вторых(подогрев возле костра, под звуки гитары его временно реанимировал :))) , притом время не сбивалось). У меня есть мысли: нужно что-то делать с питанием и исспользовать энергосберегающий режим. Может что-то ещё! Но это только мысли. Подскажите какой режим выбрать, и как оптимально запитать(схему пожалуйста по возможности)! И может ещё что нибудь можно сделать? Может дисплей какой- нибудь другой? Хотелось бы, что б девайс как и сейчас помещался в мыльницу. И ещё вопрос: иногда показывает температуру +28, а на улице намного ниже, но при следующем измерении всё нормально(глюк однако)- эт у датчиков бывает такое?(в протеусе не было).
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: Повышение энергоэффективности часов-термометра

Сообщение Danko »

Stalker-U писал(а):... Потом идёт основной цикл, где ничего не происходит, а просто съедаются такты до появления прерывания от таймера
совершенно верно здесь МК нужно усыплять.

Stalker-U писал(а):...Мой поход был расчитан на 3 суток, а девайс перестал показывать на исходе вторых(подогрев возле костра, под звуки гитары его временно реанимировал :))) , притом время не сбивалось).
да скорее всего именно показывать т.е. для МК питания хватало, а вот контрастность на LCD исчезла и индикатор продолжал показывать, только Вы ничего не видели.

Stalker-U писал(а):...подогрев возле костра, под звуки гитары его временно реанимировал
все кварцы любят одну температуру так, что врать часы будут нехило.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Повышение энергоэффективности часов-термометра

Сообщение pyzhman »

Stalker-U писал(а):Питание от кроны через ЕН5А.

Половина емкости батареи - на ветер.
А проц надо усыплять. Если есть возможность, то и ЖКИ тушить, а зажигать "по требованию".
Docendo discimus
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Повышение энергоэффективности часов-термометра

Сообщение uk8amk »

1. Применить понижающий ШИМ преобразователь с большим КПД.
2. Использовать расширенные режимы сна, всякие power-down и standby.
3. Отключать всю лишнюю периферию в т.ч. ЖКИ и термодатчик.
4. Отображать время и температуру по запросу. Т.е. например нажали кнопку, МК проснулся, подал питание на ЖКИ, инициализировал его, подал питание на термодатчик, опросило его, вывел показания. Подождал несколько секунд и снова в сон.

На месяц точно должно хватить.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Повышение энергоэффективности часов-термометра

Сообщение Jack_A »

Stalker-U писал(а): На дисплей выводится температура с точностью до тысячных


Уже смешно. Представляю очередь из метрологических центром за эим шедевром для использования его если не для государственного, то уж для рабочего эталона температуры.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Повышение энергоэффективности часов-термометра

Сообщение pyzhman »

На вкус и цвет, уважаемый,...
Docendo discimus
murzila
Мучитель микросхем
Сообщения: 436
Зарегистрирован: Сб апр 10, 2010 16:46:26

Re: Повышение энергоэффективности часов-термометра

Сообщение murzila »

Питать можно и от более емкого источника (например, батареек АА) через step-up converter.
Аватара пользователя
Stalker-U
Открыл глаза
Сообщения: 55
Зарегистрирован: Пн окт 11, 2010 20:59:18
Откуда: Краснодар

Re: Повышение энергоэффективности часов-термометра

Сообщение Stalker-U »

Вот дошли руки до энергосберегающего режима. Открыл даташит на Русском(т.к. буржуазный не знаю) и прочитал: за энергосбережение отвечает регистр MCUCR. Чтоб разрешить режим энергосбережения нужно выставить 6 бит(SE). Далее выставляю биты 5 и 4(вроде SM1 и SM0)-экономичный "Power-save" т.е.:

Код: Выделить всё

ldi r16,0b00111000
out MCUCR,r16

В главном цикле пишу Sleep и контроллер вообще не просыпается! подскажите, где ошибка? Вроде должен проснуться по прерыванию T2(переполнение). Таймер работает на часовом кварце. И ещё вопрос, как сконфигурировать порты перед засыпанием(мнение рунета при поиске разошлось)?
Последний раз редактировалось Stalker-U Чт май 05, 2011 00:20:15, всего редактировалось 1 раз.
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Повышение энергоэффективности часов-термометра

Сообщение O-LED »

Stalker-U
В главном цикле пишу Sleep и контроллер вообще не просыпается! подскажите, где ошибка?
а что ты хочешь увидеть? возможно контроллер просыпается, отрабатывает по кругу один цикл, и снова засыпает на секунду. Вот ты и не видишь ничего (хотя часы и тикают).
Питание от кроны через ЕН5А.
кренка потребляет 8ма - я думаю она основной потребитель энергии.
Опрос датчика каждые 21 секунду.
нафига так часто? для экономии можно измерять раз в 5-10мин. или вообще измерять по нажатию кнопки.
(подогрев возле костра, под звуки гитары его временно реанимировал :))) , притом время не сбивалось).
Danko правильно сказал, скорее всего напряжение село и индикатор погас, а контроллер продолжал работать. я как то пробовал до какого напряжения мега16А сохраняет работоспособность. при 1,4 вольта - контроллеры(пробовал несколько) уверенно стартовали и работали при такте в 8мгц. У вас 1мгц, так что контроллер мог работать и при ещё меньшем напряжении.
KIT
Аватара пользователя
Stalker-U
Открыл глаза
Сообщения: 55
Зарегистрирован: Пн окт 11, 2010 20:59:18
Откуда: Краснодар

Re: Повышение энергоэффективности часов-термометра

Сообщение Stalker-U »

Если бы проснулся и обработал прерывание, то обновился бы экран, а он замер. Пробовал в протеусе, но думаю в железе то же самое.
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Повышение энергоэффективности часов-термометра

Сообщение O-LED »

а у тебя обновление экрана внутри Т2??
KIT
Аватара пользователя
Stalker-U
Открыл глаза
Сообщения: 55
Зарегистрирован: Пн окт 11, 2010 20:59:18
Откуда: Краснодар

Re: Повышение энергоэффективности часов-термометра

Сообщение Stalker-U »

Да. Там просчитывается время и каждую секунду обновляется экран. Вернее там стои rcall на обновление.
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Повышение энергоэффективности часов-термометра

Сообщение O-LED »

Вот так попробуй

Код: Выделить всё

MCUCR=0b01110000;    //    режим пониженного энергопотребления - Power Sawe
KIT
Аватара пользователя
Stalker-U
Открыл глаза
Сообщения: 55
Зарегистрирован: Пн окт 11, 2010 20:59:18
Откуда: Краснодар

Re: Повышение энергоэффективности часов-термометра

Сообщение Stalker-U »

Попробовал. Не работает.
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Повышение энергоэффективности часов-термометра

Сообщение O-LED »

хм. это строчка из моего рабочего устройства на мега16. Всё прекрасно засыпает в Power Sawe по команде Sleep, и просыпается по переполнению Т2 :dont_know:
KIT
Аватара пользователя
Stalker-U
Открыл глаза
Сообщения: 55
Зарегистрирован: Пн окт 11, 2010 20:59:18
Откуда: Краснодар

Re: Повышение энергоэффективности часов-термометра

Сообщение Stalker-U »

У меня не хочет. Стал эксперементировать с режимами. если вписать MCUCR=0b11100000; (рехим ожидания), то всё работает. Но в этом режиме работает внутренний генератор-может в этом какая фишка?
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Повышение энергоэффективности часов-термометра

Сообщение O-LED »

Стесняюсь спросить, а у тебя точно Т2 работает в асинхронном режите и тактируется от отдельного часового кварца? :)
и еще. какой у тебя ЖКИ? со своим контроллером?
KIT
Аватара пользователя
Stalker-U
Открыл глаза
Сообщения: 55
Зарегистрирован: Пн окт 11, 2010 20:59:18
Откуда: Краснодар

Re: Повышение энергоэффективности часов-термометра

Сообщение 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. пробовал поставить в начале прерывания включение диода, но он не включается.
Аватара пользователя
Stalker-U
Открыл глаза
Сообщения: 55
Зарегистрирован: Пн окт 11, 2010 20:59:18
Откуда: Краснодар

Re: Повышение энергоэффективности часов-термометра

Сообщение 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;                   //конец прерывания таймера

Пробовал в протеусе. И явно не звёзды виноваты.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Повышение энергоэффективности часов-термометра

Сообщение Леонид Иванович »

Крона и ЕН5А делают бессмысленными разные sleep-ы. Если требуется длительная работа от батарей - то никаких стабилизаторов. Только прямое питание, например, от трех батареек размера AAA.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»