Главная » Статьи » Как подключить |
Для измерения температуры в бытовых целях хорошо подходят цифровые датчики DS18B20. Эти датчики способны измерять температуру в пределах от -55 до 125 °C, с заявленной точностью от производителя в 0,5 °C. Для большинства гражданских нужд такой диапазон и такая точность измерения вполне приемлема (какую-нибудь систему термоконтроля собрать или еще чего). Поэтому решил попрактиковаться с этим датчиком, обязательно пригодится. Работает датчик по однопроводному интерфейсу 1-Wire. Здесь я описывать этот протокол не буду, так как информации и так достаточно. Для нас самое важное, что нужно знать на первом этапе - лишь то, что сигнальный провод необходимо подтягивать к шине питания подтягивающим резистором номиналом примерно 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
Датчик не подключен, выводится соответствующее сообщение:
А это с подключенным датчиком, при комнатной температуре:
Ниже можете скачать исходник, файл в протеусе и откомпилированный файл: | |
Просмотров: 63132 | Комментарии: 35
| Теги: |
Всего комментариев: 35 | 1 2 » | |||||||||||||||||||||||
| ||||||||||||||||||||||||
1-30 31-35 | ||||||||||||||||||||||||
Проекты [46] |
Как подключить [32] |
Инструменты [3] |
Полезная информация [18] |
Объявления [3] |