вторник, 10 сентября 2019 г.

Самодельный циклический таймер на микроконтроллере Atmega8

Продолжаю предыдущую тему, про прошивки для микроконтроллеров созданные с помощью программы FLProg.
Сегодня собрал макет простого циклического таймера на базе микроконтроллера фирмы Atmel Atmega8 для управления нагрузкой через электромеханическое реле.
Настройка таймера выполняется с помощью четырех кнопочных выключателей без фиксации, а текущая информация отображается на жидкокристаллическом дисплее. Одна кнопка ПУСК. Вторая кнопка ВЫБОР предназначена для инверсии следующих двух выключателей которыми вводится временной диапазон для управления состоянием силового реле к контактам которого подключена нагрузка. Отрезки времени для действия и бездействия устанавливаются с помощью двух кнопок ДОБАВИТЬ и УБАВИТЬ, время задается в секундах, например 120 = 2 минуты. Управление устройством можно выполнять также и во время работы, то есть на ходу, меняя временные отрезки манипулируя тремя кнопками выбор, добавить и убавить.
Для сборки таймера мне понадобились - микроконтроллер Atmega8, пятивольтовый одноканальный релейный модуль, макетная плата с проводами, четыре выключателя без фиксации, модуль часов реального времени DS3231, LCD дисплей с адаптером для шины i2c и Arduino UNO как программатор для заливки прошивки, созданной в программе FLProg способом который я описывал в предыдущей статье.
Циклический таймер имеет обратный отсчет, после установки временных интервалов и пуска отсчет начинается с состояния отключено - OFF. На экране дисплея в первой строке отображается установленное значение (например OFF=80) это время когда напряжение на нагрузке отсутствует далее идет обратный отсчет до значения OFF=0 и затем следует автоматический переход в режим ON - включено (например ON=57), то есть нагрузка будет включена в течении 57 секунд, по окончанию отсчета таймер снова переключится в режим OFF=80 и все повторится. При повторном нажатии кнопки ПУСК таймер завершит текущий цикл и остановиться. Вторая строка экрана SET – УСТАНОВИТЬ (например, SET=57), предназначена для ввода и отображения временных промежутков, в первой колонке время работы во второй время простоя, после запуска эта строка гаснет. Кнопка ВЫБОР меняет назначение переключателей УБАВИТЬ и ДОБАВИТЬ, для ввода значений в режиме ON или OFF.
Прошивку загрузил в микроконтроллер Atmega8 с помощью платы Arduino UNO используя её в качестве программатора. Блок схема таймера изображена на рисунке выше, создана в FLProg. Перед загрузкой код немного почистил в редакторе от ненужных переменных, которые создаются автоматически при компиляции в FLProg, чтобы немного уменьшить размер скетча.
Примечание: Секунды тактируются от модуля часов, но вовремя длительной работы заметил, что время немного плавает, пока не понял почему, возможно причина в ненадежных контактах на макетной плате или в коде, но свои функции таймер выполняет стабильно.
Некоторые элементы для программы Fritzing в которой создан рисунок проект из модулей позаимствовал здесь.
Пример работы таймера:

Продолжение следует…
Постараюсь добавить в код программы запись настроек таймера во внешнюю энергонезависимую память eeprom типа AT24C64, хотя можно использовать для этого такую же микросхему AT24C32 которая уже размещена на модуле часов DS3231, при потере питания установки будут сохраняться. Также нужно добавить функцию полный сброс. Функцию ускорения ввода. Буду пробовать.

Комментариев нет:

Отправить комментарий

Архив

Популярные сообщения