Работа с датчиком температуры DS18b20. Делаем термометр

  Для измерения температуры в бытовых целях хорошо подходят цифровые датчики DS18B20. Эти датчики способны измерять температуру в пределах от -55 до 125 °C, с заявленной точностью от производителя в 0,5 °C. Для большинства гражданских нужд такой диапазон и такая точность измерения вполне приемлема (какую-нибудь систему термоконтроля собрать или еще чего). Поэтому решил попрактиковаться с этим датчиком, обязательно пригодится.

 Работает датчик по однопроводному интерфейсу 1-Wire. Здесь я описывать этот протокол не буду, так как информации и так достаточно. Отличное описание работы интерфейса 1-wire и методика работы с датчиком ds18b20 можно почитать на http://samou4ka.net/  Для нас самое важное, что нужно знать на первом этапе лишь то, что сигнальный провод необходимо подтягивать к шине питания подтягивающим резистором номиналом примерно 4,7к. Если длина сигнального провода увеличивается, необходимо снижать сопротивление подтягивающего резистора. Читал о том, что датчик соединяли с МК проводом длинной 90 метров, для исправной работы датчика сопротивление резистора составило 3к. 

  У себя для освоения работы с датчиком использовал микроконтроллер Atmega32 и выводил показания на двухстрочный алфавитно-цифровой ЖКИ. 

  Что касается программной части, в Bascom-AVR имеется библиотека работы с протоколом 1-Wire. Ее и задействуем. В программе полученные результаты с датчика немного корректируются, иначе при отрицательных температурах результат будет ложным на 1 градус, и нулевая температура выводится без знака.


$regfile = “m32def.dat”

$crystal = 1000000          ‘ 1 MHz

 ‘*** Конфигурируем ЖКИ

Config Lcd = 16 * 2

Config Lcdpin = Pin, Rs=Portc.5, E=Portc.4, Db4=Portc.0, Db5=Portc.1, Db6=Portc.2, Db7 = Portc.3

 ‘ ***Конфигурируем однопроводную шину

Config 1wire = Portb.7

 ‘ *** Заводим переменные

Dim Byte0 As Byte

Dim Byte1 As Byte

Dim Sign As String * 1

Dim T As Byte

Dim T1 As Byte

Dim T2 As Byte

Cls

Cursor Off

 

 ‘***ОСНОВНАЯ ПРОГРАММА

Do                         ‘ начало цикла

1wreset

If Err = 1 Then            ‘если при опросе небыло ответа ставим флаг ошибки

Cls

Rem датчик

Rem не подключен

Lcd ” гaїАёє ”             ‘ выводим надпись об отсутствии датчика

Locate 2 , 1

Lcd ” Ѕe ѕoгє»ЖАeЅ”

Wait 1

Else                       ‘ иначе, если ошибки не было, продолжаем опрос датчика

1wwrite &HCC               ‘ Выдаем команду чтения ПЗУ

1wwrite &H44               ‘ Запуск измерения

Waitms 750                 ‘ Ждем окончания преобразования

1wreset

1wwrite &HCC

1wwrite &HBE               ‘ Команда чтения ОЗУ датчика

Byte0 = 1wread()           ‘ Читаем нулевой байт

Byte1 = 1wread()           ‘ Читаем первый байт

If Byte1 > 248 Then        ‘ Проверка на отрицательность температуры

Byte0 = &HFF – Byte0

Byte1 = &HFF – Byte1

Sign = “-“

Else

Sign = “+”

End If

T1 = Byte0 / 16           ‘ Сдвигаем нулевой байт вправо на 4 бита (2*2*2*2=16)

T2 = Byte1 * 16           ‘ Сдвигаем первый байт влево на 4 бита (2*2*2*2=16)

T1 = T1 + T2              ‘ Формируем результат для вывода на дисплей

 ‘ *** Коррекция полученных значений

If Sign = “-” Then        ‘ для корректного вывода отрицательных температур

 T1 = T1 + 1

End If

If Sign = “+” And T1 = 0 Then     ‘ убираем знак “+” с нулевой температуры

 Sign = ” “

End If

Cls

‘ *** Выводим результат на дисплей

Rem Температура

Lcd ” Teјѕepaїypa”                ‘ тут пишем что измеряем

Locate 2 , 6

Lcd Sign ; T1 ;                   ‘ выводим знак и температуру на дисплей

Locate 2 , 9

Lcd Chr(223) ; “C”                ‘ Сhr(223) – символ “градус”

Cursor Off

End If

Wait 1                            ‘ ждем 1 секундy

Loop                              ‘ повторяем цикл

End


  Датчик не подключен, выводится соответствующее сообщение:

  А это с подключенным датчиком, при комнатной температуре:

Ниже можете скачать исходник, файл в протеусе и откомпилированный файл:

Скачать
Взято с: avrproject.ru


Категория: AVR
Метки:

Написать коментарий

*
= 3 + 1

Добавить изображение

Последние статьи