Доброго всем времени суток! Вот к Первому мая для похода в горы сделал себе девайс(часы-термометр). Собственно состоит он из Atmega16A(тактовый внутренний на 1 Мг, питание 5В), датчика ds18b20, часового кварца, кнопок и дисплея (2 строки по 8 символов) Питание от кроны через ЕН5А. На дисплей выводится температура с точностью до тысячных и время с точностью до секунд. Опрос датчика каждые 21 секунду. Программа следующей структупы: сначала выделение памяти, настройка исспользуемых портов, инициализация дисплея и настройка прерывания для Т2 в ассинхронном режиме(я думаю стандартно). Потом идёт основной цикл, где ничего не происходит, а просто съедаются такты до появления прерывания от таймера(в нём то и опрашиваются кнопки, датчик, считается время и выводится результат на экран) а потом опять в основной цикл. По дисплею: подсветку не подключал, обновляю раз в секунду питание 5В. Про датчик написал. Вопрос вот в чём: как снизить энергопотребление?!? Мой поход был расчитан на 3 суток, а девайс перестал показывать на исходе вторых(подогрев возле костра, под звуки гитары его временно реанимировал , притом время не сбивалось). У меня есть мысли: нужно что-то делать с питанием и исспользовать энергосберегающий режим. Может что-то ещё! Но это только мысли. Подскажите какой режим выбрать, и как оптимально запитать(схему пожалуйста по возможности)! И может ещё что нибудь можно сделать? Может дисплей какой- нибудь другой? Хотелось бы, что б девайс как и сейчас помещался в мыльницу. И ещё вопрос: иногда показывает температуру +28, а на улице намного ниже, но при следующем измерении всё нормально(глюк однако)- эт у датчиков бывает такое?(в протеусе не было).
Заголовок сообщения: Re: Повышение энергоэффективности часов-термометра
Добавлено: Вт май 03, 2011 03:03:41
Сверлит текстолит когтями
Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54 Сообщений: 1287 Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения:0
Stalker-U писал(а):
... Потом идёт основной цикл, где ничего не происходит, а просто съедаются такты до появления прерывания от таймера
совершенно верно здесь МК нужно усыплять.
Stalker-U писал(а):
...Мой поход был расчитан на 3 суток, а девайс перестал показывать на исходе вторых(подогрев возле костра, под звуки гитары его временно реанимировал , притом время не сбивалось).
да скорее всего именно показывать т.е. для МК питания хватало, а вот контрастность на LCD исчезла и индикатор продолжал показывать, только Вы ничего не видели.
Stalker-U писал(а):
...подогрев возле костра, под звуки гитары его временно реанимировал
все кварцы любят одну температуру так, что врать часы будут нехило.
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
1. Применить понижающий ШИМ преобразователь с большим КПД. 2. Использовать расширенные режимы сна, всякие power-down и standby. 3. Отключать всю лишнюю периферию в т.ч. ЖКИ и термодатчик. 4. Отображать время и температуру по запросу. Т.е. например нажали кнопку, МК проснулся, подал питание на ЖКИ, инициализировал его, подал питание на термодатчик, опросило его, вывел показания. Подождал несколько секунд и снова в сон.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
На дисплей выводится температура с точностью до тысячных
Уже смешно. Представляю очередь из метрологических центром за эим шедевром для использования его если не для государственного, то уж для рабочего эталона температуры.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Вот дошли руки до энергосберегающего режима. Открыл даташит на Русском(т.к. буржуазный не знаю) и прочитал: за энергосбережение отвечает регистр 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 раз.
В главном цикле пишу Sleep и контроллер вообще не просыпается! подскажите, где ошибка?
а что ты хочешь увидеть? возможно контроллер просыпается, отрабатывает по кругу один цикл, и снова засыпает на секунду. Вот ты и не видишь ничего (хотя часы и тикают).
Цитата:
Питание от кроны через ЕН5А.
кренка потребляет 8ма - я думаю она основной потребитель энергии.
Цитата:
Опрос датчика каждые 21 секунду.
нафига так часто? для экономии можно измерять раз в 5-10мин. или вообще измерять по нажатию кнопки.
Цитата:
(подогрев возле костра, под звуки гитары его временно реанимировал , притом время не сбивалось).
Danko правильно сказал, скорее всего напряжение село и индикатор погас, а контроллер продолжал работать. я как то пробовал до какого напряжения мега16А сохраняет работоспособность. при 1,4 вольта - контроллеры(пробовал несколько) уверенно стартовали и работали при такте в 8мгц. У вас 1мгц, так что контроллер мог работать и при ещё меньшем напряжении.
У меня не хочет. Стал эксперементировать с режимами. если вписать MCUCR=0b11100000; (рехим ожидания), то всё работает. Но в этом режиме работает внутренний генератор-может в этом какая фишка?
Стесняюсь спросить, а у тебя точно Т2 работает в асинхронном режите и тактируется от отдельного часового кварца? и еще. какой у тебя ЖКИ? со своим контроллером?
Я уже собирал свои часы и они шли правильно, от часового кварца. Вот настройка таймера:
Код:
; //настройка таймера Т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. пробовал поставить в начале прерывания включение диода, но он не включается.
Вот пример обрезанного кода. Здесь только необходимое для отладки, но не работает. Должен был загорется светодиод на порте С:
Код:
.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; //конец прерывания таймера
Крона и ЕН5А делают бессмысленными разные sleep-ы. Если требуется длительная работа от батарей - то никаких стабилизаторов. Только прямое питание, например, от трех батареек размера AAA.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения