Таймер управления газовым котлом на PIC16F628А

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

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

Таймер управления газовым котлом на PIC16F628А

Сообщение tran3istor (Ivan) » 20 апр 2017, 17:54

Данная разработка не является чем-то новым и гениальным. Есть очень много китайских девайсов, подобный встретил и на нашем форуме viewtopic.php?f=18&t=2167.
Скорее всего это результат попытки использовать Flowcode для создания реально полезных задач, а не просто поморгать светодиодом. Поскольку для образовательных целей можно использовать неликвиды (кроме самого МК) то на выходе имеем самое дешевое устройство! Тем не менее некоторые решения, ИМХО, могут быть полезны и интересны форумчанам как обучающий пример практического применения, например способ решения динамической индикации. Что получилось – судить вам.

Устройство обеспечивает включение котла в заданное время и отключение после истечения определенного времени. Можно установить от 0 до 7 значений включения, дискретность 1 мин. По сути, это часы, содержащие 7 будильников с предустановкой длительности работы будильника. Даже переменные, которые задают время включения котла назвал budХ_minuty и budХ_chasy, где Х - № «будильника». Время горения газа можно выставить от 1 до 59 мин. Это значение при настройке заносится в память EEPROM (переменная vre_gor_pam) оно одинаково для всех будильников. Кнопкой «Старт/Стоп» можно в любое время включить котел (если он был выключен) или выключить (если он работал).
Как правило, в газовых котлах имеются контакты замкнутые перемычкой, которую нужно снять и вместо неё подключить устройство. Для простоты эти контакты можно коммутировать с помощью реле. Поскольку в моем котле ток замыкания несколько мА, а напряжение постоянное, то в данном варианте контакты замыкает транзистор, только нужно учитывать полярность. Питание – любой БП с кренкой 7805 на выходе и резервная батарейка 3,6…4,5 В (акум от мобилы или 3 шт. АА). Если индикацию включать только во время настройки, то одной зарядки даже полудохлого акума (400-500 мА*ч) должно хватить на отопительный сезон: ток потребления около 35 мкА.
Далее ход мыслей программиста. Поскольку главная задача таймера - управлять котлом, а не показывать текущее время, то можно отказаться от привычного отображения часов и минут, а выводить их значения в двоичном коде 1, 2, 4, 8, 16, 32. Этими числами названы с/диоды в линейке часов и минут (для часов с/диод «32» не нужен). Чтобы определить сколько часов/минут показывает индикатор нужно просуммировать светящие с/диоды в соответствующей линейке. Сложно? А мы не ищем легких путей :) .
Еще одна линейка из 3-х с/диодов «Выбор на индикатор» индицирует 3 разряда переменной vibor_na_indikator. Здесь пришлось искать ухищрение для экономии портов (доэкономился до того что один остался незадействованным). На индикатор нужно выводить текущее время, 7 будильников, число минут горения газа – всего 9 переменных, а 3 разряда дают только 8. Намудрил так: если из 3 с/диодов СВЕТИТ один или несколько, то это номер будильника и кнопками «Часы/ Запись» и «Минуты» можно установить время срабатывания каждого. Когда на индикатор выводятся текущее время или время горения газа с/диоды «Выбор на индикатор» НЕ СВЕТЯТ. Чтобы понять что именно – смотрим на индикатор «Часы», если светят все разряды часов «1», «2», «4», «8», «16» (сумма=31) то это режим установки времени горения (ведь текущее время часов = 31 не бывает) и кнопкой «Минуты» устанавливаем длительность времени работы котла от 1 до 59 мин. После чего нажатием на кнопку «Часы/Запись» заносим установленное значение в ЕЕPROM. Следующее нажатие на кнопку «Выбор» переводит в режим индикации и установки текущего времени. Если честно, использовал ЕЕPROM здесь с целью «посмотреть как работает и показать другим» - для тиканья часиков все равно без батарейки не обойтись.
О переменных и их значениях. Вполне резонно минуты считать от до 0 до 59, часы от 0 до 23, но тогда с/диоды должны быть с общим катодом. Если по каким то причинам решено с/диоды «подтягивать» к плюсу (вывод с открытым стоком, ток лог. 0 больше ток лог.1) то перед передачей байта в порт В его нужно инвертировать. Т. к. это учебный проект, то здесь показано как можно сэкономить память программ на «лишней» команде инвертирования. Вот поэтому в часах и минутах не прибавляем 1, а отнимаем её и начальные значения переменных такие странные.
Ход мыслей при реализации индикации. Максимальное отображаемое число 59 (двоичное 111011) занимает 6 бит. Чтобы 2 бита не болтались без дела, их задействовал в динамической индикации. Т. е. МК не формирует отдельно сигнал знакоместа, он только считает минуты и часы, а два неизменяемых старших бита указывают в какой индикатор нужно "идти". Не придумал, как простым способом чередовать байты часов и минут, поэтому сделал так: за первый раз прохода цикла светятся часы, следующий цикл – минуты и так поочередно. Несмотря на то, что код программы получился относительно небольшой (немного больше половины емкости МК) и негде нет установленной задержки, все же заметно некоторое мерцание с/диодов. Виноват НЧ кварц. Чтобы убрать мерцание нужно еще в одном-двух местах добавить изменение значения переменной dinam_indikaz. Посмотрев на собранное устройство, решил, что мерцающий с/диод более заметен, чем светящий поэтому не стал повышать частоту индикации.
О реальном и виртуальном. Реально собранное устройство оказалось вполне работоспособным. Моделирование в Протеусе (возможно я не совсем умею им пользоваться) как бы и работает, но не так четко: индикаторы мигают с очень низкой частотой, разряд «32» почему-то мигает, когда не должен и светит непрерывно, когда должен мигать. А виртуальная минута сильно отличается от реальной. Может так и должно быть?
Файлы Фловкода, Протеуса, принципиальные схемы в архиве dla_kotla.7z по ссылке https://yadi.sk/d/r7-U8Kc53HBVym
Ник: tran3istor
Имя: Ivan
(asdfg)
Новичок
Новичок
Информация о пользователе

Re: Таймер управления газовым котлом на PIC16F628А

Сообщение Vovan_G5 (Владимир) » 20 апр 2017, 20:48

А твоя жена\мама\теща тоже мыслят как программист? Разберутся в лампочках в случае чего?
И почему газ горит не больше 2 часов? Мои котлы в реальной жизни работают так - ночью 8 часов подряд электро (свет дешевый), а в остальное время газовый. всего 2 программы на каждый котел. Логика китайских таймеров очень правильная, кстати лет 10 назад эти таймеры делали поляки, возможно китайцы их скопировали. Я тогда на таком фабричном таймере сделал звонок в школе, по расписанию, до сих пор работает.
И я не понял зачем батарейка ? если нет света, то и котел должен выключиться, циркуляционный насос ведь не работает. А на случай пропаданий электричества - еепром и часы реального времени.
Ник: Vovan_G5
Имя: Владимир
(Харьков)
Консультант
Консультант
Информация о пользователе

Re: Таймер управления газовым котлом на PIC16F628А

Сообщение pav13 (pav13) » 21 апр 2017, 19:15

У меня случился небольшой приступ эпилепсии после запуска симуляции. :)
Video_2017-04-21_210714.gif
У вас нет доступа для просмотра вложений в этом сообщении.
Изображение
Аватар пользователя
Ник: pav13
Имя: pav13
(Тёмовск)
Ученик
Ученик
Информация о пользователе
Вернуться наверх

Re: Таймер управления газовым котлом на PIC16F628А

Сообщение tran3istor (Ivan) » 21 апр 2017, 19:49

Vovan_G5 писал(а):А твоя жена\мама\теща тоже мыслят как программист?

Если доходчиво объяснить и обязательно дать подавить кнопки, то поймет даже школьник. А теща просто не захочет.

Vovan_G5 писал(а):И почему газ горит не больше 2 часов?

Если мощность котла в 1,5-2 раза больше расчетной (а в квартирах с небольшой площадью такое почти всегда) то котел минут через 40 нагреет всю воду до заданной и уменьшит газ до 15-20%. В таком режиме низкий КПД. Поэтому экономный режим: нагреть батареи - выключить котел.

Vovan_G5 писал(а): я не понял зачем батарейка ? если нет света, то и котел должен выключиться,

Если не будет батарейки, то при выключении света часы сбиваются. Зачем использовать отдельную микросхему часов реального времени если ресурсов МК хватает с запасом. С НЧ кварцем экономичность МК ненамного уступает спец.ИМС.
Ник: tran3istor
Имя: Ivan
(asdfg)
Новичок
Новичок
Информация о пользователе
Вернуться наверх

Re: Таймер управления газовым котлом на PIC16F628А

Сообщение tran3istor (Ivan) » 21 апр 2017, 20:15

pav13, я же писал что протеус этот проект плохо симулирует. Тот же НЕХ-файл записанный в кристалл нормально работает, только часы и минуты немного мерцают. Мерцание с/диодов "Выбор на индикатор" не заметно вообще.
Кто может объяснить в чем дело?
Ник: tran3istor
Имя: Ivan
(asdfg)
Новичок
Новичок
Информация о пользователе
Вернуться наверх

Re: Таймер управления газовым котлом на PIC16F628А

Сообщение pav13 (pav13) » 21 апр 2017, 20:21

tran3istor писал(а):что протеус этот проект плохо симулирует.

система управления сложна (хотя на вкус и цвет фломастеры разные), да и непонятно как работающая симуляция не добавляет понимания.
tran3istor писал(а):Кто может объяснить в чем дело?

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

Re: Таймер управления газовым котлом на PIC16F628А

Сообщение tran3istor (Ivan) » 23 апр 2017, 19:53

Увеличил в 4 раза частоту чередования часов-минут – мерцание на макете стало незаметным.
Перерисовал в протеусе, уменьшив номиналы ограничительных резисторов, а в параметрах светодиодов увеличил ток, теперь ложной засветки нижнего с/диода минут нет. К сожалению, в симуляторе моргание осталось. 8-й версии пока не имею, о ней неоднозначные отзывы, установлена 7.10 SP0, вроде она считается самая стабильная.
Упростил прогу у фловкоде, на участке сравнения значений текущего времени и будильников вместо 7-и If-ов поставил один задав условие типа
m=m1 AND h=h1 OR
m=m2 AND h=h2 OR
m=m3 AND h=h3 OR
m=m4 AND h=h4 OR
m=m5 AND h=h5 OR
m=m6 AND h=h6 OR
m=m7 AND h=h7
где m и h - переменные текущих минут и часов, m1,…,m7, h1,…,h7,… - минути и часы 1-го,…, 7-го, … будильников.
Все записано в одну строчку и работает правильно. Вопрос: есть ли ограничение на количество логических операций в этой строке?
Все исправленные файлы в папке https://yadi.sk/d/PJjrAXke3HGWNy
Внимание! В НЕХ- и FCF-файлах минута равна 3-м секундам. Так удобно смотреть в протеусе – не нужно долго ждать.
Ник: tran3istor
Имя: Ivan
(asdfg)
Новичок
Новичок
Информация о пользователе
Вернуться наверх

Re: Таймер управления газовым котлом на PIC16F628А

Сообщение tran3istor (Ivan) » 30 апр 2017, 18:58

Несколько улучшеный вариант программы. Для управления вместо 4 кнопок используется 3. Добавлен еще один режим - выключены все светодиоды. Если после настройки оставлять таймер в этом режиме, то можно обойтись без сетевого БП (ток потребления несколько десятков мкА). Правда, есть одно "Но", визуально этот режим совпадает с индикацией текущего времени в 0 час. 0 мин. поэтому заниматься настройкой в первую минуту после полуночи не рекомендуется :stop:
Путь от начала до конца основной программы (если кнопки не нажаты) значительно сократился, в результате прога выполняется настолько быстро, что для динамической индикации часов-минут достаточно одного чередования. Общий объем кода тоже уменьшился.
Обновленние файлы здесь: https://yadi.sk/d/V7c8nnZH3HVp3Q
Ник: tran3istor
Имя: Ivan
(asdfg)
Новичок
Новичок
Информация о пользователе
Вернуться наверх

Re: Таймер управления газовым котлом на PIC16F628А

Сообщение Steve Key (Steve Key) » 01 май 2017, 16:42

tran3istor писал(а):К сожалению, в симуляторе моргание осталось.

Помогает поменять режим работы светодиода аналоговый-цифровой.
FlowCode 5.5.2.1, Proteus 7.10, PICkit 2
Аватар пользователя
Ник: Steve Key
Имя: Steve Key
(Шахты)
Специалист
Специалист
Информация о пользователе
Вернуться наверх

Re: Таймер управления газовым котлом на PIC16F628А

Сообщение tran3istor (Ivan) » 01 май 2017, 19:45

Попробывал поменять свойства с/диодов с аналоговых на цифровые в линейке "Выбор" (3шт.) - они действительно перестали моргать, а вот линейка "Минуты" после этого начала считать как бешеная хотя их с/д не трогал. Какая связь? Если "Часы" и "Минути" тоже перевести в цифровые - проподает динамика (ложная засветка параллельных разрядов). Может комп у меня слабый, когда индикаторы работают загрузка проца 50-60% а если перевести в экономный режим (все с/д выключены) - 1%.
В общем, в железе работает нормально, с протеусом у меня почему-то не получилось, причем частота 32кГц, а что сказать если бы 20 Мега!
Ник: tran3istor
Имя: Ivan
(asdfg)
Новичок
Новичок
Информация о пользователе
Вернуться наверх


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

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

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