Заказать прошивку

 





 

термометр-термостат на микроконтроллере
Опубликованное в описание термометра на интегральном датчике температуры 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 :

Схема:

 

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

Вы не можете скачивать файлы с нашего сервера прошивки,исходники, схемы для PIC16F628 / 84 от agette 

Вы не можете скачивать файлы с нашего сервера прошивку, доработанную, схемы для  PIC16F628 / 84   от agette 

Вы не можете скачивать файлы с нашего сервера прошивку, доработанную, схемы для  PIC16F628 / 84 для ОК индикатора   от agette

Вы не можете скачивать файлы с нашего сервера  прошивки для общего анода и катода обновленные на 01.02.2012 от agette
 

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

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


 
Дата: 25-02-2011, 20:57, Просмотров: 42507, Автор: ASUS
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти под своим именем.

   
ASUS # 1
25 февраля 2011 20:59  
 
bash собрал я его а он не хочет работать. схема вся правильно, прошивал как бы правильно. а индикаторы с общим анодом даже не светят :'
--------------------
против лома нет приема, разве что законы ома, лом ужасен и велик, он хороший проводник)))
  •    •     


   
rgb # 2
27 февраля 2011 09:52  
 
Скинул сюда для 84А и 16F628A - ему кварц не нужен, пробуйте. http://aes.at.ua/forum/26-195-3
  •    •     


   
ASUS # 3
27 февраля 2011 17:38  
 
rgb,ОГРОМНОЕ СПАСИБА, ТЫ ОЧЕНЬ ПОМОГ

все работает отлично.

--------------------
против лома нет приема, разве что законы ома, лом ужасен и велик, он хороший проводник)))
  •    •     


   
Fermer12 # 4
7 марта 2011 09:00  
 
гдето я такой уже видел wacko
  •    •     


   
Drayv # 5
24 марта 2011 11:05  
 
А зачем 4-х розрядный индикатор? если подключено по схеме (рис2) 3 анода
  •    •     


   
ASUS # 6
24 марта 2011 11:15  
 
просто не было 3х розрядного. Я и делал на 4х разрядном, тоже не было такого.
--------------------
против лома нет приема, разве что законы ома, лом ужасен и велик, он хороший проводник)))
  •    •     


   
Drayv # 7
24 марта 2011 13:55  
 
Кто паял этот девайсик может выложить нормальную робочую схему на 16F628А, так как я немного запутался в индикаторах, кварцах, итд, или монтажную схему? я нарисую в Slayer5 плату и принципиальную схему и выложу на сайте. Cкиньте пожалуйста кто паял девайс!!!! плиззз
Drayvik@gmail.com
  •    •     


   
5139821 # 8
24 марта 2011 19:32  
 
добрый день. после сборки термостата, обнаружился следующий глюк -при нагреве датчика свыше 43 град. просходит зависание термостата, на дисплее отображается какаято чуш, нагрев отключается (предпологалось его использовать в бане) датчик проверил- нормальный, схема вроде тож собрана правильно. С чем это может быть связано?
  •    •     


   
Nikolai4 # 9
24 марта 2011 20:24  
 
прошивка обновленна!
  •    •     


   
5139821 # 10
25 марта 2011 15:29  
 
Я собирал его на 16А84A, скачал занова прошивки но в них никаких обновления неувидел ....??????..
  •    •     


   
ASUS # 11
25 марта 2011 15:42  
 
прошивка к PIC16F628A. И схема есть к ней, там отсутствует кварцевый резонатор. В оригинале статьи оно в меня на 84м не работало. Сейчас по обновлению каторое ниже статьи работает на ура. Может ты не то качал, в обновлении прошивка(благодаря rgb) идет и чертежь печатной платы. Тебе не надо твою схему переделовать, можна даже выпаять то кварц и конденсаторы, а заместь 84 пика поставить прошитый 628 КОТОРЫЙ НА МНОГО ДЕШЕВЛЕ СТОИТ 84ГО
--------------------
против лома нет приема, разве что законы ома, лом ужасен и велик, он хороший проводник)))
  •    •     


   
5139821 # 12
25 марта 2011 17:32  
 
дело оказалось в подтягивающем резюке, я уменьшил его до 3к, и все заработало!!!!!!!!!
  •    •     


   
alexkrup # 13
31 марта 2011 19:46  
 
Сегодня за пару часов собрал термостат, изменённую схему. Всё заработало сразу. Спасибо! правда свыше 40 градусов не пробовал. да мне и не надо. Однако, хотелось бы узнать, каким образом изменять дифференциал температур. например плюс - минус 3 от заданной. В данной прошивке он только плюс - минус 1 градус. Может кто подскажет адрес в HEX. файле и алгоритм, что на что поменять, что бы получить желаемое значение? сам я программы не пишу, только промышленным программатором готовые прошивки шью.
Спасибо.
  •    •     


   
ASUS # 14
31 марта 2011 21:07  
 
оно вобще б было универсальным, если бы можно было задавать вывод ( нагрев или охлаждение) потом задержку, в даном случае она становить 2 градуса. И чтоб можно было коректировать в пределах десятых градусах, так как он измеряет с точностью 0,1 градусов и я сравнивал с ртутным, медецинским, показание сходились. Хотелось бы найти , простому устройству,широкое приенение. Я хотел бы его использовать в инкубаторе. Сейчас в меня такое устройство стоит в холодильнике.
--------------------
против лома нет приема, разве что законы ома, лом ужасен и велик, он хороший проводник)))
  •    •     


   
alexkrup # 15
31 марта 2011 21:34  
 
Может кто выложит вариант???
  •    •     


   
alexkrup # 16
4 апреля 2011 09:33  
 
Видимо никто не выложит. cry
  •    •     


   
ASUS # 17
10 апреля 2011 22:05  
 
не поняли суть просьбы
--------------------
против лома нет приема, разве что законы ома, лом ужасен и велик, он хороший проводник)))
  •    •     


   
sashoc # 18
14 мая 2011 22:53  
 
некорректно работает с инвертированной прошивкой нагрузка включается и тут же выключается если возможно помогите
  •    •     


   
ASUS # 19
15 мая 2011 06:49  
 
Тут прошивка на нагрев! и при включении на пол секунды выход включается, а потом выключается!если тебе надо на охлаждение то сделай инвертирование на самом релле! Я так и сделал!
--------------------
против лома нет приема, разве что законы ома, лом ужасен и велик, он хороший проводник)))
  •    •     


   
rgb # 20
15 мая 2011 08:03  
 
Поставте в цепь упровления реле еще один транзистор и будет вам инверсия и реле не под напряжением.
  •    •     


   
alexkrup # 21
8 сентября 2011 15:22  
 
Поковырялся немного и вот к чему пришёл. Если в адресе ...OFCh значение 02 поменять, например, на 04, то и гистерезис будет 4 градуса. Это в 8-ми битном просмотре.
В 16-ти битном это будет адрес ...007Eh. Там значится параметр 3002. Вот, если 02 заменить на 04, то и гистерезис станет 4 градуса. И т.д...
  •    •     


   
an_muz # 22
10 сентября 2011 17:48  
 
Если выставить 24, то нагреватель будет отключен при 24+2=26.
Включен нагреватель будет при снижении до 24.
Как сделать отключение при достижении 24 а включение после снижения до 22 ?
  •    •     


   
an_muz # 23
10 сентября 2011 18:25  
 
Если применять как термостат для электрообогрева. неудобно выставлять порог вкл.-выкл. нагревателя (необходимо проганять весь диапазон -55 -- +125).
Для диапазона +10 -- +30 в пршивке V7_1.HEX 5 и 6 рядки необходимо заменить соответственно:
:1000300022282D11AD17C20A42081F3C031D222899
:100040000A31C2003210AD10B2103211321632082D

А вот вопрос.

Если выставить к примеру 24 то нагреватель будет откл. при 24+2=26.
Включение произойдёт при снижении до 24.

Как сделать откл. при 24 а вкл. при 24-2=22 ???
  •    •     


   
alexkrup # 24
12 сентября 2011 21:16  
 
Для того, что бы отключался на 24, а включался на 22, необходимо левую кнопочку нажать и держать, при этом правой кнопочкой выставить 22.
Кстати, если программатором просмотреть область EEPROM, то там, по-моему, по умолчанию стоит значение 17, что соответствует десятичному значению 23 градуса. Это возможно, в случае сбоя контроллера, от чего он будет работать.
А точнее, надо будет ещё просмотреть это.
Конечно, было бы удобнее выставлять пороги кнопочками, в большом интервале температур.
  •    •     


   
agette # 25
13 сентября 2011 20:39  
 
прост в изготовлении прекрасно работает, но есть одно маленькое неудобство если периодически менять температуру подогрева (охлаждения) то приходиться прокручивать по кругу проскочил по второму...
В схеме и программе авторов реализовано только увеличение установочных данных, что оправдано, если не приходиться периодически менять установочные данные.
Устранить данное неудобство можно подключив кнопку убавление температуры вывод RB4 10 нога и не значительно изменить программу опроса кнопок управления.
  •    •     


   
agette # 26
13 сентября 2011 21:29  
 
Есть версия для pic16f628
  •    •     


   
alexkrup # 27
14 сентября 2011 08:59  
 
agette,
Есть версия для pic16f628

Так выкладывайте, попробуем оттестировать.
  •    •     


   
an_muz # 28
14 сентября 2011 09:33  
 
Уважаемый alexkrup,какую кнопочку держать, а какую нажимать это понятно без Ваших коментариев.
Вопрс в том, что если выставил 22, то это должно указивать на то что термостат будет поддерживать температуру 22 градуса.
И ещё, прошивка V7_1.HEX и есть для 16f628.

Уважаемый agette чтобы не прокручевать по кругу большой диапазон +125 / -55 можно его сократить до нужного. А если есть решение как реализовать кнопку 3 (уменшение) то поделитесь.
  •    •     


   
alexkrup # 29
14 сентября 2011 11:27  
 
an_muz
Если всё понятно, то зачем задавать вопрос???
Как сделать отключение при достижении 24 а включение после снижения до 22 ?
Это Ваш вопрос, уважаемый.
Так что же Вам не понятно по включению и выключению?

Если Вам нужно наоборот, что бы на 24 включался (на охлаждение), а на 22 выключался, то здесь как минимум 3 наипростейших варианта. Об этом выше писали. Для этого надо инвертировать сигнал, например, поставить логический элемент "НЕ", или второй транзистор, для инверсии, или просто подключить нагрузку к другому контакту реле.
Или снова что-то не так??? Уважаемый...
  •    •     


   
an_muz # 30
14 сентября 2011 12:37  
 
Ладно просто, alexkrup если выбран предел к примеру 24 нужно чтобы нагреватель отключался при достижении 24 градуса.

Ваши 3 варианта приведут к тому что нагреватель в даном случае включиться при 24+2=26, а выключится при снижении до 24 то-есть никогда если это нагреватель.

Соберите попробуйте или просимулируйте в "Протеусе".
  •    •     

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
 

Обновления

Конкурсные работы:

Сообщения Форума Ответов
бaкoмeтр 1799
Сколько мужчина может потратит ... 4
Настенные часы - термометр 258
PICKIT2 и AVR 5
RGB подсветка приборной панели 4
Бакометр 2 200
Индикаторы температуры и давле ... 22
Универсальный бортовой компьют ... 298
Простой автоматический выключа ... 18
Помогите пожалуйста с CAN инте ... 2