Цифровой 1-Wire датчик температуры DS18B20 позволяет измерять температуру с точностью до 0,0625 гр.С. В программе oread_ds18b20.bas, листинг которой приведен ниже, демонстрируется как можно можно использовать этот датчик с максимально возможной точностью.
Купить ESP8266 в интернет-магазине EmbedderShop.ru
Листинг программы oread_ds18b20.bas
' --------------Диапазон измерений температур -55...+125 оС, погрешность измерений 0,0625 оС--------------
Device 16F628A ' Использовать микроконтроллер 16F628A
Declare XTAL 4 ' Использовать тактовый генератор на 4 МГц
' ------------------------------------------Конфигурация микроконтроллера------------------------------------------
Config BODEN_OFF, PWRTE_ON, WDT_OFF, LVP_OFF, MCLRE_OFF, INTRC_OSC_NOCLKOUT, CP_ON, DATA_CP_ON
' INTRC_OSC-NOCLKOUT - включить внутренний генератор на 4 мГц
' MCLRE_OFF - Включить режим работы RA5/MCLR как цифрового порта ввода/вывода
' и использовать внутренний сброс MCLR
' PWRTE_ON - Включить бит разрешения работы таймера включения питания для лучшего запуска
' CP_ON - Включить защиту памяти программ от несанкционированного считывания
' DATA_CP_ON - Включить защиту EEPROM памяти данных от несанкционированного считывания
' --------------------------------------------Настройки подключения ЖКИ-------------------------------------------
Declare LCD_Type ALPHA ' Тип ЖКИ - буквенно-цифровой
Declare LCD_DTPin PORTB.4 ' Порт данных ЖКИ
Declare LCD_ENPin PORTB.3 ' Управление цепью E
Declare LCD_RSPin PORTB.2 ' Управление цепью RS
Declare LCD_Interface 4 ' Использовать 4-х битную шину данных
Declare LCD_CommandUs 2000 ' Задержка перед посылкой команды
Declare LCD_DataUs 50 ' Задержка перед посылкой данных
Declare LCD_Lines 2 ' Количество строк ЖКИ равно двум
' ---------------------------------------------------Настройки портов----------------------------------------------------
Declare All_Digital = On ' Сделать все порты цифровыми
' -------------------------------------------------Объявление переменных----------------------------------------------
Symbol DQ = PORTA.4 ' Подключить DS18B20 к выводу PORTA.4
Dim R_Temp As Word ' Переменная для получения значения температуры отдельными двумя байтами
Dim Temp As Float ' Переменная для преобразования значения температуры в данные с плавающей запятой
Dim TempIND As Float ' Переменная для вывода на индикацию значения температуры
Dim C As Bit 'Переменная для хранения бита сигнализации окончания преобразования
' --------------------------------------------Создание символа знака градуса ---------------------------------------
Print $FE,$40,$06,$09,$09,$06,$00,$00,$00,$00 ' Поcлать на ЖКИ команду создания знака градуса, чтобы можно было на ЖКИ при печати цифры 8 видеть символ градуса
' ----------------------------------------------------------Заставка--------------------------------------------------------
Cls ' Очистить дисплей ЖКИ
Print At 1, 1, "1-Wire - DS18B20" ' Отобразить на жки надпись 1-Wire - DS18B20
' -----------------------------------------------------Главная программа -----------------------------------------------
main: ' Метка начала гланой программы
GoSub TERMO_Convert ' Выполнить подпрограмму измерения температуры
Print At 1, 1, "T = ", Dec2 TempIND, " ", 8, "C "' Отобразить на ЖКИ результаты измерений
GoTo main ' Перейти к началу главной программы
' --------------------Подпрограмма измерений температуры и конвертации данных в oC--------------------
TERMO_Convert:
OWrite DQ, 1, [$CC,$44] ' Послать датчику DS18S20 команду старта измерения температуры
Repeat ' Начать внутренний цикл
DelayMS 25 ' Ждать окончания преобразования пока не придет бит,
ORead DQ, 4, [C] ' сигнализирующий об окончании преобразования
Until C > 0 'Выйти из цикла если от DS18S20 поступил бит конца преобразования.
OWrite DQ, 1, [$CC,$BE] ' Послать команду чтения из ОЗУ датчика DS18S20 значения температуры
ORead DQ, 2, [R_Temp.LowByte, R_Temp.HighByte] ' Прочитать значение температуры и записать полученные два байта данных в переменную R_Temp типа Dword, младщий байт в R_Temp.LowByte и старший байт в R_Temp.HighByte
Temp = R_Temp
TempIND = Temp /16
If R_Temp > 64654 Then TempIND = Temp / 16 - 4096
Return ' Возврат из подпрограммы
Более подробно о командах Proton-a ORead и OWrite для работе с датчиками DS18S20 и DS18B20 Вы можете прочитать на ресурсе http://terrarus.ucoz.ru/proton_plus_ide/index.html
Схема подключения датчика и микроконтроллера.
Почему-то не могу добавить схему.
Спонсор статьи - сайт о туризме и социологии: solnechnajdolina.ru
|