Термометр на pic16f628a своими руками
Бытовой таймер и термометр на микроконтроллере PIC16F628A, датчике температуры DS18B20 и ЖК индикаторе HT1613.
Этот небольшой таймер собран на основе дешевого восьмиразрядного микроконтроллера Mucrochip PIC16F628A. Питание устройства от четырех элементов типа AA или AAA. таймер потребляет совсем небольшой ток и поэтому комплект их четырех элементов AA можно использовать в течение нескольких лет. Экономичность таймера обусловлена еще и тем, что он отображает информацию на экономичном ЖК дисплее типа HT1613 (HT1611 он же КО-4В).
HT1613 — это очень простой дисплей, который управляется от микроконтроллера через простейший последовательный интерфейс. Описание дисплея и его работы вы можете почитать в этой статье. Такие дисплеи часто используются в стационарных телефонных аппаратах для индикации набираемого номера. Такой дисплей дешев и потребляет очень мало электроэнергии, поэтому его можно с успехом использовать в самодельных цифровых устройствах. Кроме того, для подключения к микроконтроллеру требуется всего 2 порта, поэтому дисплей удобно использовать с контроллерами, у которых небольшое число выводов.
Основа таймера — микроконтроллер PIC16F628A. Это популярный восьмиразрядный микроконтроллер производства компании MICROCHIP. Для написания прошивки я использовал компилятор MikroC Pro for PIC сербской компании MiKroeleKtroniKa.
Микросхема имеет 2048 12-битных слов flash памяти программ, 224 байта оперативной памяти для и 128 байт энергонезависимой памяти пользователя (EEPROM) . Программа написана на С и занимает около 75 процентов памяти контроллера.
Я собрал таймер на макетной плате, но специально для этой статьи развел для него печатную плату в программе DipTrace. Если вы захотите повторить таймер, можете использовать печатную плату или собрать устройство навесным монтажом как это сделал я. Архив с прошивкой и проект для DipTrace вы можете скачать с моего GitHub.
Принципиальная схема печатной платы таймера
Видео: Схема соединения печатной платы и внешних элементов. Если ролик не начал проигрываться автоматически, то нажмите кнопку воспроизведения)
ISCP port — это контакты на плате, предназначенные для внутрисхемного программирования микроконтроллера. Можно прошить микроконтроллер в программаторе отдельно от печатной платы и потом установить его на печатную плату. Тогда можно не устанавливать ISCP port. Микроконтроллер желательно устанавливать на печатную плату на панельку.
Также соединяем выводы ЖК дисплея, кнопок, динамика — зуммера (пищалки) и термодатчика с соответствующими контактами на печатной плате так, как это показано в ролике выше.
Температурный датчик 18B20 можно установить внутри корпуса, но тогда термометр сможет измерять только температуру в вашей комнате. Можно соединить датчик кабелем из 3 проводов длиной до нескольких метров. Нужно припаять провода кабеля к выводам датчика и изолировать каждый вывод датчика отрезками тонкой термоусадочной трубки. затем на всю эту конструкцию одеваем отрезок термоусадки большего диаметра. Такой датчик несколько лет измеряет температуру воздуха на улице за окном. На корпусе таймера я установил стандартное 3.5 мм аудио гнездо а на кабель датчика припаял миниджек 3.5 мм (как на наушниках для мобильного телефона).
Если вам не нужно измерение температуры, то термодатчик можно не использовать. Функционирование в режиме таймера от этого не изменится.
Таймер умеет управлять каким либо внешним устройством. Это может быть электромотор, лампа для засветки фоторезиста или какое-то другое устройство, которое необходимо включить на заданное время. Для этого предусмотрен контакт CONTROL на печатной плате. При старте отсчета времени на контакте CONTROL появляется высокий уровень напряжения, а по завершении выдержки времени — низкий уровень.
Для подключения внешнего устройства необходимо использовать ключ на транзисторе и электромагнитное реле. Схема подключения изображена на рисунке ниже:
Каскад реле необходимо питать от внешнего источника питания. Напряжение источника должно соответствовать номинальному рабочему напряжению используемого реле.
Работа устройства
В момент включения устройство находится в режиме таймера. После первого включения питания (после прошивки контроллера) на экране мы увидим следующее:
мы видим три двузначных числа, разделенных символом —.
Первое число — это часы, второе — минуты и третье — секунды, то есть можно записать так: ЧЧ-ММ-СС. В последствии после включения питания на экране будет восстановлена выдержка времени, которая была использована последний раз.
Установленная выдержка времени сохраняется в EEPROM памяти микроконтроллера. Это происходит при запуске таймера на отсчет времени. Иными словами, для того чтобы таймер запомнил установленную выдержку времени, нужно хотя бы один раз нажать кнопку S.
Таймер управляется четырьмя кнопками. Кнопки помечены буквами S, M, U, D
Для перехода в режим термометра нажимаем кнопку M.
Для перехода обратно в режим таймера нужно нажать кнопку M, удержать ее нажатой около секунды и отпустить. Устройство вернется в режим таймера.
Установка времени выдержки
Для увеличения выдержки времени на одну минуту нажимаем кнопку U.
Для уменьшения выдержки времени на одну минуту нажимаем кнопку D.
Для увеличения выдержки времени на одну секунду удерживаем нажатой кнопку S и нажимаем кнопку U.
Для уменьшения выдержки времени на одну секунду удерживаем нажатой кнопку S и нажимаем кнопку D.
Для быстрой установки удерживаем в нажатом состоянии кнопку U или D.
Для сброса времени (обнуления) нажимаем кнопку S и удерживая ее в нажатом состоянии нажимает кнопку M. Дисплей вернется в состояние 00-00-00.
Для старта выдержки времени нажимаем кнопку S. Нужно иметь в виду что старт отсчета времени произойдет в момент отпускания кнопки. Начнется обратный отсчет времени и включится высокий уровень на контакте платы CONTROL, который вы можете использовать для управления каким либо внешним устройством.
Для досрочной остановки таймера нужно еще раз нажать кнопку S. При этом отсечёт времени остановится и дисплей вернется к исходному состоянию (установленное время)
Для временного прерывания таймера в процессе отсчета нажмите кнопку M. Это — режим «Пауза«. Отсчет времени прекратится а на дисплее останется момент нажатия на кнопку M. Для продолжения отсчета еще раз нажмите кнопку M.
После окончания отсчета времени таймер подаст звуковой сигнал. Звуковой сигнал можно выключить, нажав кнопку S, иначе он будет продолжаться примерно 25 секунд.
Автор: Еремин Антон
В данной статье будет описан цифровой термометр на микроконтроллере 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 минут. Это специальный прием, который задает щадящий режим работы энергонезависимой памяти. За первые пять минут температура может измениться несколько раз, а запишется все равно самая максимальная/минимальная.О том, что происходит запись в энергонезависимую память, свидетельствуют три нижних квадрата, которые высвечиваются на некоторое время. Замечу, что в диапазоне температур, когда точность отображения 0,1°С сравнение порогов происходит с учетом десятых, в другом диапазоне десятые не учитываются. Температура измеряется где-то раз в 780 мс.
Если кратковременно нажать на кнопку SB1, то на индикатор будут поочередно выведены максимальная и минимальная измеренные температуры(и две заставки одна для максимальной -П- и одна для минимальной -U-), если кнопку нажать и удерживать до появлений трех прочерков, то произойдет сброс пороговых температур.
Готовую плату термометра разместил в китайском будильнике, предварительно выкинув от туда все не нужное. Вот что из этого получилось(рисунки 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мА. Исходный файл прошивки микроконтроллера может пригодится новичкам в программировании.
Посмотрите также:
Файлы к статье:
Внимание! Архив с проектом был перезалит. Устранена одна ошибка неверной записи в энергонезависимую память. Все проверено в железе. Отдельное спасибо Михаилу Маруфенко за выявление ошибки.
Удачи всем! И пусть детали будут только исправные!
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Quisque sed felis. Aliquam sit amet felis. Mauris semper, velit semper laoreet dictum, quam diam dictum urna.
Вариант простых часов на популярном и доступном микроконтроллере PIC16F628A. Фактически c них начинался проект на AVR.
Описание часов.
1. Функции.
– часы, формат отображения времени 24-х часовый, часы:минуты.
– цифровая коррекция точности. Возможна ежесуточная коррекция ±25 сек. Установленное значение в 1 час 0 минут 30 сек будет прибавлено/вычтено из текущего времени.
– настраиваемая анимация смены показаний.
– использование энергонезависимой памяти микроконтроллера для сохранения настроек при отключении питания.
– если в основном режиме нажать на кнопку PLUS , то на индикаторы выводится время, если нажать на MINUS – температура. При отпускании кнопок возобновляется автоматическая смена показаний.
2. Настройка.
2.1. При включении питания часы в основном режиме.
2.2. Нажатием на кнопку SET производится вход в режим настроек и выбора параметра для установки. По-очереди доступны для установки:
– секунды (обнуляются при нажатии на кнопки PLUS или MINUS );
– величина коррекции. В старшем разряде символ " с ";
– время индикации текущего времени. В старших разрядах символы " tc ". Диапазон установки 0?99 сек. Если установлен 0, то время отображаться не будет;
– время индикации температуры. В старших разрядах символы " tt ". Диапазон установки 0?99 сек. Если установлен 0, то температура отображаться не будет;
– выбор эффекта анимации. В старших разрядах символы " EF ". Если установлен 0, смена информации будет проводиться без эффектов , если выбран автоматический режим (символ А ), то будет производиться поочередная смена эффектов. Если выбран режим r , то смена эффектов будет производиться случайным образом.
– выбор скорости анимации. В старшем разряде символ " P ". Диапазон установки 0?99. Одна единица соответствует примерно 2 мсек, чем выше величина, тем медленнее идет анимация.
2.3. Устанавливаемый параметр мигает.
2.4. Удержанием кнопок PLUS / MINUS производится ускоренная установка параметра.
3. Примечания.
Необходимо соизмерять скорость анимации и время отображения информации. Если выбрана медленная анимация и малое время отображения, то может оказаться, что информация не успевает полностью обновиться до очередной смены.
При отключении основного питания (+12 V ) индикация отключается, часы продолжают идти. Питание МК осуществляется от резервного источника.
В архиве прошивки для индикаторов с общим катодом и анодом, проект в Proteus и описание.
Вопросы, пожелания в форум.
Добавлена обновленная прошивка для индикатора с общим катодом. В новой прошивке больше эффектов анимации и небольшие изменения в алгоритме. Подробное описание в архиве.
Это электронный термометр с выводом температуры на ЖК-дисплей.
Температура окружающей среды измеряется каждые 840 мс при помощи цифрового датчика DS1620, фирмы Dallas Semiconductor.
Одна из кнопок позволяет переключить экран, на котором отображается максимальная и минимальная температура:
Вторая кнопка сбрасывает значения температуры мин./макс.Как вариант, можно подключить устройство к компьютеру (через RS232). Температура передается на компьютер с устройства, управляемого микроконтроллером 16F628A. Приложение, установленное на компьютере, показывает температуру в реальном времени и выводит её на график. С другой стороны, приложение позволяет запрограммировать два предельных значения температуры термостата DS1620.
2. Принципиальная схема:
Версия № 1: без интерфейса RS232;
Версия № 2: с помощью RS232
ПРИМЕЧАНИЕ: Прошивка для микроконтроллера одна и таже для обоих вариантов.
3. Обзор датчика температуры DS1620
4. Принцип работы ЖК-дисплея (параллельный интерфейс)
5. Принцип работы устройства
5-1. Без интерфейса RS232;
После подачи напряжения, микроконтроллер 16F628A опрашивает датчик температуры DS1620 (команда Write Config с CPU = 1 и 1SHOT = 0, затем команда Start Convert T) и настраивает ЖК-дисплей (команда Set Function для использования в режиме интерфейса 4 бита). Модуль Timer1 (16 бит) микроконтроллера 16F628A активируется, что приводит к прерыванию приблизительно каждые 105 мс. При каждом прерывании модуля Timer1, опрашивается состояние кнопки SELECTION ECRAN и кнопки RESET MIN/MAX. Каждые 8 прерываний (около 840 мс) происходит чтение температуры и информация на ЖК-дисплее обновляется:
5-2. Через порт RS232
Относительно работы без интерфейса RS232, добавляются два прерывания:
- Прерывание приема UART (сообщает микроконтроллеру, что он получил данные от компьютера через RS232)
- Прерывание передачи UART (сообщает микроконтроллеру, что UART собирается передать данные на компьютер)
5-2-1. Кабель связи между компьютером и устройством.
5-2-2. Протокол связи между компьютером и устройством.
Компьютер посылает команду. Микроконтроллер отвечает.
Компьютер посылает 3 байта (через RS232):
Команда DS1620 | 1-ый байт (код команды) | 2-ой байт (данные) | 3-ий байт (данные) |
Read Temperature (каждые 1000 мс) | 0хАА | 0х00 (не используется) | 0х00 (не используется) |
Read TH (чтение высокой температуры термостата) | 0хА1 | 0х00 (не используется) | 0х00 (не используется) |
Read TL (чтение низкой температуры термостата) | 0хА2 | 0х00 (не используется) | 0х00 (не используется) |
Write TH (запись высокой температуры термостата) | 0х01 | (0000000 D8) | (D7 … D0) |
Write TL (запись низкой температуры термостата) | 0х02 | (0000000 D8) | (D7 … D0) |
Получив же их, микроконтроллер передает команду датчику DS1620 (через 3-проводной последовательный порт, синхронный). В случае команды чтения (Read Temperature, TH Read, Read TL), термометр DS1620 отправляет данные в микроконтроллер (температура в виде двоичного числа 9 бит, закодированных в дополнение в 2). Это число передается без изменений на компьютер в виде 2-х байт:
1-й байт: (0000000 D8)
2-й байт: (D7 … D0)
D0 = бит
Для других команд, микроконтроллер посылает компьютеру два байта 0x00 (через RS232).
Читайте также: