Site Loader

Простой таймер на PIC16F628A. Схема и описание

Главная » Бытовая электроника » Простой таймер на PIC16F628A. Схема и описание

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

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

Как уже было сказано ранее, этот проект создан на основе уже существующего проекта, но на самом деле обе схемы отличаются друг от друга, и поэтому код был практически полностью переписан. В таймере для управления есть три кнопки: «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стабилизированного источника на 78L05.

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

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

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

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

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

Тестер транзисторов / ESR-метр / генератор

Многофункциональный прибор для проверки транзисторов, диодов, тиристоров…

Подробнее

Скачать прошивку и рисунок печатной платы (unknown, скачано: 4 096)

Блок питания 0…30В/3A

Набор для сборки регулируемого блока питания…

Подробнее




Categories Бытовая электроника Tags PIC16F628, Таймер

Отправить сообщение об ошибке.

таймер на PIC16F628A — MBS Electronics


Таймерами называют довольно широкий диапазон различных технических устройств а также внутренних узлов микроконтроллеров. В данном случае таймер — это цифровое устройство, предназначенное для включения и отключения внешнего устройства по заданной программе. Это может быть, например, устройство автоматического полива растений или устройство автоматического кормления аквариумных рыбок.. Все зависит от вашей фантазии. К примеру, я когда-то долгое время использовал подобное устройство для периодического включения / выключения холодильника, у которого сломалось механическое термореле.

Таймер собран на очень распространенном и дешевом микроконтроллере от Microchip, 8-разрядный PIC16F628A. Пользователь может запрограммировать интервал между включениями внешнего устройства и продолжительность его работы. максимальное время паузы и включения составляет 99 часов 59 минут, то есть, фактически 100 часов.

Для управления таймером используются четыре кнопки, а для отображения информации применен стандартный ЖК индикатор на 2 строки из 16 символов, работающий на основе контроллера HD44780U от фирмы Hitachi.

Для управления внешним устройством использовано электромагнитное реле. Обмотка реле должна быть рассчитана на напрядение 5V. Микроконтроллер управляет реле через ключ на транзисторе PN2222. Контакты реле должны быть рассчитаны на ток, потребляемый управляемым устройством. Кнопки управления подключены к портам микроконтроллера RB0, RA2, RA3 и RA4.

Дисплей работает в четырехбитном режиме и для его управления требуется 6 портов микроконтроллера. Для звуковой сигнализации включения и отключения нагрузки использован пьезокерамический звонок. Звуковой сигнал также подается и при включении питания таймера.

Блок питания таймера содержит стабилизатор напряжения +5V на микросхеме — регуляторе LM7805. Для питания таймера от сети 220 вольт можно использовать любой нестабилизированный сетевой адаптер, купленный на китайском рынке. Выходное напряжение адаптера может быть в переделах 9 — 14 вольт.

Если мы внимательно посмотрим на схему устройства, то заметим, что выводы индикатора с номерами 15 и 16 не используются. они подключаются только в индикаторах с фоновой подсветкой. если вы хотите использовать индикатор с подсветкой, то подключите ее к +5B через резистор сопротивлением 39 Ом.



Кнопка Start/Stop. При нажатии на эту кнопку таймер запускается или останавливается. При первом нажатии начинается отсчет времени выключенного состояния. Потом таймер включает внешнее устройство и начинает отсчет времени во включенном состоянии.

Кнопка On/Off Time позволяет запрограммировать таймер, установив время выключенного и включенного состояний внешнего устройства.

Кнопка Select дает возможность переключаться между устанавливаемым параметром — часы — минуты — время включенного состояния — время выключенного состояния.

Кнопка Enter служит для подтверждения установленного значения.

Основные компоненты для сборки таймера можно недорого купить в Китае по следующим ссылкам:

Реле 5 В

Транзистор PN2222

Стабилизатор 7805

Lcd дисплей 16X2

Контроллер PIC16F628A

Прошивка для микроконтроллера написана в комприляторе MicroC Pro for PIC компании MikroElektronika.

Скачать архив с файлами прошивки

Источник: www.embedded-lab.com
Digital programmable Timer Switch
23 декабря 2010 г.


1602 Displaydigital circuitsMCUMicrochip PICmicrocontrollertimerцифровые схемы

PIC16F628A Программируемый цифровой таймер — Electronics-Lab.com

Программируемые реле находят применение во многих приложениях автоматизации, таких как автоматическое управление уличным освещением, управление поливом и насосами, HVAC, домашняя автоматизация, автоматизация электростанций в промышленности и т. д. В этой статье описывается, как создать полнофункциональное одноканальное программируемое реле. коммутатор с помощью микроконтроллера PIC16F628A. Он позволяет установить время включения и выключения. Максимальный временной интервал, который вы можете установить для операций включения и выключения, составляет 99 часов 59 минут. Еще одна интересная особенность этого проекта заключается в том, что он предлагает циклическую опцию, что означает, что вы можете запускать его в непрерывном цикле циклов включения и выключения.

Устройство можно запрограммировать с помощью 4 нажимных переключателей. Меню программирования и состояние устройства отображаются на ЖК-дисплее 16×2 символа. Временное разрешение этого релейного таймера составляет 1 минуту. Таймер также сохраняет введенные пользователем данные во внутреннюю память EEPROM, чтобы он мог сохранить эти значения после любого прерывания подачи питания. Вот краткое описание функций этого таймера:

  • Таймер с питанием от микроконтроллера
  • Настройка времени ВЫКЛ и ВКЛ для работы реле
  • Опция для циклического запуска
  • Диапазон времени ВКЛ/ВЫКЛ: от 0 до 99 часов 59 минут
  • 1-минутное временное разрешение
  • Интерактивный пользовательский интерфейс с 4 тактовыми переключателями и символьным ЖК-дисплеем
  • Зуммер
  • Встроенный регулятор напряжения +5 В

Принципиальная схема

Аппаратная часть этого проекта очень проста. Вся схема питается от регулируемого источника питания 5 В, полученного с использованием популярного чипа линейного стабилизатора LM7805 (рис. 1). Чтобы свести к минимуму тепловыделение в регуляторе напряжения, рекомендуемое входное постоянное напряжение для LM7805 составляет 9 В.V, который можно легко получить от настенного адаптера постоянного тока. Диод D1 (1N4001) служит для защиты от обратной полярности в схеме. S1 — ползунковый переключатель для включения и выключения питания.

На рис. 2 показаны настройки ввода и вывода. В этом проекте пять тактильных переключателей: один для сброса микроконтроллера и четыре для пользовательских входов. Четыре входных переключателя называются Menu/+, Select, Enter и Start/Stop. Их функции будут описаны в разделе программного обеспечения. Состояние 4 входных переключателей считывается микроконтроллером PIC16F628A через порты RA2, RA3, RA4 и RB0. Выходной ЖК-дисплей представляет собой стандартный дисплей на основе HD44780 и работает в 4-битном режиме. Назначение контактов для данных ЖК-дисплея и управляющих сигналов показано на рисунке 2. S2 — еще один ползунковый переключатель, позволяющий вручную управлять подсветкой ЖК-дисплея.

Переключатель выходного реле управляется транзистором NPN (2N2222). Проект также включает в себя зуммер постоянного тока, который издает звуковой сигнал, когда релейный переключатель меняет свое состояние. Цепи реле и зуммера показаны на рисунке 3.

Микроконтроллер PIC16F628A работает на частоте 4,0 МГц с использованием внешнего резонатора. Контакты ввода/вывода PIC16F628A, подключение резонатора и разъем внутрисхемного последовательного программатора (ICSP) показаны на рисунке 4.


Рисунок 1. Регулируемый блок питания +5 В

Рис. 2. Схема ввода/вывода с назначением контактов PIC16F628A


Рис. 3. Схема управления реле и зуммером

Рис. 4. Резонатор PIC16F628A и соединения разъема ICSP
Назначение контактов PIC16F628A для ЖК-дисплея, переключателей, реле и зуммера перечислены в следующей таблице.

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

Программное обеспечение

Программируемый релейный таймер получает сигналы от 4 кнопок. Их функции описаны следующим образом:

Меню/+ : Эта кнопка позволяет перемещаться между различными опциями меню, такими как настройка времени включения, настройка времени выключения и настройка циклических параметров. Эти параметры отображаются на ЖК-дисплее. Эта кнопка также служит для увеличения цифры во время установки времени. Время задается в формате ЧЧ:ММ, что дает минимальное значение временного интервала равное 1 минуте.

Выберите : Это позволяет вам выбрать отображаемый пункт меню, а также отдельные цифры часов и минут. Выбранная цифра увеличивается на 1 при нажатии кнопки Меню/+.

Введите: Когда установлены соответствующие часы и минуты, нажатие кнопки «Ввод» завершает установку времени. Циклическая опция также вводится с помощью этой кнопки.

Старт/Стоп: Эта кнопка запускает и останавливает таймер. Если таймер уже включен, вы можете остановить его в любой момент во время его работы, нажав эту кнопку.

Теперь посмотрим, как это работает. Допустим, релейный выключатель нужно включить через 15 минут на 10 минут. Это означает, что время выключения составляет 15 минут, а время включения — 10 минут. После запуска таймера после ввода вышеуказанного времени устройство включится через 15 минут и останется включенным в течение 20 минут. После этого он снова будет выключен. Если для параметра Cyclic выбрано значение 1, таймер будет работать в цикле, и после следующих 15 минут выключения реле будет включено на следующие 10 минут и так далее.

Прошивка для этого проекта разработана с использованием компилятора mikroC Pro для PIC от микроЭлектроника. Хронометраж достигается с помощью модуля Timer 0, встроенного в PIC16F628A. Прерывание Timer0 включено и работает со значением предварительного делителя 1:256, чтобы создать точную продолжительность 500 мс (полсекунды). Символ двоеточия между цифрами HH и MM мигает с частотой 1 Гц. Полсекундная задержка повторяется 120 раз, чтобы создать минутную продолжительность. Вы можете загрузить полные файлы проекта, включая исходный код и скомпилированный HEX-файл, в прикрепленном файле.

Фотографии

На следующем видео показан таймер в действии.

 

Ключевые слова:

  • Функцией зуммера является оповещение пользователя звуковым сигналом при каждом включении и выключении реле.
  • В случае сбоя питания таймер извлечет выбранное пользователем время включения и выключения из EEPROM. Но таймер будет остановлен и не запустится, пока пользователь не нажмет
    Старт
  • Все принципиальные схемы, использованные в этом проекте, являются оригинальными и нарисованы автором в редакторе схем EasyEDA. EasyEDA — это бесплатный онлайн-инструмент САПР для компоновки схем, проектирования печатных плат и моделирования.

Автор: Радж Бхатт (энтузиаст электроники, производитель оборудования и основатель Embedded Lab; посетите мой магазин Tindie)

  • Embedded Lab (http://www.embedded-lab.com)
  • Посетите мой магазин Tindie (https://www.tindie.com/stores/rajbex/)
  • Ключевые доклады: EasyEDA (http://www.easyeda.com)

Подпишитесь на нас и поставьте лайк:

таймер 0 и PIC16F628A

Джона Уайлдера

Встроенный таймер на PIC некоторых сбивает с толку. Но не волнуйтесь… это, вероятно, одно из самых простых встроенных периферийных устройств для использования с PIC. В этой статье мы будем использовать PIC16F628A в качестве примера того, почему это так.

Таймер 0 (TMR0) — это один из трех таймеров, доступных на 16F628A, который работает постоянно — отключить его невозможно. По сути, это 8-битный регистр в SFR, и источник тактового сигнала управляет его значением. Источником тактового сигнала для TMR0 может быть либо внешний стробирующий сигнал, подаваемый на контакт RA4/T0CKI (T0CKI = тактовый вход таймера 0), либо внутренний тактовый сигнал командного цикла. При работе с внешним стробоскопом это может быть счетчик, который «подсчитывает» строб-импульсы внешнего источника стробоскопа. При работе с часами командного цикла он работает как таймер. По этой причине иногда можно услышать, как инженеры называют TMR0 «таймером/счетчиком».

Значение, находящееся в регистре TMR0, начинается с 0x00, а затем увеличивается на единицу при каждом переходе источника тактового сигнала с низкого уровня на высокий. Вы также можете настроить его для увеличения при переходе от высокого к низкому или от низкого к высокому с помощью внешнего источника синхронизации. По сути, это просто регистр, который подсчитывает импульсы от одного из двух возможных источников тактовых импульсов до 0xFF (десятичное число 255). В этом примере мы будем использовать часы инструкций, работающие как таймер.

Тактовый генератор инструкций работает на частоте 1/4 частоты Fosc. Это означает, что если Fosc = 4 МГц, наши часы инструкций работают на частоте 1 МГц, или одна инструкция в микросекунду. В этом сценарии — при условии, что мы не назначаем предварительный делитель TM — значение TMR0 увеличивается на каждый импульс тактового сигнала инструкции. При тактовой частоте инструкции 1 МГц это увеличивает значение в регистре TMR0 один раз в микросекунду (1/μ).

Поскольку размер регистра TMR0 составляет всего 8 бит, максимальное значение, до которого может быть увеличено значение TMR0, равно 0xFF или десятичному числу 255. В этот момент оно будет сброшено до нуля при следующем тактовом импульсе. Как только это происходит, в регистре INTCON устанавливается флаг прерывания Таймера 0 (T0IF). Этот флаг должен быть сброшен в программном обеспечении.

Поскольку TMR0 в настоящее время работает с одним приращением на мк, это означает, что обновление происходит, и флаг T0IF устанавливается один раз каждые 256 мк (0x00–0xFF или 0–255 для 256 приращений). Если мы хотим знать, когда прошел период 256 мк, мы можем очистить TMR0, очистить флаг T0IF, затем опросить флаг прерывания T0IF, пока T0IF не станет высоким (произошло опрокидывание), и продолжить нашу программу.

Конечно, таймер был бы бесполезен без какого-либо способа замедлить его до различных скоростей приращения. Это работа «прескейлера». Предварительный делитель позволяет нам предварительно масштабировать таймер таким образом, чтобы вместо того, чтобы увеличивать его при каждом тактовом импульсе, мы могли увеличивать его каждые два тактовых импульса, каждые четыре, каждые восемь и т. д. вплоть до каждых 256 тактовых импульсов. Если бы мы установили предварительный делитель на 1:256 с тактовой частотой команд 1 МГц, таймер увеличивался бы один раз каждые 256 микрон. Поскольку наш регистр TMR0 может считать до 256, он будет подсчитывать, сколько раз период 256 мк проходит до 256 раз. Это означает, что T0IF будет устанавливаться каждые 65,5 мс (миллисекунды… 256 мкс x 256 = 65,5 мс).

Четыре регистра TMR0
С TMR0 связаны четыре регистра: TMR0, OPTION_REG, INTCON и TRISA. Давайте рассмотрим это подробно.

TMRo
Регистр TMR0 содержит значение, которое увеличивается источником синхронизации. Любая запись в этот регистр (например, clrf TMR0, movwf TMR0, bsf TMR0, X) также очистит предварительный делитель обратно до предварительного масштабирования 1:2. Это означает, что вам придется сбрасывать предварительный делитель обратно в исходное положение каждый раз, когда вы записываете в регистр TMR0, если вы установили его где-либо, кроме 1:2.

OPTION_REG
____
| РБПУ |ИНТЕДГ| Т0КС | Т0СЭ | СРП | PS2 | ПС1 | ПС0 |

Регистр OPTION содержит управляющие биты для следующего:

  • Источник синхронизации таймера 0 (T0CS)
  • Бит выбора фронта источника таймера 0 (TOSE)
  • Бит назначения предварительного делителя (PSA)
  • Биты выбора скорости предварительного делителя (PS2-PS0)

T0CS — выбирает источник синхронизации для TMR0. По умолчанию 1/T0CKI. Очистка этого бита выберет тактовый сигнал инструкции в качестве источника тактового сигнала TMR0.

T0SE — выбирает, будет ли TMR0 увеличиваться по нарастающему или по заднему фронту T0CKI. По умолчанию 1/приращение по заднему фронту. Применяется только тогда, когда T0CKI является источником синхронизации.

PSA — устанавливает, назначен ли прескалер TMR0 или сторожевому таймеру. По умолчанию 1/пределитель назначен WDT. При назначении WDT TMR0 работает с предмасштабированием 1:1 (увеличивается при каждом импульсе источника тактового сигнала).

PS2-PS0 – Устанавливает скорость предварительного делителя в диапазоне от 1:2 до 1:256 в значениях, кратных битам. По умолчанию 111/1:256 (1:128, если назначен WDT).


Настройка TMR0 с тактовой частотой инструкций в качестве источника тактовой частоты и предварительным делителем 1:4 Бит флага прерывания TMR0 (T0IF). Если прерывание TMR0 разрешено (T0IE = 1…отключено по умолчанию), программный счетчик перейдет к коду обработчика прерывания при переполнении TMR0, когда будет установлен T0IF (T0IF должен быть сброшен в программном обеспечении перед выходом из прерывания). Однако, поскольку T0IF продолжает нормально работать независимо от того, включено или отключено прерывание TMR0, оно всегда доступно для опроса, если вы не хотите, чтобы TMR0 вызывал прерывание.


Настройка прерывания TMR0

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

 

TRISA
Регистр TRISA содержит бит направления порта для RA4/T0CKI. Чтобы настроить RA4 в качестве входа источника тактового сигнала TMR0, необходимо установить бит 4 TRISA, чтобы настроить его в качестве входа.


Полная настройка TMR0 с прерыванием, тактовым сигналом инструкций в качестве источника тактового сигнала и предварительным делителем 1:4

 

опросите флаг прерывания TMR0, чтобы узнать, когда произойдет переполнение:

 

Использование TMR0 в качестве счетчика
Вы также можете настроить TMR0 в качестве счетчика импульсов. Для этого вы настраиваете T0CKI в качестве источника тактового сигнала, устанавливая бит T0CS в OPTION_REG. Бит T0SE в OPTION_REG определяет, увеличивается ли значение регистра TMR0 по заднему фронту источника импульсов (1) или по нарастающему фронту источника импульсов (0).

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

И это все, что нужно знать о TMR0. Простой не так ли?


Об авторе
Джон Уайлдер — внештатный инженер-электронщик и энтузиаст электроники с более чем 20-летним стажем. Он провел четыре года в ВМС США в качестве техника по авиационной электронике. Джон также играет на гитаре с 13 лет и начал интегрировать электронику и музыку с 15 лет.

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *