РадиоКот :: Простейший таймер на К1946ВМ014
Например TDA7294

Эиком - электронные компоненты и радиодетали
РадиоКот >Схемы >Цифровые устройства >Бытовая техника >

Теги статьи: Добавить тег

Простейший таймер на К1946ВМ014

Автор: ejsanyo
Опубликовано 12.11.2025
Создано при помощи КотоРед.

Приветствую любителей простых вещей. А давайте сегодня сделаем какую-нибудь несложную, но полезную в хозяйстве самоделку? Например, таймер для подсветки растений. Ночи сейчас наступают долгие, тёмные, нужно помочь домашним цветам с фотосинтезом. Задача у прибора будет совсем не сложна:

  • Включить питание на лампы осветителей.
  • Через несколько часов выключить питание.
  • И повторять так каждый день, без выходных и праздников.

При этом желательно, чтобы ход таймера не сбивался при кратковременном пропадании питания. Поначалу была мысль сделать таймер на "рассыпухе", но потом всё же решил для разнообразия приспособить контроллер для этого дела.

К1946? Что это за новодел?!

Действительно новодел, который разработан и выпускается, а последний год, довольно активно реализуется на интернет-площадках (крайне редкий случай в российской практике!) воронежским НИИ Электронной Техники.

И тут секретов нет, как многие, наверняка уже знают, это копия старой доброй Atmega8535...или всё же не копия? Поскольку чип спроектирован с учётом возможностей российских заводов, разработчикам пришлось заменить flash-память на классическую eeprom. Это создало определённые нюансы при работе с этой самой памятью. Оставим в стороне холивары дискуссии на темы, вроде "насколько этот чип можно считать рассово-российским?", или "нужна ли своя AVR в современной России?" Лучше просто перечислим те самые нюансы, которые известны на сегодняшний день:

  1. Судя по всему, операция стирания в ВМ014 имитируется аппаратной записью в eeprom одинаковых значений. В результате чего она длится существенно дольше, чем в Атмеге. Заморский софт о такой особенности не знает и при попытке тут же за стиранием сделать запись выдаст ошибку. Поэтому разделяйте процедуры стирания и записи. Например, в avdude сначала делаете стирание ключом -e, а потом уже запись с отключением предварительного стирания ключом -D.
  2. Само "стирание" сбрасывает все байты памяти не в 0xFF, как обычно это бывает, а в 0x00! Неизвестно, что сподвигло разработчиков сделать так, но из-за этого операция "blank check" на заморском софте после такого стирания, конечно же, покажет ошибку, и это нормально.
  3. Если ваш код не проверяет и использует каким-либо образом пустую часть памяти, то операцию стирания можно и вообще не делать! Новый код просто перепишет поверх старый. С флешками, как мы знаем, такое невозможно.
  4. У ранних экземпляров чипов была проблема с тем, что биты фьюзов по умолчанию также все были выставлены в 0. Это соответствует выбору режима тактирования чипа от внешнего генератора. И приходилось поначалу подключать такой генератор, даже чтобы изменить фьюзы. Но не так давно производитель всё же решил пойти навстречу пользователям, и теперь уже с завода фьюзы идут выставленными как на оригинальной Атмеге, с выбором встроенного RC-генератора.
  5. Вообще, судя по всему, из-за неспешной записи eeprom, различные операции (зашивка фьюзов, основной прошивки, установка лок-битов) лучше разделять во времени, а не выполнять одним махом, даже если с Атмегами такое работало нормально.

Если вы знаете ещё какие-либо отличия, особенности ВМ014, напишите об этом в комментариях.

Вернёмся к вопросу, а почему этот контроллер был взят, вместо миллионов других, более простых чипов? Ну, во-первых, у автора он был в наличии. А во вторых, он имеет некоторые аппаратные особенности, облегчающие его применение в качестве таймера, и было интересно проверить, сохранились ли они в ВМ014.

Timer/Counter2 и его асинхронный режим.

А вот и те самые "аппаратные особенности": дополнительный режим работы Таймера 2, который есть во многих контроллерах серии Atmega. Он является хоть и не полноценным модулем часов, но, по крайней мере, удобной "заготовкой" для их создания.

В этом режиме в недрах чипа активируется специальный маломощный генератор, и два вывода превращаются во входы для подключения стандартного "часового" кварцевого резонатора на 32768 Гц. Для Atmega8535 К1946ВМ014 это выводы 25 и 26. Генератор вполне самодостаточен, никаких внешних резисторов и даже конденсаторов для его работы подключать не требуется, только лишь кварц.

Далее настраиваем предделитель таймера на 1024, выставляем пересчёт таймера на 31 и получаем прерывания с частотой 1 раз в секунду. Которые подсчитываем и сравниваем в основной программе. На всё остальное время мы имеем право перевести ядро контроллера в режим экономии энергии, причём разработчики на такой случай (когда остаётся работать только Таймер 2 и его прерывания) предусмотрели специальный режим под названием "Power-save Mode".

Кстати, работа Таймера 2 в асинхронном режиме тоже имеет некоторые нюансы, описанные в соответствующем разделе Атмеловского даташита. В частности, после пробуждения ядра по прерыванию из экономичного режима, "засыпать" по новой разрешается только после прохождения синхронизации таймера и других блоков. Но в нашем случае необходимые задержки выполняются автоматически, если оставить во фьюзах время перезапуска ядра по умолчанию (64 мс).

И вот, собственно, готовая схема.

В качестве реле использовано реле RP3.52.9.024.00 от компании Релеон, но, понятное дело, вместо него можно использовать любое подходящее. Имеется 2 группы контактов на переключение. Одна группа включает розетку для ламп, Другую я вывел на корпус просто так, мало ли пригодится когда-нибудь... Обмотка рассчитана на 24В, поэтому в качестве питающего трансформатора я поставил ТПК-2 на номинальные 18В вторичной обмотки. 18 вольт после выпрямления в номинале как раз даёт примерно 24В. Но нужно иметь ввиду нюанс, свойственный таким маломощным трансформаторам: напряжение на их вторичной обмотке в режиме холостого хода, как правило, намного выше, чем при номинальной нагрузке! И поскольку режим, близкий к холостому ходу, в устройстве будет всё время, пока нагрузка не включена, придётся учитывать это при выборе компонентов, в частности, сглаживающего конденсатора C1! Так, с моим трансформатором, в режиме холостого хода напряжение на нём получилось около 32В. Если у вас будет другой трансформатор, значение может отличаться. По этой же причине стабилизатор на 5В собран на основе LM317L, поскольку она гарантированно выдерживает разность потенциалов до 40В, в отличие от какой-нибудь 78L05.

Большая часть выводов контроллера, конечно же, не используется и просто посажена на землю. Разъём для зашивки контроллера XP1 имеет распиновку в соответствии со стандартной для программаторов серии ChipProg. На всякий случай, учитывая сказанное выше, на этот разъём заведён и тактовый вход контроллера. Помимо ключевого транзистора для управления реле, к контроллеру подключается также кнопка к XP2 и светодиод к XP4, чтобы была хоть какая-то индикация работы.

Самое интересное здесь, это источник резервного питания, который подключается к пинам XP3. И это, как несложно догадаться, ионистор. В качестве такового я использовал батарею СКФ-2.5-5В4 от московской компании Феникс, но главное в данном случае, чтобы ионистор был рассчитан на напряжение не ниже 5В. R6 ограничивает ток зарядки ионистора. Максимальный измеренный ток потребления от ионистора у меня составил порядка 0,4 мА, и этот ток в основном определяется...сопротивлением R7, когда на выходе PB4 логическая единица! Чтобы долго не думать, возьмём первый попавшийся онлайн-калькулятор и посчитаем на нём, насколько нам хватит продержаться в таком режиме без розетки на заряде ионистора?

Несмотря на множество допущений, не учитывающих, например, саморазряд ионистора, по крайней мере, часа на 3 мы рассчитывать можем. Потребление схемы можно значительно уменьшить, увеличив сопротивление R7, скажем, до 100 кОм (полностью его убирать не рекомендовал бы, поскольку в момент запуска выход контроллера находится в "Z-состоянии", и возможны паразитные утечки и наводки на затвор транзистора).

Прошивка прибора сделана в CodeVision V2.04.4a и в скомпилированном состоянии занимает аж 524 байта памяти. Полагаю, вам не составит труда портировать код в ваш любимый AVRGCC при желании. Уставки на включение и выключение забиты жёстко в дефайнах кода (свет включается на 8 часов), поскольку для данного изделия я не увидел особой необходимости их перенастраивать в процессе работы. В обработчике прерываний зажигается светодиод и происходит отработка условий уставок. В основном цикле происходит опрос кнопки и очередной перевод чипа в спящий режим.

Фьюзы я выставил следующим образом: lfuse = 0xA1, hfuse = 0xD9. Как видно, "brown-out детектор" включен и настроен на 2,7В для надёжности, хоть и потребление схемы от этого, возможно, возросло на несколько мкА.

Порядок действий с таймером такой:

  • Если светодиод коротко моргает - значит, таймер отсчитывает время. Если он горит непрерывно, значит, это его первое включение, либо ионистор сильно разрядился.
  • В нужное время, в которое хотим, чтобы свет включался каждый день, зажимаем кнопку - светодиод горит непрерывно. Делаем так и в случае, если хотим изменить уже начало отсчёта для запущенного таймера.
  • Отпускаем кнопку - отсчёт времени пошёл.

В конце, как обычно, выложен полный проект платы в Altium Designer 10. Плата, насколько возможно, была оптимизирована под грубый ЛУТ и корпус BOX-KA05 от Мастер Кит. Кондовый такой, советского образца, но на практике вполне удобный для различного рода самоделок.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В заключение, традиционно напомним, что часть схемы таймера находится под опасным напряжением 220 230В! Соблюдайте соответствующие меры предосторожности при сборке и наладке устройства!


Файлы:
Файлы проекта


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

12 1 0