Главная » Статьи » Proton PICBasic

Работа с датчиком DS18B20
Цифровой 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




Категория: Proton PICBasic | Добавил: terrarus (17.05.2010)
Просмотров: 18090 | Комментарии: 3 | Рейтинг: 5.0/2
Всего комментариев: 3
1 anatol   (11.12.2011 15:38) [Материал]
"использовать этот датчик с максимально возможной точностью"

Желательно дополнить программу проверкой контрольной суммы преобразования. biggrin

2 Hoff   (24.04.2012 10:22) [Материал]
Почему-то эта программа не работает с PIC16F676. На ЖКИ постоянно выводится одна и та же температура: -0.062. Совпадение это или нет, но это же погрешность DS18B20 в 12 разрядном режиме. Прилагаю схему проекта и исходники. Сильно не пинайте, я только учусь.

3 Hoff   (25.04.2012 10:41) [Материал]
Всё, разобрался. Дело было в микроконтроллере. Какая-то проблема с памятью. Стоило подключить другой МК и всё заработало.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]