Суточный таймер для котла (ATmega8a + LCD1602 + DS1307)

Форум, с конкретными примерами и реальными задачами и их решением.
Пишите в личку (admin, LEV-PRAV, mim) ссылки на темы, достойные быть скопированы сюда.

Модератор: Иван Николаевич

Суточный таймер для котла (ATmega8a + LCD1602 + DS1307)

Сообщение pav13 (pav13) » 01 авг 2016, 18:33

Приветствую Всех!
Возникла необходимость заменить родной электромеханический суточный таймер отопительного котла в следствии выработки некоторых его деталей.
старый.jpg

Так как недавно занялся программированием МК, зачесались руки и было принято решение сделать что-то своё.
Сразу скажу, что целью создания данного устройства является не расширение функционала котла и не введение экономии газа, а лишь 100% равноценная замена вышедшего из строя эл.мех. таймера. Устройство исправно работает уже пару месяцев.

Итак, возможности и характеристики устройства:
  • установка и вывод текущего времени(часы и минуты)
  • энергонезависимость(время считает DS1307 от батарейки, таймеры и режим работы сохраняются в eeprom)
  • установка таймеров длительностью 15 минут с интервалом в 15 минут(всего 96 интервалов на сутки)
  • сброс всех установленных таймеров
  • время от наступления события срабатывания таймера до подачи сигнала на реле - не более 1 сек
  • индикация текущего состояния реле - точка по центру(если пустая - реле отключено, если закрашена полностью - реле включено)
  • можно посмотреть время следующего (ближайщего) включения котла
  • обзор (просмотр) всех установленных таймеров и вывод их общего количества
  • 3 режима работы(АВТО-включение котла по таймеру; ВЫКЛ-котел в режиме ожидания; ВКЛ-принудительное включение котла на определенное время)
  • энергосбережение (через 45 сек бездействия)
  • энергопотребление макс 60 мА, мин 17 мА(измерения проводились на участке ~ 22-26 вольт)
  • меню устройства на русском языке(1602 китайский, поэтому в код добавлена загрузка в RAM дисплея кириллических символов)

Управление устройством осуществляется с помощью 4-х кнопок. Функционал кнопок зависит от текущего представления на экране. Левая верхняя кнопка соответствует левой верхней надписи на экране, правая нижняя кнопка - правой нижней надписи, и так далее.

Описание меню:
  • начальный экран: кнопка 1 (отображение времени следующего установленного таймера, нужно её удерживать), кнопка 2 (обзор таймеров, выводит их по 4, для продолжения ещё раз нажать на кнопку, после окончания выведет общее количество установленных таймеров), кнопка 3 (вход в меню), кнопка 4 (АВТО/ВКЛ/ВЫКЛ переключение режимов работы);
1.GIF

  • экран "меню": кнопка 1(возврат в предыдущее меню), кнопка 2(вход в выбранное подменю / подтверждение действия ), кнопки 3 и 4(выбор пункта подменю);
  • экран "таймер": кнопка 1(возврат в предыдущее меню), кнопка 2 (установка таймера и запись его в eeprom), кнопки 3 и 4 (установка часов и минут, если удерживать кнопку 3 будет прибавлять часы быстрее), также присутствует индикация, которая сообщает установлен ли таймер на выбранное время или нет;
2.GIF

  • экран "время": кнопка 1(возврат в предыдущее меню), кнопка 2(установка часов), кнопки 3 и 4 (установка часов и минут, если удерживать будет прибавлять время быстрее);
3.GIF

  • экран "сброс": кнопка 1(возврат в предыдущее меню), кнопка 2(подтверждение действия);
4.GIF

  • экран "принудительное включение": кнопка 1(возврат в предыдущее меню), кнопка 2(подтверждение действия), кнопки 3 и 4 (установка времени в минутах работы котла в режиме ВКЛ, после окончания которого устройство перейдёт в режим АВТО, значение минут сохраняется в eeprom.)Если сохранить значение 0 минут, тогда котёл будет всегда включен, а отключаться только по внутреннему датчику температуры системы отопления.
5.GIF

В коде по возможности подбавлял комментарии. В устройстве используется WatchDog. Для реализации режима сна необходимо в программе flowcode в свойствах проекта добавить /проверить наличие строчки/ дополнительного кода:
Код: выделить все
 #include <avr/sleep.h>


Через 45 сек бездействия(не нажата ни одна кнопка) устройство перейдет в режим энергосбережения(выходит в начальный экран, отключается LCD, включается сон, таймеры работают). Для выхода из этого режима нужно нажать и немного подержать любую кнопку.

После самого первого включения реального устройства(с установленной батарейкой) нужно обязательно выполнить сброс всех таймеров и установку времени.
Мигание двоеточия (1 раз в 2 сек) между часами и минутами в начальном экране свидетельствует о правильной работе DS1307.
Печатной платы и фото внутренностей не будет, так как это устройство в одном экземпляре, а моя печатка была ещё и макеткой, на ней дикий ужас в плане расположения элементов и много перемычек. Мне стыдно это публиковать. На стабилизатор надо установить небольшой радиатор. Корпус кварца 32768 Гц соединить с GND.

Фото лицевой панели готового устройства прилагаю. Собрано оно "сендвичем" (печатная плата скручена болтами с текстолитом дисплея).
новый.jpg


Fuse биты
fuse.gif

и fuse биты словами, которые отличны от заводской установки:
  • внутренний кварцевый генератор 4 МГц + 64мс
  • контроль питания, уровень 4 вольта
  • сохранение eeprom при перезаписи чипа
schematic diagram.GIF

В архиве есть прошивка, исходник флоукода, некоторый сопутствующий материал, два файла протеуса(принципиальная схема и симуляция работы прошивки). Симулировать схему можно в обоих, но для удобства и наглядности лучше это делать во втором файле.
Внимание!!!
Для правильной симуляции, каждый раз после её запуске нужно устанавливать время(меню -> время -> ввод -> ввод), иначе микросхема часов не будет выдавать сигнал частотой 1 Гц для срабатывания прерывания, в котором осуществляется основная работа устройства.

P.S. Отдельная благодарность форумчанину andrewproffi за создание им youtube-канала "RADIOSOFT" , с которого у меня началось освоение Flowcode AVR.

Архив со всеми файлами
суточный таймер для котел(atmega8)(5.2016).zip
или последняя версия в облаке https://cloud.mail.ru/public/BV2Z/Etw4JzGqm
У вас нет доступа для просмотра вложений в этом сообщении.
Последний раз редактировалось pav13 17 окт 2016, 21:48, всего редактировалось 6 раз(а).
Изображение
Аватар пользователя
Ник: pav13
Имя: pav13
(Тёмовск)
Ученик
Ученик
Информация о пользователе

Re: Суточный таймер для котла (ATmega8a + LCD1602 + DS1307)

Сообщение andrewproffi (Андрей) » 02 авг 2016, 06:31

:oops: Спасибо )
У меня настороженность вызывает микросхема-стабилизатор работающая при таком большом входном напряжении...
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Суперконсульт
Суперконсульт
Информация о пользователе

Re: Суточный таймер для котла (ATmega8a + LCD1602 + DS1307)

Сообщение pav13 (pav13) » 02 авг 2016, 06:50

andrewproffi писал(а):
У меня настороженность вызывает микросхема-стабилизатор работающая при таком большом входном напряжении...


Сам когда разрабатывал относился с опаской к этому месту, но как показали реальные испытания - всё нормально. Входное напряжение согласно характеристикам. Небольшого алюминевого радиатора вполне хватает при наибольшей наргузке, а в режиме энергосбережения(в котором устройство находится почти всё время) стабилизатор еле-еле тёплый. Ну а на весенне-летний период предусмотрен выключатель по питанию.
Изображение
Аватар пользователя
Ник: pav13
Имя: pav13
(Тёмовск)
Ученик
Ученик
Информация о пользователе
Вернуться наверх

Re: Суточный таймер для котла (ATmega8a + LCD1602 + DS1307)

Сообщение andrewproffi (Андрей) » 02 авг 2016, 07:25

Даа, программа конечно огромнейшая, очень много усилий надо потратить чтобы такую написать :!:
Единственное замечание, я если вы заметили, не использую точки перехода в своих программах, мнение о них не однозначно а способов без них обойтись много, лично мое мнение: точки перехода в программах не использовать.
http://flowcode.info/smf/index.php?topic=90.0
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Re: Суточный таймер для котла (ATmega8a + LCD1602 + DS1307)

Сообщение pav13 (pav13) » 02 авг 2016, 12:52

andrewproffi писал(а):Единственное замечание, я если вы заметили, не использую точки перехода в своих программах, мнение о них не однозначно а способов без них обойтись много, лично мое мнение: точки перехода в программах не использовать

почитал. особенно порадовала последняя страница темы.

это, как можно догадаться, далеко не первая версия кода программы. сам как мог избегал точек перехода. осталось только 4, да и то не в "проблемных" для точек местах. одну точку точно знаю как убрать. над остальными надо подумать.
Изображение
Аватар пользователя
Ник: pav13
Имя: pav13
(Тёмовск)
Ученик
Ученик
Информация о пользователе
Вернуться наверх

Re: Суточный таймер для котла (ATmega8a + LCD1602 + DS1307)

Сообщение Vovan_G5 (Владимир) » 02 авг 2016, 13:12

Ну вы прям готовы подпевать друг другу. Вы хоть не с одного компа пишете? :lol:
Все украдено до нас, к сожалению
timer220_1-500x500.jpg

У меня такой в котле трудится, логика интуитивнейшая, только дисплей мелкий
У вас нет доступа для просмотра вложений в этом сообщении.
Ник: Vovan_G5
Имя: Владимир
(Харьков)
Консультант
Консультант
Информация о пользователе
Вернуться наверх

Re: Суточный таймер для котла (ATmega8a + LCD1602 + DS1307)

Сообщение pav13 (pav13) » 02 авг 2016, 13:44

Vovan_G5 писал(а):
Все украдено до нас, к сожалению
У меня такой в котле трудится, логика интуитивнейшая, только дисплей мелкий

ну и ладно.

А по поводу подпеваний, помоги добрым советом и тебе спасибо достанется.
Изображение
Аватар пользователя
Ник: pav13
Имя: pav13
(Тёмовск)
Ученик
Ученик
Информация о пользователе
Вернуться наверх

Re: Суточный таймер для котла (ATmega8a + LCD1602 + DS1307)

Сообщение pav13 (pav13) » 04 авг 2016, 10:43

Убрал все точки перехода, поправил типы некоторых переменных. Функционал тот же. Проверено в железе. Последние версии файлов в облачной ссылке в первом сообщении.
У вас нет доступа для просмотра вложений в этом сообщении.
Изображение
Аватар пользователя
Ник: pav13
Имя: pav13
(Тёмовск)
Ученик
Ученик
Информация о пользователе
Вернуться наверх

Re: Суточный таймер для котла (ATmega8a + LCD1602 + DS1307)

Сообщение pav13 (pav13) » 30 сен 2016, 08:45

В общем не давало мне покоя оставшееся пустое место в памяти МК, :idea: и решил добавить к функционалу ещё одну опцию, а именно возможность установки таймера на неделю (вместо одного дня), с разделением на будние и выходные дни.
В устройстве добавился ещё один пункт меню "Режим", в котором можно выбрать "Суточный" или "Недельный" (выбранный режим сохраняется в eeprom). Перед сменой режима желательно выполнить "Сброс", чтобы убрать ложные таймеры из "следующего включения" и "обзора всех таймеров".
06.GIF

В суточном режиме всё осталось как и было описано в первом сообщении(по крайней мере управление и визуальное представление на дисплее), а выбор режима "Недельный" добавляет:
  • возможность установить текущий день недели в меню установки текущего времени;
07.GIF

  • при установке таймера есть возможность выбрать на какой день недели его поставить: Будни, Выходные или Все дни. Также немного изменился индикатор установленного таймера, из которого понятно, что "Б●" - таймер установлен с понедельника по пятницу, "●В" - таймер установлен на субботу и воскресенье, "●" - таймер установлен на всю неделю;
08.GIF

  • вывод времени следующего включения котла (нажать и удерживать кнопку 1 в главном экране) обзавелся привязкой к дню недели, например если сегодня вторник 06:10, а ближайший таймер установлен в выходной день на 15:30, то на экране отобразится такое
09.GIF

  • кнопка 2 ">Обзор" в главном экране, которая показывала все установленные таймеры, также показывает все таймеры, но установленные только на текущие сутки. Также добавилась возможность пропустить перелистывания таймеров по четыре и сразу вывести их общее количество, для чего нужно нажать кнопку 1.

Всё проверено в железе и работает :shock: . По возможности добавил новых комментариев в коде.
Архив со всеми новыми файлами в конце этого сообщения и в облачной ссылке в первом.
У вас нет доступа для просмотра вложений в этом сообщении.
Изображение
Аватар пользователя
Ник: pav13
Имя: pav13
(Тёмовск)
Ученик
Ученик
Информация о пользователе
Вернуться наверх


Вернуться в Готовые решения и примеры

Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей