Простой таймер-термометр на PIC16F628A — MBS Electronics
Бытовой таймер и термометр на микроконтроллере PIC16F628A, датчике температуры DS18B20 и ЖК индикаторе HT1613.
Этот небольшой таймер собран на основе дешевого восьмиразрядного микроконтроллера Mucrochip PIC16F628A. Питание устройства от четырех элементов типа AA или AAA. таймер потребляет совсем небольшой ток и поэтому комплект их четырех элементов AA можно использовать в течение нескольких лет. Экономичность таймера обусловлена еще и тем, что он отображает информацию на экономичном ЖК дисплее типа HT1613 (HT1611 он же КО-4В).
HT1613 — это очень простой дисплей, который управляется от микроконтроллера через простейший последовательный интерфейс. Описание дисплея и его работы вы можете почитать в этой статье. Такие дисплеи часто используются в стационарных телефонных аппаратах для индикации набираемого номера. Такой дисплей дешев и потребляет очень мало электроэнергии, поэтому его можно с успехом использовать в самодельных цифровых устройствах. Кроме того, для подключения к микроконтроллеру требуется всего 2 порта, поэтому дисплей удобно использовать с контроллерами, у которых небольшое число выводов.
Возможности таймера:
-Максимальная выдержка — 65536 секунд или немного более 18 часов
—Шаг установки выдержки времени — 1 минута или 1 секунда
-Временное прерывание обратного отсчета (пауза)
—Диапазон измерения температуры -55°C до +125° (датчик 18B20)
—Точность измерения температуры 0.1 ℃
-Звуковая сигнализация (двухтональная «трель»)
-Вывод для управления внешним устройством
—Питание от батареи 6 вольт (4 элемента AA или AAA) . Работоспособность сохраняется при снижении напряжения питания примерно до 4.3 В
Основа таймера — микроконтроллер PIC16F628A. Это популярный восьмиразрядный микроконтроллер производства компании MICROCHIP. Для написания прошивки я использовал компилятор MikroC Pro for PIC сербской компании MiKroeleKtroniKa.
Микросхема имеет 2048 12-битных слов flash памяти программ, 224 байта оперативной памяти для и 128 байт энергонезависимой памяти пользователя (EEPROM) . Программа написана на С и занимает около 75 процентов памяти контроллера.
Я собрал таймер на макетной плате, но специально для этой статьи развел для него печатную плату в программе DipTrace. Если вы захотите повторить таймер, можете использовать печатную плату или собрать устройство навесным монтажом как это сделал я. Архив с прошивкой и проект для DipTrace вы можете скачать с моего GitHub.
Принципиальная схема печатной платы таймера
Видео: Схема соединения печатной платы и внешних элементов. Если ролик не начал проигрываться автоматически, то нажмите кнопку воспроизведения)
ISCP port — это контакты на плате, предназначенные для внутрисхемного программирования микроконтроллера. Можно прошить микроконтроллер в программаторе отдельно от печатной платы и потом установить его на печатную плату. Тогда можно не устанавливать ISCP port. Микроконтроллер желательно устанавливать на печатную плату на панельку.
Источник питания — четыре элемента напряжением 1.5 В, установленные в стандартный батарейный блок. Плюсовой провод батареи питания через выключатель POWER соединяем с пином BAT-6V (здесь символ «-» не полярность, а разделитель) печатной платы. Минусовой вывод батареи подключаем к контакту GNG1 на печатной плате.
Также соединяем выводы ЖК дисплея, кнопок, динамика — зуммера (пищалки) и термодатчика с соответствующими контактами на печатной плате так, как это показано в ролике выше.
Температурный датчик 18B20 можно установить внутри корпуса, но тогда термометр сможет измерять только температуру в вашей комнате. Можно соединить датчик кабелем из 3 проводов длиной до нескольких метров. Нужно припаять провода кабеля к выводам датчика и изолировать каждый вывод датчика отрезками тонкой термоусадочной трубки. затем на всю эту конструкцию одеваем отрезок термоусадки большего диаметра. Такой датчик несколько лет измеряет температуру воздуха на улице за окном. На корпусе таймера я установил стандартное 3.5 мм аудио гнездо а на кабель датчика припаял миниджек 3.5 мм (как на наушниках для мобильного телефона).
Если вам не нужно измерение температуры, то термодатчик можно не использовать. Функционирование в режиме таймера от этого не изменится.
Таймер умеет управлять каким либо внешним устройством. Это может быть электромотор, лампа для засветки фоторезиста или какое-то другое устройство, которое необходимо включить на заданное время. Для этого предусмотрен контакт CONTROL на печатной плате. При старте отсчета времени на контакте CONTROL появляется высокий уровень напряжения, а по завершении выдержки времени — низкий уровень.
Для подключения внешнего устройства необходимо использовать ключ на транзисторе и электромагнитное реле. Схема подключения изображена на рисунке ниже:
Каскад реле необходимо питать от внешнего источника питания. Напряжение источника должно соответствовать номинальному рабочему напряжению используемого реле.
Для программирования («прошивки») микроконтроллера PIC16F628 можно использовать клон программатора PicKit2, описанный в этой или этой статье.
Работа устройства
В момент включения устройство находится в режиме таймера. После первого включения питания (после прошивки контроллера) на экране мы увидим следующее:
00-00-00
мы видим три двузначных числа, разделенных символом —.
Первое число — это часы, второе — минуты и третье — секунды, то есть можно записать так: ЧЧ-ММ-СС. В последствии после включения питания на экране будет восстановлена выдержка времени, которая была использована последний раз.
Установленная выдержка времени сохраняется в EEPROM памяти микроконтроллера. Это происходит при запуске таймера на отсчет времени. Иными словами, для того чтобы таймер запомнил установленную выдержку времени, нужно хотя бы один раз нажать кнопку S.
Таймер управляется четырьмя кнопками. Кнопки помечены буквами S, M, U, D
S — (Start/Stop) Старт и останов отсчета времени / установка с точностью секунда
M (Mode) — переключение режима работы таймер/термометр, в режиме отсчета — функция «Пауза».
U — (Up) Увеличение выдержки времени
D — (Down) Уменьшение выдержки времени
Для перехода в режим термометра нажимаем кнопку M.
Для перехода обратно в режим таймера нужно нажать кнопку M, удержать ее нажатой около секунды и отпустить. Устройство вернется в режим таймера.
Установка времени выдержки
Для увеличения выдержки времени на одну минуту нажимаем кнопку U.
Для уменьшения выдержки времени на одну минуту нажимаем кнопку D.
Для увеличения выдержки времени на одну секунду удерживаем нажатой кнопку S и нажимаем кнопку U.
Для уменьшения выдержки времени на одну секунду удерживаем нажатой кнопку S и нажимаем кнопку D.
Для быстрой установки удерживаем в нажатом состоянии кнопку U или D.
Для сброса времени (обнуления) нажимаем кнопку S и удерживая ее в нажатом состоянии нажимает кнопку M. Дисплей вернется в состояние 00-00-00.
Для старта выдержки времени нажимаем кнопку S. Нужно иметь в виду что старт отсчета времени произойдет в момент отпускания кнопки. Начнется обратный отсчет времени и включится высокий уровень на контакте платы CONTROL, который вы можете использовать для управления каким либо внешним устройством.
Для досрочной остановки таймера нужно еще раз нажать кнопку S. При этом отсечёт времени остановится и дисплей вернется к исходному состоянию (установленное время)
Для временного прерывания таймера в процессе отсчета нажмите кнопку M. Это — режим «Пауза«. Отсчет времени прекратится а на дисплее останется момент нажатия на кнопку M. Для продолжения отсчета еще раз нажмите кнопку M.
После окончания отсчета времени таймер подаст звуковой сигнал. Звуковой сигнал можно выключить, нажав кнопку S, иначе он будет продолжаться примерно 25 секунд.
Скачать файл прошивки, исходники и проект печатной платы для DipTrace
См. также:
Универсальный адаптер для программирования PIC контроллеров…
Клон программатора PicKit2 своими руками…
Программирование AVR контроллеров программатором PicKit2
Термометр на PIC16F628A | Полезный изобретения на микроконтроллерах
В данной статье будет описан цифровой термометр на микроконтроллере PIC16F628A с функцией памяти максимальной и минимальной измеренных температур.
Интернет пестрит всевозможными предложениями различных цифровых термометров на микроконтроллере, попадаются и запоминающие, но (меня поймет каждый радиолюбитель) всегда хочется чего-нибудь своего!!! Так и в моем случае появилась острая необходимость сделать цифровой термометр на микроконтроллере PIC16F628A, а нужен он мне был для измерения рабочей температуры мощных симисторов в процессе отладки терморегуляторов, позднее было принято решение использовать цифровой термометр и для измерения температуры в комнате и на улице.
Особенности принципиальной схемы цифрового термометра на микроконтроллере:
- Проста в повторении;
- Малое количество деталей;
- Надежность при длительном использовании и при воздействии возможных помех.
Принципиальная схема термометра показана на рисунке 1
Рисунок 1 — Схема принципиальная
Важная деталь — принципиальная схема запоминающего термометра на микроконтроллере разрабатывалась параллельно с печатной платой, так как микроконтроллер вещь универсальная (каждый пин любого из портов можно настроить как на вход, так и на выход). Отсюда – разводим сначала печатную плату, так как нам удобно, а после рисуем принципиальную схему. Это очень удобная методика! Признаюсь не моя, подглядел на каком-то из форумов! Автору респект!!!
Теперь немного подробнее рассмотрим особенности отдельных узлов принципиальной схемы запоминающего термометра на микроконтроллере PIC16F628A.
Сердцем термометра является микроконтроллер PIC16F628A фирмы Microchip. Это довольно распространенный и не дорогой микроконтроллер. Немало важным достоинством, которого является наличие энергонезависимой памяти и внутренней RC цепочки, которую можно использовать в качестве тактового генератора с фиксированной частотой 4МГц. Такое решение позволяет исключить из схемы обычный кварцевый резонатор и два конденсатора. Вдобавок освобождаются еще и два пина микроконтроллера. Сброс осуществляется при подаче питания, внешняя цепочка сброса исключена, тем самым уменьшилось общее количество деталей, и освободился еще один пин мк.
В качестве датчика температуры был выбран широко распространенный цифровой датчик DS18B20 фирмы Maxim, он не дорогой и передает информацию о измеренной температуре в цифровом виде, что позволяет не заботится о длине проводов, их сечении и прочее. Датчик DS18B20 способен измерять температуру от -55… +125 °С.
Информация выводится на 3-х разрядный семисегментный индикатор с общим катодом (ОК). Резисторы R5-R12 – токоограничивающие, катоды индикатора включены через транзисторы, это сделано для того чтобы не нагружать отдельные пины микроконтроллера. Кнопка SB1 нужна для отображения максимальной и минимальной измеренной температуры, а также для сброса этих величин. Кнопка SA1 переключает датчики(дом, улица).
В процессе разработки цифрового термометра на микроконтроллере была создана его упрощенная виртуальная модель в программе протеус см. рисунок 2
Печатная плата цифрового термометра, показанная на рисунке 3-4, была разработана в программе Sprint-Layout 5. Если программы нет, тогда можно воспользоваться PDF файлами печатной платы термометра, которые подготовлены в масштабе 1:1. Сам ими пользуюсь. В архиве также есть платы в зеркале. Текстолит выбран двухсторонний.
Рисунок 3 — Плата печатная вид снизу
Рисунок 4 — Плата печатная вид сверху
Плату разрабатывал, учитывая воздействие возможных помех. Для этого в схему были добавлены барьерные резисторы R1, R3, R14-R15. А также два конденсатора С1-С2. Термометр на микроконтроллере PIC16F628A, собранный из заведомо рабочих деталей, не требует наладки и начинает работать сразу после включения.
Рабочая программа для микроконтроллера была написана на языке ассемблер и отлажена в MPLab v 8.8. В результате получился вот какой термометр рисунки 5-7.
Рисунок 5 — Внешний вид термометра
Рисунок 6 — Внешний вид термометра(плюсовая температура)
Рисунок 7 — Внешний вид термометра(минусовая температура)
Рассмотрим что умеет делать термометр.При первом подключении цифрового термометра к источнику питания напряжением +5В. Однако в битах конфигурации микроконтроллера отключен детектор снижения напряжения, так что можно падавать и меньшее напряжение. На индикаторе на некоторое время высветятся три прочерка, это стартовая заставка, далее будет отображаться текущая температура датчика. Температура выводится на индикатор в диапазоне от -9,9 до 99°С с точностью до 0,1°С, в диапазоне от -55 до -10 и от 100 до 125 °С с точностью до 1°С. Незначащий первый разряд по необходимости гаситься. При первом запуске пороговые температуры обязательно перезапишутся во временной памяти, а после 5 минут и в энергонезависимой, при последующих запусках перезапись происходит только если выполняется условие превышения пороговых температур(максимальной или минимальной). Почему энергонезависимая память перезапишется не сразу, а через 5 минут??? Это специальный прием, который задает щадящий режим работы энергонезависимой памяти. За первые пять минут температура может измениться несколько раз, а запишется все равно самая максимальная/минимальная.
Если кратковременно нажать на кнопку SB1, то на индикатор будут поочередно выведены максимальная и минимальная измеренные температуры(и две заставки одна для максимальной -П- и одна для минимальной -U-), если кнопку нажать и удерживать до появлений трех прочерков, то произойдет сброс пороговых температур.
Термометр на PIC16F628A автоматически определяет наличие и исправность датчика DS18B20, исправность линии связи датчика DS18B20 с термометром. При отсутствии и обрыве датчика DS18B20, коротком замыкании плюсового провода с проводом информации, при переполюсовке плюсового и минусового проводов линии связи датчика DS18B20 с термометром на индикаторе появится сообщение Er1. Каждую секунду происходит повторная проверка датчика
Готовую плату термометра разместил в китайском будильнике, предварительно выкинув от туда все не нужное. Вот что из этого получилось(рисунки 8, 9).
Рисунок 8 — Плата термометра в китайском будильнике
Рисунок 9 — Плата термометра в китайском будильнике
Технические характеристики:
- Диапазон измеряемых температур———————————————от -55 до +125 С
- Разрешающая способность измерения и отображения
- от-50 до -10 и от +100 до +120 С————————————————————1 С
- от-9,9 до+99,9—————————————————————————0,1 С
- Точность измерения температуры DS18B20 прибор высокой точности имеющий заводскую калибровку.
- Напряжение питания———————————————————————-5 Вольт
И так подведем итоги…. У нас получился термометр на микроконтроллере PIC16F628A с энергонезависимой памятью, которую, по желанию, можно сбросить. Выбран щадящий режим записи в энергонезависимую память. Есть возможность просмотреть самую минимальную и самую максимальную измеренную температуру одним нажатием на кнопку. Принципиальная схема термометра проста и не содержит дефицитных деталей. В схеме применяются микроконтроллер PIC16F628A и датчик температуры DS18B20. Печатная плата проработана с учетом воздействия возможных помех, размеры платы 70х42. Термометр способен работать от трех батареек типоразмера АА. Средний ток потребления 25мА. Исходный файл прошивки микроконтроллера может пригодится новичкам в программировании.
Посмотрите также:
Термометр на микроконтроллере PIC16F628A и DS18B20(DS18S20)
Файлы к статье:
Архив с платами в формате PDF
Архив с проектом
Внимание! Архив с проектом был перезалит. Устранена одна ошибка неверной записи в энергонезависимую память. Все проверено в железе. Отдельное спасибо Михаилу Маруфенко за выявление ошибки!!!
Удачи всем! И пусть детали будут только исправные!
После экспериментов с PIC16F84 переходим к микроконтроллеру 16F628A, его старшему брату. На этой странице 4-значный термометр выполнен с ПОС, соединенным с датчиком температуры. Датчик от производителя Dallas Semiconductor, это DS1820.
Эксперимент/проект выполняется на экспериментальной базе, где размещены необходимые компоненты. Используя датчик DS1820, можно контролировать температуру от -55 до +125 градусов, для чего нужны 4 7-сегментных дисплея, в нашем случае с обычными катод (отрицательный общий). Микроконтроллер общается с датчиком и получает температуру, которая должна быть показаны на дисплеях. PIC16F628A, в отличие от 16F84A, имеет собственную схему генератора (с возможностью выбора двух скоростей), поэтому он не требует кварц и конденсаторы или внешняя RC-цепочка для его работы. Для системного мультиплексора требуется 4 транзистора в качестве ключа и резисторы относительного смещения. Отдельные сегменты дисплеев подключаются к портам ПОС через ток. ограничительные резисторы. В связи с этим полезно уточнить, что значения вышеупомянутых сопротивлений определяются согласно к имеющимся дисплеям рекомендуется использовать дисплеи с высокой яркостью для получения удовлетворительного результата (лучше, чем тот, который виден на фильм внизу страницы). Для датчика температуры необходим подтягивающий резистор, обозначенный аббревиатурой R 9.в проводке диаграмма. Конденсаторы C 1 и C 2 предназначены для устранения любых помех, присутствующих в источнике питания.
На изображении выше показана схема подключения 7-сегментного цифрового термометра с 4 дисплеями. Дисплеи с общим катодом, с высоким
рекомендуется яркость, 7 сегментов соединены параллельно и соединены с помощью сопротивления, чтобы ограничить их
поглощение на 7 портах RBx PIC, как указано на схеме подключения. Как вы можете видеть, обратившись к техническому описанию PIC,
разрешен максимальный ток 25 мА для каждого отдельного контакта портов ввода-вывода и общий ток не более 200 мА. Десятичная точка (от
второй дисплей), опять же с помощью токоограничивающего резистора, подключается к порту RB0 — контакт 6. Дисплеи включаются по одному
время с системой мультиплексора с помощью 4 транзисторов, действующих как переключатели. 4 транзистора управляются 4 из 8 портов RA.
PIC с помощью резистора, подключенного к его базе. Завершите схему: C 1 и C 2 ), чтобы ограничить
помехи в электросети. Для использования дисплеев с общим анодом необходимо лишь сделать небольшую модификацию, заключающуюся в соединении коллекторов 4-х транзисторов, которые выбирают по очереди 4 дисплея, к положительной линии питания вместо отрицательной и, очевидно, для программирования PIC с относительной программой. Для удобства ниже приведена полная схема с изменениями и рядом ссылка с файлом HEX использовать. Внизу страницы вы можете посмотреть видео с этой конфигурацией. Помните, что необходимо регулировать сопротивления через который подается питание на сегменты дисплеев (в данном втором случае от 330 Ом) для предотвращения их подгорания!
|
1-Wire цифровой термометр и библиотека mikroC OneWire с центральным микропроцессором.
Он также имеет встроенную функцию сигнализации с энергонезависимой программируемой пользователем верхней и нижней точками срабатывания. Диапазон рабочих температур прибора составляет от –55°С до +125°С с точностью ±0,5°С в диапазоне от –10°С до +85°С. Каждый DS18S20 имеет уникальный 64-битный серийный код, который позволяет нескольким DS18S20 работать на одной и той же шине 1-Wire. Таким образом, можно легко использовать один микропроцессор для управления несколькими DS18S20, распределенными по большой площади. Обзор устройства
На рисунке ниже показана блок-схема DS18S20. В 64-битном ПЗУ хранится уникальный серийный код устройства. Блокнотная память содержит 2-байтовый регистр температуры, в котором хранятся цифровые выходные данные датчика температуры. Кроме того, блокнот обеспечивает доступ к 1-байтовым старшим и младшим регистрам триггера тревоги (TH и TL). Регистры TH и TL являются энергонезависимыми (EEPROM), поэтому они будут сохранять данные при выключении устройства.
Эксплуатация
Основной функцией DS18S20 является датчик температуры с прямым преобразованием в цифровой. Выход датчика температуры имеет разрешение 9 бит, что соответствует шагу 0,5°C. Выходные данные калибруются в градусах Цельсия и сохраняются в виде 16-разрядного числа, дополненного двумя знаками, в регистре температуры. Значение регистра температуры при сбросе питания составляет +85°C. Знаковые биты (S) указывают, является ли температура положительной или отрицательной: для положительных чисел S = 0 и для отрицательных чисел S = 1. В таблице ниже приведены некоторые примеры цифровых выходных данных и соответствующие показания температуры.
Пошаговая последовательность операций
Теперь мы обсудим один из самых простых способов доступа к DS18S20. Предположим, что на шине есть только одно такое устройство, и скажем, что шина подключена к выводу RB.0 микросхемы PIC16F628A. Мы также обсудим встроенные функции библиотеки OneWire, доступные в mikroC для PIC 2009.
1) Все транзакции на проводной шине должны начинаться с последовательности инициализации. Мастер шины (микроконтроллер) должен сначала передать импульс сброса, а в ответ DS18S20 отправит импульс присутствия, указывающий, что он находится на шине и готов к работе. Во время последовательности инициализации мастер шины передает (TX) импульс сброса, переводя шину 1-Wire в низкий уровень минимум на 480 мкс. Затем мастер шины освобождает шину и переходит в режим приема (RX). Когда шина освобождается, подтягивающий резистор 4,7 кОм подтягивает шину 1-Wire к высокому уровню. Когда DS18S20 обнаруживает этот нарастающий фронт, он ожидает от 15 мкс до 60 мкс, а затем передает импульс присутствия, переводя шину 1-Wire в низкий уровень на время от 60 мкс до 240 мкс.
Функция mikroC для сброса DS18S20: Ow_Reser(&PORTB, 0) .
2) Поскольку на шине находится только одно устройство, нет необходимости искать, читать и сопоставлять 64-битный адрес ПЗУ. Вместо этого ведущее устройство может пропустить всю последовательность ПЗУ, отправив команду SKIP ROM [CCh]. Если на шине было более одного устройства, мастер может использовать команды SEARCH ROM [F0h], READ ROM [33h] и MATCH ROM [55h] для адресации одного конкретного устройства на той же шине. Функция mikroC для выдачи команды SKIP ROM — Ow_Write(&PORTB, 0, 0xCC) .
3) Затем используйте команду CONVERT T [44h], чтобы инициировать однократное преобразование температуры. После преобразования результирующие тепловые данные сохраняются в 2-байтовом регистре температуры в оперативной памяти. Функция mikroC для выдачи команды CONVERT T: Ow_Write(&PORTB, 0, 0x44) .
4) Используйте команду READ SCRATCHPAD [BEh] для чтения содержимого блокнота. Передача данных начинается с младшего значащего бита байта 0 и продолжается через блокнотную память до тех пор, пока не будет получен 9-й бит.байт (байт 8 – CRC) считывается. Мастер может выполнить сброс для прекращения чтения в любое время, если требуется только часть данных блокнота.