Разработка программы измерения температуры на pic 18. Электронный термометр с выносным датчиком DS18B20 на микроконтроллере Attiny2313

Доброго времени суток уважаемые читатели. Как видно из названия статьи, речь в ней пойдет о термометре собранном на PIC. Итак. Почему и как всё начиналось?!
Понадобилась мне схема простейшего термометра для подвала гаража. Начал искать подходящую схему в Интернете. Важным критерием было применение минимального количества элементов в схеме. Сразу скажу, что таких схем термометров в сети навалом. Но! Чаще всего они выполнены на AVR с которыми я к глубокому своему сожалению не дружу. Поэтому стал искать схему на PIC. Но и тут меня ожидало разочарование. Схемы термометров на PIC есть. Но там применяют, то транзисторы для индикаторов, то внешний кварц, либо еще что то, что усложняло схему и было неприемлемо в моем случае. Наконец, после долгих поисков, подходящая мне схема была найдена тут:

http://www.labkit.ru/html/show_meter?id=38
И была успешно повторена неоднократно. Всё прекрасно работает. (на сайте автора этой схемы есть и прошивка и печатная плата для повторения данного термометра). Время шло. И в одно прекрасное время во первых выяснились недочеты данной схемы и еще мне понадобилось применить индикатор с Общим Катодом (на сайте автора прошивка была только под Общий Анод). Теперь о недочете схемы в первоисточнике. Изначально в схеме автора нет резистора подтяжки у датчика температуры. Тоесть резистор на 4,7К в схеме отсутствует. Да действительно при таком исполнении схемы термометр может работать, но только при условии, если датчик температуры впаян сразу в плату, либо длина провода на котором находится датчик не должен превышать длины провода метр, полтора метра. Не более. В противном случае индикатор начинает показывать какую- то ерунду, а не температуру.
Такой поворот событий меня совсем не обрадовал. Потому как длинна провода с датчиком мне была нудна не менее 10 метров.
Эта проблема решилась очень просто и быстро, именно установкой подтягивающего резистора 4,7К на датчике. После чего датчик стал работать стабильно при любой длине провода. Но как быть, если у меня есть индикаторы только с общим катодом! А прошивка сделана под анод… Вот тут мне и помог Станислав Дмитриев. За что ему огромнейшее спасибо. Он не только написал прошивку под общий анод. Но так же и под общий катод и под разные типы датчиков температуры (DS18S20 или DS18B20). Что позволило еще более унифицировать данную схему. И рекомендовать её к повторению. Также можно применить в схеме как четырех разрядные семисегментники так и трех разрядные семисегментники. Что является не большим, но все, же плюсом.
Теперь сама схема

Как вы видите, схема не отличается от той, что представлена, была на сайте http://www.labkit.ru
Так и было задумано изначально. Единственное изменение в схеме это установка дополнительного резистора. Схему я не стал перерисовывать с нуля. Просто добавил недостающий элемент схемы. По сути если Вы хотите еще более упростить схему и у вас есть стабильный источник питания 5В, то Вы можете исключить из схемы и линейный стабилизатор. И запитать МК сразу от 5В.
Теперь поговорим немного о том, как самому настроить прошивку под нужный вам индикатор или датчик. Тут всё просто.

Загрузив файл прошивки в программатор, Вы сами: исходя из того, что вам нужно и смотря на данный скриншот, прописываете нужные вам параметры в файл прошивки в разделе EPROM. После чего можете прошивать контролер.

В моём варианте печатной платы в плате предусмотрено место не только для линейного стабилизатора, но и для диодного моста (что позволит запитывать схему напряжением от 7,5В до 12В. А так же на плате предусмотрено место для установки клемника, который позволяет не впаивать датчик температуры в плату, а зажать его зажимами. Это удобно при смене датчика, либо при установке датчика на длинный провод. Позволяет быстро сменить провод.

Рисунок платы

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

На МК. Сердцем его является микроконтроллер PIC16F628A. В схеме термометра используется 4-х значный или 2+2 светодиодный индикатор с общим анодом. Датчик температуры используется типа DS18B20, и в моем случае показания датчика отображаются с точностью 0,5*С. Термометр имеет пределы измерения теемпературы от -55 до +125*С, что достаточно на все случаи жизни. Для питания термометра была использована обычная зарядка от мобилы на ИП с транзистором 13001.

Принципиальная схема термометра на микроконтроллере PIC16F628A:

Для прошивки PIC16F628A я использовал программу ProgCode, установив её на компьютер и собрав программатор ProgCode по известной схеме:

Обозначение выводов используемого микроконтроллера и цоколёвка некоторых других аналогичных МК:

Программа ProgCode и инструкции с фотографиями пошаговой прошивки находятся в архиве на форуме. Там же и все необходимые для этой схемы файлы. В программе открываем и нажимаем на кнопку "записать всё”. В моем изготовленном устройстве, как видно из фотографий, собрано 2 термометра сразу в одном корпусе, верхний индикатор показывает температуру дома, нижний - на улице. Размещается он в любом месте помещения и соединяется с датчиком гибким проводом в экране. Материал предоставил ansel73. Прошивку редактировал: [)еНиС

Часы на PIC16F628A и датчике температуры DS18B20.

4-х сегментный светодиодный индикатор.

Анимированная смена индикации.

Вариант простых часов на популярном и доступном микроконтроллере 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 и описание.

Вопросы, пожелания в форум .

11.03.2015

Добавлена обновленная прошивка для индикатора с общим катодом. В новой прошивке больше эффектов анимации и небольшие изменения в алгоритме. Подробное описание в архиве.

Здравствуйте уважаемые посетители. Приходят пожелания от вас об увеличении диапазона регулировки температуры и ее индикации, представленных на сайте термометров-термостатов.

Схема нового термостата представлена на рисунке 1.

В принципе она почти ничем не отличается от своих . Вообще это огромный плюс схем с применением микроконтроллеров.
Основа схемы — микроконтроллер PIC16F628A. В качестве датчика применен один из известных и популярных цифровых датчиков температуры DS18B20. Показания реальной температуры, величина устанавливаемой температуры стабилизации и необходимого гистерезиса выводится на семисегментный светодиодный трехразрядный индикатор с общим анодом. Резисторы R1…R4, это подтягивающие резисторы. R1 подтягивает шину передачи данных с датчика температуры DS18B20 к шине питания схемы плюс пять вольт. R2…R4 подтягивают соответствующие выводы микроконтроллера к шине плюс пять вольт.

Резисторы с пятого по двенадцатый, являются гасящими резисторами, или ограничивающими применительно к току, протекающему через светодиоды. Изменяя номинал этих резисторов, можно регулировать яркость свечения сегментов индикатора. Иногда встречаются индикаторы с разной яркость свечения отдельных сегментов, этот дефект так же можно устранить при помощи этих резисторов. Для установки температуры термостатирования применены две кнопки с соответствующими знаками «+» и «-», это кнопки SB2 и SB3. Этими же кнопками устанавливается необходимый вам гистерезис, от 0,1 ˚С до 0,9˚С при нажатой кнопке SB1 — «Гистерезис». Сигнал управления коммутирующим ключом снимается с вывода 17 микросхемы DD1. Схему ключа я не стал рисовать, выберите сами, например, из статьи « »

Обращаю ваше внимание, что в железе я устройство не проверял, все было промоделировано в Протеусе.

Соответственно печатную плату не рисовал, но если у вас появится желание повторить данный термостат, рисунок можете выслать мне на адрес — [email protected] Начинающим «радиогубителям» (шутка), это очень пригодится. Я не в курсе затей тех посетителей, которые просили об усовершенствовании термостата, но возможно это были химики, для которых важна точность температуры растворов. Я, думаю, и вы найдете применение этому устройству. Не плохо бы было, если бы и вы прокомментировали, где можно применить его. Успехов. К.В.Ю.

По просьбам тех, кто собрал предыдущую конструкцию барометра на PIC 16F684 и датчике давления BMP180, публикуем статью (продолжение). Данное устройство позволяет отображать одновременно и температуру и давление. Для этого в конструкции был применен индикатор на базе микросхемы MAX7219 которая позволяет работать с матрицей 8Х7, применение данного индикатора позволило сократить число задействованных портов микропроцессора.

Датчик температуры применен самый распространенный — 18b20, который имеет трехвыводную конструкцию. DS18B20 (Programmable Resolution 1-Wire® Digital Thermometer). Диапазон измерения температуры составляет от -55 до +125 °C. Для диапазона от -10 до +85 °C погрешность не превышает 0,5 °C.

Схема устройства показана на рисунке 1.

Индикатор MAX7219 приобретался на Aliexpress. Но данный индикатор продается уже в готовом виде и вам остается только 5ю проводниками его подключить к запрограммированной плате.

Принципиальная схема индикатора показана на рисунке 2, внизу показано фото такого индикатора.

Внешний вид собранного устройства показан на фото ниже.

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

Скачать рисунок печатной платы, схему и прошивку.

mob_info