Периодичный таймер на микроконтроллере. Схема таймера для управления низковольтной нагрузкой (CD4040). Описание работы таймера на микроконтроллере

Рассмотрим, как сделать таймер своими руками на микроконтроллере ATmega8, хотя код довольно просто адаптировать и для МК AVR других серий. Электронный таймер нужное устройство во всех областях, где требуется выполнение определенных действий через конкретный промежуток времени.

Управление таймера состоит всего из четырех кнопок:

— увеличение значения числа;

— уменьшение значения числа;

— старт таймера;

— сброс таймера.

В качестве индикатора срабатывания таймера применяется генератор звуковой частоты с динамиком. Генератор будет запускаться с помощью транзисторного ключа Q5, который в свою очередь открывается положительным потенциалом, поступающим из порта PC2 микроконтроллера.

Упрощенно таймер работает следующим образом. Кнопками «+» и «-» устанавливается требуемое количество секунд; кнопкой «старт» запускается таймер. Когда таймер отсчитает до нуля, на выводе PC2 микроконтроллера ATmega8 появится высокий потенциал, который откроет Q5. Далее транзисторный ключ запустит генератор и раздастся звук в динамике. Сброс таймера осуществляется при нажатии кнопки «сброс». Генератор звуковой частоты собран на двух транзисторах Q6 и Q7 разный полупроводниковых структур. С принципом работы и описанием схемы подобных генераторов можно ознакомиться, перейдя по .

Алгоритм работы таймера на микроконтроллере

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

Для формирования интервала времени в одну секунду мы воспользуемся первым таймер-счетчиком микроконтроллера ATmega8. Все его настройки мы определим в функцию start . Сначала разделим рабочую частоту микроконтроллера 1000000 Гц на 64 и получим новую частоту 15625 Гц. За это отвечают бит CS10, CS11 и CS12 регистра TCCR1B. Далее разрешаем прерывание по совпадению и в регистр сравнения (старший и младший) записываем двоичное число равное десятичному 15625. Затем обнуляем счетный регистр TCNT1 и устанавливаем в единицу бит WGM12 регистра TCCR1B, что вызывает сброс счетного регистра при совпадении текущего его значения с числом, записанным в регистры сравнения.

void start (void)

TCCR1B &= ~(1<

TCCR1B |= (1<

TIMSK |= (1<

OCR1AH = 0b00111101;

OCR1AL = 0b000001001; // регистр сравнения 15625

TCNT1 = 0;

TCCR1B |= (1<

Когда таймер отсчитает ровно одну секунду – вызовется прерывание. В теле функции прерывания мы будем снижать значение переменной на единицу. При достижении нуля на второй выход порта C микроконтроллера появится высокий потенциал, который откроет транзисторный ключ и запустит генератор, в результате чего мы услышим звук в динамике.

ISR (TIMER1_COMPA_vect)

Z—;

Хотелось сделать для всех случаев жизни, разных временных интервалов на усмотрение пользователя. Получился такой вариант. Всего две кнопки управления, и один переключатель-перемычка (джампер), два светодиода, отображающих, режимы установки и работы таймера, а так же звуковой контроль осуществляется пьезокерамическим излучателем (за ненадобностью можно его и не подключать, контролируя процесс по миганию светодиода D2).

Одна кнопка (по схеме S1) - "SET" для установки всех режимов, (всё будем делать одной кнопкой зачем нам куча разных ручек,переключателей?), а вторая кнопка (по схеме S2) - "RESET", которая позволит остановить таймер в любой момент приведя его в начальное состояние и отключить реле.

Алгоритм работы

Интервал времени таймера формируется от перемножения двух чисел: первое число (множимое) - это набранный интервал в минутах от 1 до 255, а второе число (множитель), которое при перемножении на, набранное вами, первое число сформирует заданное время таймера.

ПРИМЕР

Допустим надо набрать 1 час = 60 мин., учитывая, что минимальный дискретный временной интервал таймера =1 минуте, мы можем сформировать этот интервал несколькими вариантами, например первое число = 10 минутным интервалом, набираем первое число удерживая кнопку нажатой чтобы (10 раз мигнул светодиод, или «пиликнул» зуммер пьезоизлучателя). Набрав нужное количество, отпускаем кнопку, после этого таймер повторит «озвучит» набранное вами число(мигнув светодиодом и «пиликнув» пьезоизлучателем) набранное количество раз, когда D2 погаснет, после этого начинает прерывисто мигать второй светодиод D1. Это означает, что набор первого числа принят, но установка ещё не завершена, надо продолжать установку, (в этот момент, когда мигает D1 можно замкнуть контакты джампера S3 и оставить их в замкнутом положении, этим действием мы запишем наши настройки в энергонезависимую память микроконтроллера EEPROM, которые там будут храниться до момента записи другого временного интервала вместо прежнего. Это удобно, если вам нужен один временной интервал, которым Вы пользуетесь постоянно. Пока перемычка (джампер S3) замкнута, таймер будет выдавать только этот временной интервал, записанный вами (чтобы не набирать каждый раз снова) и сохранится в памяти при полном обесточивании устройства.

Второе число которое надо выбрать, это - множитель (набирается следом после первого). Для формирования часа тогда должен быть равен 6-ти (10мин. х 6 = 60 =1 час).

Процедура набора, такая же, как и при установке первого числа, посредством удерживания в нажатом состоянии кнопки и считая в такт с мигающим светодиодом D2 шесть миганий. После чего кнопку отпустить, сразу же следом в подтверждение, что число принято индикация D2 мигнёт и "пиликнет" повторно 6 раз, далее светодиод D1 снова начнёт прерывисто мигать. Это означает, что второе число принято и таймер готов к запуску.

СТАРТ

Чтобы запустить таймер надо нажать кнопку "SET" очередной 3-й раз удерживая нажатой около секунды, D2 тут же мигнёт (озвучит) последний раз для напоминания количество набранных вами интервалов и следом включается реле а режим индикации D1 переходит из мигающего в постоянно зажжённое состояние до окончания цикла, D2 по прошествии очередного набранного интервала будет мигать и «пиликать» зуммером.

Столько раз сколько ещё осталось до конца набранного вами суммарного интервала времени? После каждых (набранных в примере) 10 прошедших минут светодиод мигнёт столько раз сколько осталось интервалов 10 минутных из 6-ти по убывающей (5 раз потом 4 потом 3..2..1 и финиш). По окончании всего часового цикла, реле выключит нагрузку. светодиод D1 погаснет, а D2 и зуммер около 8 секунд будут ещё индицировать, оповещая, что цикл закончен.

Для установки в таймере часового интервала вариантов может быть масса. Например, набрать, первое число минута =1, а второе = 60. Тогда через каждую минуту светодиод будет мигать столько раз сколько минут осталось до конца, а можно и первое число сделать = 6-ти минутам, а второе = 10-ти, остальное по аналогии с вышеприведёнными примерами.

Такой универсальный вариант на разные вкусы, поэтому и назвал «УНИВЕРСАЛЬНЫЙ». По сути Вы сами программируете таймер на своё усмотрение, с желаемым вариантом и частотой индикации.

Если, используя таймер, Вам необходимо каждый раз набирать разные интервалы, то перемычку S3 замыкать не надо. А если таймер вам необходим для одного постоянного интервала времени, то целесообразно занести эти параметры один раз, записав их в память EEPROM микроконтроллера, который вы запрограммируете сами, сделав это так.

Установить (замкнуть перемычку джампера S3) надо ТОЛЬКО в период после набора первого или второго числа, когда мигает D1 (ни раньше ни позже) , и оставив её после этого замкнутой постоянно, при дальнейшей эксплуатации, после этого, при каждом очередном запуске таймера, нажимая кнопку «SET» сразу будет включится реле, а зуммер и D2 напомнит вам индикацией, сколько периодов временных вам осталось до конца, когда реле отключится.

Детали

Старался максимум простоты, минимум деталей и органов настроек, получилось: пара светодиодов, зуммер-пьезоизлучатель, транзистор управляющий реле, реле на 12 вольт, которое будет включать нагрузку, микросхема-стабилизатор 7805, процессор ATtiny 13 (с любыми буквами этой серии), да и всё, пожалуй.

Питаться схема будет от источника 12 В. На макетке гоняю, всё работает пока идеально. Если требуется сделать более громким звук зуммера, следует добавить усилительный каскад на транзисторе, наподобие того, как в схеме в предыдущей статье «кухонный таймер ».

Программирование микроконтроллера

ВНИМАНИЕ!!!
Очень важный момент, я использовал в микроконтроллере самую маленькую тактовую частоту внутреннего генератора это 128 кГц / 8 = 16 кГц, Это выставляется фьюзами при программировании (фото я прилагаю, где надо поставить какие галочки).

Почему выбрал такую частоту? Да вот захотелось мне))) а переписывать программу под другую тактовую частоту, потом влом было. Да и не за чем, всё работает. Меня это устраивает. Вам же, решать самим повторять эту конструкцию, или нет.

Так вот при использовании программатора с режимом ISP (типа STK 200 и пр.), которые наиболее часто используются для программирования AVR микроконтроллеров.

Ваш микроконтроллер, запрограммируется моей прошивкой ОДИН РАЗ!!! Повторно перепрограммировать его можно будет только применив параллельное высоковольтное программирование или вернув, перезаписав, заводские настройки (предупреждаю заранее!).

Вернуть заводские настройки можно при помощи программатора с возможностью режима H/V. (высоковольтного программирования). Я пользуюсь как раз программатором с таким режимом в STK 500. Но если вы уверены, что будете делать этот таймер, то первый раз прошивка «зальётся» с любого программатора, и проблем никаких не будет.

В дальнейшем планирую выложить статью со схемой устройства «реаниматор» АТtiny13, как раз для таких случаев. Которое позволит решить данную проблему, перезаписав в «заблокированный» микроконтроллер, снова исходные заводские настройки без привлечения программаторов с режимом параллельного высоковольтного программирования.

ПРОШИВКИ

Выкладываю 2 прошивки. Обе рабочие, но для разных целей. Одна для заливки в Протеусе, (TIMER_PROTEUS.hex). Другая (TIMER_UNIVERSAL.hex) для программирования реального микроконтроллера программатором. Разница между ними небольшая, просто будет погрешность в точности таймера, если залить не ту прошивку.

Выкладываю модель в Протеусе,и прошивку для заливки в проект. Где в реальном режиме времени устройство эмитирует работу таймера так же,как и это будет выглядеть в реальном устройстве. В протеусе можно наглядно увидеть,как будет запрограммирована в EEPROM первая ячейка с адресом 0х00 для первого числа и с адресом 0х01 для числа множителя.

Возможно, прежде чем приступить к сборке устройства, стоит «поиграть» с виртуальной моделью этого «Универсального таймера» в Протеусе, чтобы понять, как работает этот таймер, (звук от зуммера так же эмитируется, прослушать можно со звуковой карты через колонки).

ТАЙМЕР НА МИКРОКОНТРОЛЁРЕ

В интернете, журнале "Радио", а также других изданиях радио технической направленности, было опубликовано немало описаний устройств, предназначенных для отсчёта временных интерва­лов, иначе называемых таймерами. Сложность их схем варьиру­ется от простых, с времязадающими RC -цепями, до сложных на цифровых интегральных микросхемах с кварцевым генерато­ром. В последнее время появились разработки конструкций тай­меров на микроконтроллерах. Продолжая эту тему, я пред­лагаю ещё одну конструкцию, автора С.РЫЧИХИН, из г.Первоуральск, выполненную на микроконтрол­лере, в которой отсутствует кварцевый резонатор

Таймер предназначен для использо­вания в быту, например на кухне. Интервал изменения выдержек време­ни - от 1 до 100 мин при дискретности 1 мин. Схема устройства показана на рис. 1 .


В нём отсутствует кварцевый резонатор, а для формирования такто­вого сигнала использован RC -генератор, входящий в состав микроконтрол­лера. Стабильности частоты этого гене­ратора вполне достаточно для такого таймера. Кроме того, для повышения точности отсчёта реализована возмож­ность коррекции скорости счёта тайме­ра. По окончании заранее установлен­ного временного интервала таймер подаст звуковой сигнал и через опреде­лённое время перейдёт в "спящий" режим ( Power Down ), при котором энер­гопотребление мало (потребляемый ток - около 1 мкА), поэтому выключа­теля питания в устройстве нет В качестве устройства ввода инфор­мации в микроконтроллер применён энкодер (валкодер) S 1 . Для вывода ин­формации предназначен четырёхраз­рядный светодиодный индикатор HG 1, работающий в режиме динамической индикации. Его элементы (катоды светодиодов) подключены к линиям порта РВО-РВ7 микроконтроллера, а тран­зисторы VT 1 - VT 4 управляются сигна­лами с линий PDO , PD 1 , PD 4, PD 6 и подают питание на разряды индикато­ра. Сигнал окончания временного ин­тервала поступает с линии порта PD 5 на транзистор VT 5, который подаёт питающее напряжение на акустический сигнализатор НА1 со встроенным гене­ратором. Элементы R 1, VD 1, С1 фор­мируют сигнал обнуления микроконт­роллера.

После подачи питающего напряже­ния или кратковременного нажатия на кнопку SB 2 "Установка" ("Уст.") на индикатор в течение 1,5 с выводится визуальный эффект "бегущий огонь". После чего таймер переходит в режим установки выдержки времени. Враще­нием ручки энкодера устанавливают нужное число минут и нажимают на кнопку SB 1 "Пуск" - отсчёт времени начался. На индикаторе отображается оставшееся время в минутах и секун­дах. По окончании времени выдержки на индикатор выводятся мигающие символы "- 0 -" и звучит прерывистый звуковой сигнал. Приблизительно че­рез минуту таймер выключится сам - микроконтроллер перейдёт в "спящий" режим. Приостановить работу таймера можно, нажав на кнопку SB 2 "Уст.", и он перейдёт в режим установки времени. Если не нажимать на кнопки и не вра­щать энкодер, таймер через минуту также выключится. В устройстве применены резисторы МЛТ, С2-23 или импортные, оксидные конденсаторы - К50-35 или импортные С2 - К10-17. Замена диода КД522А - любым из серий КД509, КД510, КД522, КД521. Транзисторы КТ361Б можно за­менить любыми серий КТ361, КТ3107, а КТ315Б - серий КТ315, КТ3102. Зву­ковой сигнализатор - EMX -7 TA 6 SP , EMX -703 SP , НРМХ14АХ. Кнопка SB 1 SB 2) - ПКн159, SWT -6 с длинным тол­кателем. В зависимости от типа приме­нённого энкодера кнопка SB 2 "Уст." может быть как встроенной в него, так и отдельной (аналогичной SB 1), в по­следнем случае её размещают на плате рядом с энкодером. Можно применить энкодер без дополнительной кнопки РЕС11-411 5 F - N 001 8 или с кнопкой РЕС11-41 15 F - S 0018 (на него рассчита­на печатная плата на рис. 3 .

Все элементы, кроме батареи питания, размещены на двух печатных платах, чертежи которых показаны на рис. 2 и рис. 3 . Обратите внимание, что последовательно с акустическим излучателем НА1 включена перемычка, она заменяет резистор, который можно установить для снижения громкости звукового сигнала. Платы вместе с держателем элементов батареи установлены в пластмассовом корпусе размерами 40x80x110 мм и соединены между собой изолированными проводами. В верхней крышке сделаны отверстия для индикатора, оси энкодера и толкателя кнопки. Питание таймера производится от батареи из трёх соединённых последовательно гальванических элементов типоразмера AAA. В режиме индикации потребляемый ток составляет 25...50 мА.

На рис. 4 показаны платы устройст­ва в сборе.

На рис. 5 - конфигурация микроконтроллера при его программировании.


Полностью собранный таймер изображён на рис. 6 .


По окончании сборки устройство начинает работать сразу после подачи питания. Но так как частота встроенного RC-генератора у различных экземпляров микроконтроллеров отличается, необходимо выполнить регулировку точности хода таймера. Для этого в устройстве предусмотрен режим коррекции. Для того чтобы войти в этот режим, нужно установить число 22 на индикаторе и нажать на кнопку SB2 "Уст.". На индикаторе появится текущее значение константы коррекции, которая будет записана в регистре OCR1A таймера-счётчика Т1 микроконтроллера. По умолчанию значение константы равно 2500. Энкодером изменяют это значение в большую или меньшую сторону.
Точную цифру подбирают экспериментально. Для этого при первом включении, не изменяя константу, устанавливают выдержку 10 мин. Нажимают на кнопку SB1 "Пуск" и засекают точное время выдержки. Определив разницу хода в секундах, делят её на 600 и получают отклонение за 1 с. Поделив полученный результат на 0,000064, находят число, на которое следует изменить значение константы коррекции. Если таймер "спешит", значение константы увеличивают, если "отстаёт" - уменьшают. В авторском варианте таймера значение константы коррекции установлено 2917. Для выхода из режима коррекции нажимают на кнопку SB1 "Пуск", значение константы будет занесено в EEPROM микроконтроллера. В режиме коррекции функция автоматического отключения питания не действует. Если константа была скорректирована, об этом сообщит короткий звуковой сигнал, звучащий после подачи питающего напряжения. Визуальный эффект можно отключить, если в режиме установки времени выставить на индикаторе число 23, нажать на кнопку SB2 "Уст." и затем, установив 0 взамен 1, нажать на кнопку SB1 "Пуск"

Ну и как всегда файлы для поторения данного устройство можно качнуть по ссылкам прведенным ниже. Удачи!!!

Это схема простого таймера построенного на микроконтроллере PIC16F628A и индикаторе LCD 1602. Идея таймера позаимствована с одного португальского сайта по радиоэлектронике.

Микроконтроллер PIC16F628A в данной схеме тактируется от внутреннего генератора, который является достаточно точным для данного случая, но поскольку выводы 15 и 16 остаются незанятыми, то можно было бы использовать внешний кварцевый резонатор для большей точности.

Таймер на PIC16F628A. Описание работы

Как уже было сказано ранее, этот проект создан на основе уже существующего проекта, но на самом деле обе схемы отличаются друг от друга, и поэтому код был практически полностью переписан. В таймере для управления есть три кнопки: «START/STOP», «MIN» и «SEC»

  1. «START/STOP» — для запуска и приостановки таймера.
  2. «MIN» — для установки минут. Количество минут устанавливаются от 0 до 99, а затем все начинается снова с 0.
  3. «SEC» — для установки секунд. Секунду также устанавливаются от 0 до 59 и потом снова с 0.

Одновременное нажатие на «MIN» и «SEC» приводит к сбросу таймера во время работы.

Когда время на таймере достигает 00:00, раздается звуковой сигнал (3 коротких и 1 длинный звуковой сигнал) и светодиод HL1 загорается. В качестве звукоизлучателя применен зуммер электромагнитного типа. После этого, при нажатии одной из кнопок, происходит сброс таймера и выключение светодиода HL1.

Когда таймер производит обратный отсчет на выводе 13 (RB7) находится высокий уровень, а при остановке таймера появляется низкий логический уровень. Данный вывод можно использовать для управления внешними исполнительными устройствами. питание таймера осуществляется от cстабилизированного источника на .

Перемычка J1 предназначена для калибровки таймера. При ее замыкании таймер входит в режим настройки. С помощью кнопок «MIN» и «SEC» можно увеличить/уменьшить значение внутреннего параметра, который позволяет замедлять или ускорять работу таймера. Это значение сохраняется в EEPROM. Если находясь в этом режиме нажать кнопку «START/STOP», то этот параметр будет сброшен до значения по умолчанию.

Код написан и скомпилирован с mikroC PRO для PIC.

Параметры проекта:

  • Генератор: INTOSC
  • Частота генератора: 4 МГц
  • Сторожевой Таймер: отключен
  • Power-up таймер: включен
  • RA5/MCLR/VPP: отключен
  • Brown-out: включен

Фото готового таймера.

Простая схема хорошего таймера на МК atmega8, удобная навигация в меню, жидкокристаллический LCD дисплей, часы реального времени, минимальное количеством деталей.

Очень полезная вещь, например для теплицы, можно организовать полив или циркуляцию в гидропонике, можно настроить кормушки и поилки для животных, птиц и много еще для чего.


Сердцем данного таймера является очень популярный и уже не дорогой микроконтроллер Atmega8.

Конечно для прошивки нам потребуется программатор, но если его нет то можно обойтись всего 4 проводками подключенными к LPT порту по этой схеме.

Что нам понадобится:

Схема таймера

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

Как вариант исполнительного устройства на триаках, тиристорах и симисторах показаны ниже.



Вариант из программы Sprint Layout.

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

Микроконтроллер прошивается программатором или с помощью простых 5 проводов.

Автор прошивки (скачать — multitimer) постарался и не стал изменять фьюзы, что очень сильно облегчает, без заморочки, прошивку для начинающего радиолюбителя. Если МК еще не использовался, новый из магазина, то просто заливаете прошивку и все, но если уже есть изменения в фьюзах, то надо выставить их так CKSEL=0001. Все остальное просто и не нуждается в пояснении.

Для корпуса очень удобно использовать распаечные коробки из пластмассы, они бывают разных размеров и форм.

В прорезанную ножом крышку, при помощи термоклея из пистолета, закрепляем LCD экран., прорезаем отверстия под кнопки управления и кнопку питания.

Размещаем все узлы внутри корпуса, постоянно проверяя как закрывается крышка, при необходимости переносим или подгибаем мешающие.

На собранную схему подаем питание, должно появиться такое изображение.

Управление осуществляется четырьмя кнопками. Меню состоит из трех пунктов, СLОСК -установка часов, RЕSЕТ -сброс всех установленных таймеров, ТIМЕR — установка таймеров.

Сначала заходим (*) в меню часов и выставляем (>)(<)(#) точное время.


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

Теперь все готово чтобы корректно задавать временные позиции таймера, после нажатия решетки, программа записывается в постоянную память МК.



Что еще почитать