термометр-термостат на микроконтроллере
Опубликованное в описание термометра на интегральном датчике температуры DS18B20 и микроконтроллере PIC16F84 заинтересовало, судя по откликам на радиолюбительских интернет-форумах, многих радиолюбителей. Простота конструкции позволила повторить ее даже начинающим. Однако уже при первом включении многие столкнулись с проблемой "трех тире", постоянно выведенных на экран вместо значения температуры.

Дело оказалось в том, что в ассемблерном исходном тексте программы, по которой работает микроконтроллер, отсутствует директива
__COnfig _XT_OSC & _WDT_OFF & _PWRTE_ON,
означающая, что используется кварцевый резонатор среза XT, сторожевой таймер микроконтроллера WDT выключен и действует таймер PWRT, задерживающий начало работы микроконтроллера после включения питания на время, необходимое для "раскачки" кварцевого резонатора. Именно невыключенный сторожевой таймер, периодически возвращая микроконтроллер в исходное состояние, не дает термометру возможности нормально работать.

Устранить дефект можно несколькими способами. Первый из них — вписать в исходный текст программы приведенную выше строку с директивой конфигурации (в любое удобное место между директивой «include и завершающей программу директивой end), повторить трансляцию и получить новый НЕХ-файл. Второй способ — дополнить строкой: 02400EOOF13F80 уже имеющийся НЕХ-файл. Ее можно ввести в любое место этого файла до завершающей его строки: 00000001FF. Естественно, придется повторить загрузку в микроконтроллер кодов из полученного в результате повторной трансляции или исправленного НЕХ-файла.

Многие программы—оболочки программирования позволяют задать нужную конфигурацию микроконтроллера, не внося в НЕХ-файл информацию о ней. Видимо, именно так поступил автор исходной программы, забыв рассказать об этом в статье. Например, работая с оболочкой IC-Prog, можно выключить сторожевой таймер, сняв "галочку" в окошке WDT на панели конфигурации. Это нужно сделать после загрузки в буфер программных кодов, но до выполнения операции программирования микроконтроллера. Панель должна иметь показанный на рис. 1 вид независимо от способа, которым установлена конфигурация.
 
При повторении термометра возникла необходимость установить в него четырехразрядный светодиодный индикатор BQ-M51DRD с общими анодами разрядов взамен использованных в исходной конструкции индикаторов с общими катодами. Схема термометра после такой замены показана на рис. 2. Он дополнен также узлом управления исполнительным устройством термостата на более мощном, чем в первоначальном варианте, транзисторе VT1 и реле К1.
 
Транзистор открыт, и к обмотке реле приложено напряжение, когда измеренное значение температуры меньше заданного. Если термостат управляет электронагревателем, в цепь питания последнего следует включить нормально разомкнутые контакты реле. А при необходимости поддерживать отрицательную температуру в морозильной камере в цепь питания компрессора холодильного агрегата включают нормально замкнутые контакты реле.
Чертеж односторонней печатной платы предлагаемого варианта термометра изображен на рис. 3 Конденсаторы С1 и С2 — керамические, СЗ — оксидный (К50-35). Все резисторы — МЛТ, некоторые из них расположены под индикатором HG1, где имеется свободное место. Диод VD1 установлен со стороны печатных проводников, его выводы припаяны непосредственно к выводам обмотки реле.
 
Интегральный стабилизатор КР142ЕН5А можно заменить КР142ЕН5В или импортным 7805. У примененного автором реле SYS1-S-105L есть полный аналог HJR-4102-L-05V. Если имеется реле с большим напряжением срабатывания, верхний вывод его обмотки вместе с подключенным к нему катодом диода VD1 нужно соединить с плюсом источника соответствующего напряжения в обход стабилизатора DA1. Светодиод КИП-М01 Б-1К можно заменить любым другим подходящих размеров и цвета свечения, а индикатор BQ-M51DRD -CA56-21SRWA. Изготовленный термометр с выносным датчиком изображен на фотоснимке рис. 4 Потребляемый ток, если реле не сработало, не превышает 29, а при сработавшем реле — 80 мА.
Чтобы заставить микроконтроллер обслуживать новый индикатор, пришлось переработать программу, прежде всего, ее участок, отвечающий за установку на соответствующих выводах портов RA и RB высоких и низких уровней напряжения. Новая программа устанавливает их инверсными относительно прототипа, что и требуется при изменившейся полярности подключения светодиодов индикатора. В связи с этим претерпел изменения и алгоритм определения состояния кнопок SB1 и SB2, причем логика установки заданного значения температуры этими кнопками осталась прежней.

Следует иметь в виду, что при первом включении термометра в энергонезависимой памяти микроконтроллера находятся случайные данные, не соответствующие, как правило, никаким разумным значениям температуры По этой причине светодиод HL1 может беспорядочно мигать, а реле К1 —срабатывать. Все приходит в норму после первой же установки температуры кнопками SB1 и SB2.
 
В процессе налаживания термометра обнаружено, что он не всегда правильно работает при отрицательной температуре датчика и при заданном отрицательном значении температуры стабилизации. Некоторые радиолюбители, с которыми пришлось обсуждать эту проблему, считали ее несущественной, утверждая, что "мороз стабилизировать не нужно" Тем не менее недостаток есть недостаток. Чтобы устранить его, пришлось довольно существенно переделать программу в части правильного считывания с датчика и обработки отрицательных значений температуры.
 
Принцип действия датчика DS18B20 достаточно подробно описан в [1], поэтому повторяться не буду. Приведу лишь взятую из [2] табл. 1 где указаны коды, передаваемые датчиком при различной температуре. Их двоичные значения при положительной темпера туре имеют в старших разрядах нули, а при отрицательной — единицы. На этом и основан анализ значений температуры в переработанной программе. Он ведется с использованием флага переноса С в регистре STATUS. После добавления в программу блоков, начинающихся в ее ассемблерном тексте метками L2A, L2B, L2C, L2D и L2E правильно обрабатываются все возможные ситуации:
- заданная температура положительна и выше измеренной положительной;
- заданная температура положительна и ниже измеренной положительной;
- заданная температура положительна, а измеренная отрицательна;
- заданная температура отрицательна, а измеренная положительна;
- заданная температура отрицательна и выше измеренной отрицательной;
- заданная температура отрицательна и ниже измеренной отрицательной.

Теперь при заданной температуре +10 "С высокий уровень на линии RA3 (выводе 2) микроконтроллера будет установлен при измеренном значении ниже +10°С и вновь станет низким при температуре + 12 °С — на 2 "С выше заданной Эта логика сохранится и при заданной температуре -10 °С. Высокий уровень будет установлен при температуре ниже -10 °С, а низкий — как только температура возрастет до -8 "С.

Ширину зоны гистерезиса (в рассмотренном случае 2 °С) можно изменить, откорректировав следующий фрагмент программы:
MOVLW 0x02; гистерезис в градусах
MOVWF DT_ALARM

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

Скачать исходник и прошивку

Обновление от RGB :

Схема:

 

Скачать печатку и прошивку измененную

Скачать [75,59 Kb] (cкачиваний: 1504) прошивки,исходники, схемы для PIC16F628 / 84 от agette 

Скачать [84,86 Kb] (cкачиваний: 1374) прошивку, доработанную, схемы для  PIC16F628 / 84   от agette 

Скачать [82,08 Kb] (cкачиваний: 1420) прошивку, доработанную, схемы для  PIC16F628 / 84 для ОК индикатора   от agette

Скачать [161,32 Kb] (cкачиваний: 1731)  прошивки для общего анода и катода обновленные на 01.02.2012 от agette
 

"Радио" №1 2006г.

Обсуждение на ФОРУМЕ



   
Zozulataras # 61
 
 
To 16f628
Может, при прошивке пика биты конфигурпции не так выставлены? Тут уже нужно описание - чем шил, какие установки в программе, какая программа, какой программатор и т.д. Ну и монтаж, соответственно проверять… У меня на 84 все отлично работает....


   
16f628 # 62
 
 
Zozulataras,
ты имеешь ввиду галочку WDT? Или Еще биты какие-то переключить надо?
Например, работая с оболочкой IC-Prog, можно выключить сторожевой таймер, сняв "галочку" в окошке WDT на панели конфигурации. Это нужно сделать после загрузки в буфер программных кодов, но до выполнения операции программирования микроконтроллера. Панель должна иметь показанный на рис. 1
Я не увидел этого рисунка.
Шил я программатором ЭкстраПик, купленный. Оболочка WinPic800 3.64
Макетку пересобирал 3 раза, пока не понял, что это проблема программная :)


   
16f628 # 63
 
 
Перепрошил программой IcProg, проблема осталась. Галочка WDT снята.


   
Zozulataras # 64
 
 
To 16f628
Я шил проц IC-Prog-ом, выставлял тип процессора 16F84A, открывал файл прошивки therm18B20.hex и ничего не трогая в битах конфигурации прошивал.Программатор самый простой на 1 транзисторе от СОЛО, тоже сам собирал когда-то… Все работает как надо… Питание не проседает от сработавшей релюшки? И кондеры по питанию после кренки есть? А если гистерезис больше выставить, то на всем диапазоне так же моргает? Странно что-то… Может PIC полуубитый или какой-то не такой…


   
Nikolai4 # 65
 
 
Внимание обсуждение и решение проблем переносится на ФОРУМ , за нарушение правил бан.


   
Zozulataras # 66
 
 
To Agette
ссылка на обсуждение проблем и их решение: https://bezkz.su/forum/topic/474-termometr-termostat/page__view__findpost__p__824
6


   
Слесарь КИПиА # 67
 
 
Что показывает индикатор без датчика? И можно ли применить 18S20?


   
ASUS # 68
 
 
Слесарь КИПиА, прочитай пост №65
--------------------
против лома нет приема, разве что законы ома, лом ужасен и велик, он хороший проводник)))


   
Слесарь КИПиА # 69
 
 
ASUS,
А для чего здесь функция "коментарии"?
Зделал печать под "схемы для PIC16F628 для ОК индикатора от agette". Мож кому пригодится, как выложить?


   
ASUS # 70
 
 
Слесарь КИПиА, админу отправь под ником Nikolai4 , без датчика показывает пробелы, 18S20 поставить его нельзя, в него другая цифровая кодировка та и в него шаг измерения 0.5, а у 18B20 0.1
--------------------
против лома нет приема, разве что законы ома, лом ужасен и велик, он хороший проводник)))


   
viktor28 # 71
 
 
доброго дня всем
Прошу прояснить ситуацию ,
собрал схему на 628 пике . заработала сразу , с выставлением температур ,
но через день настройки сбились , температура мерялась правильно , Но выставить температуру срабатывания могу только до 12.4 градуса , дальше переходит в отриц температуру , гистерезис регулируется до 24 градусов
Может ли быть вина пика самого ?


   
Nikolai4 # 72
 
 
viktor28, косzки в схеме, возможно кратковременное к.з. или pic такой попался…

Все обсуждения на форуме!

За последующие комментарии БАН!


   
viktor28 # 73
 
 
Вот поменял ещё один пик с заведомо рабочей схемы , перепрошил обновленой програмой , и снова история повторилась , температуру показывает но выставить температуру включения релле не удаётся выше 12 градусов .
Косяка в схеме нет , проверял , да и схема себя велабы по другому , температура то начинает выставлятся , но почему доходит только до 12 градусов ?


   
Fox8320 # 74
 
 
Тема еще жива? Хотелось бы индикации знака ( - ) при переходе термометра в отрицательные температуры. Хотя бы отдельным светодиодом.


   
ASUS # 75
 
 
Дак в нем есть знак минус, при минусе просто десятые доли градуса убераются.До сих пор в холодильнике работает он с момента добавлениястатьи. Оригинал в меня не работал, ну благодаряхорошему человеку под ником rgb которыйподправил прошивку и убрал со схемы кварц -заработало! соберай ,все рабочее с обновлением от rgb. и к встатте если внимательно читал коментарии то выше админ писал чтоб на форуме писали вопросы и там все это уже рание обсуждали! Т
--------------------
против лома нет приема, разве что законы ома, лом ужасен и велик, он хороший проводник)))


Обновления

Сообщения ФорумаОтветов
3D Модели для Авто0
Бакометр 2335
Touch Start-Stop Engine.587
Кодграберр17
Исправляем AVR фьюзы при помощ …109
Бакометр - измеритель остатка…4
IR конструктор на PIC12F62977
Универсальное зарядное устройство103
бaкoмeтр1974
Двунаправленный автомобильный…2
Программатор GENIUS G8401
Светодиодный тахометр34
Индикаторы ГРИ ИН1 - ИН141
Multiprog1
Управляющая программа LED CUB959
Универсальное зарядное устройство9
Изготовлю печатные платы29
Простой автоматический выключа…25