термометр-термостат на микроконтроллере
Опубликованное в описание термометра на интегральном датчике температуры 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г.
Обсуждение на ФОРУМЕ
|