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

Работа с датчиком DS18S20

null Работа с датчиком DS18S20

Существует три типа цифровых температурных датчиков, поэтому обратите внимание на то, о каком датчике здесь идет речь. Это датчики DS1820, DS18S20 и DS18B20. DS18S20 - это преемник DS1820 и отличается отсутствием длительного дрейфа. DS18B20 более совершенен, но учитывая то, что о нем достаточно информации, мы рассмотрим именно DS18S20.

В общем случае схема подключения будет выглядеть так:

null

Нижеприведенный код демонстрирует работу с датчиком. Убедитесь в наличии подтягивающего резистора. Допускается подключение нескольких датчиков к одной шине, поскольку каждый датчик имеет уникальный код, по которому он идентифицируется в системе. Для более глубокого понимания процедуры считывания кода обратитесь к документации на датчик.

Device 16F877
XTAL 4
 
Declare LCD_TYPE ALPHA ' Тип ЖКИ
Declare LCD_DTPIN PORTB.4 ' Подключение шины данных
Declare LCD_RSPIN PORTB.2 ' RS - > PORTB.4
Declare LCD_ENPIN PORTB.3 ' E -> PORTB.5
Declare LCD_LINES 2 ' Число строк ЖКИ
Declare LCD_INTERFACE 4 ' Интерфейс передачи - 4-проводный 

PORTB_PULLUPS = true
ALL_DIGITAL = TRUE
 
SYMBOL DQ = Portb.0 'Подключим датчик на PORTA.1
 
Dim Sign as Byte
Dim Cnt as Byte
Dim Count_Per_Deg as Byte
Dim Temp as Word
Dim Temp_Dec as Byte
 
Delayms 150 ' "Прогреем" ЖКИ

Cls
 
' Пошлем команду создания знака градуса
Print $FE,$40,$06,$09,$09,$06,$00,$00,$00,$00 
' на ЖКИ, чтобы можно было при печати 0 видеть символ градуса:
' Print At 1, 1, Value, 0, "Degrees"

Again:
 
'Пошлем команду преобразования температуры
OWRITE DQ, 1,[$55,$10,$31,$C5,$C8,$00,$00,$00,$F4,$44] 
 ' FF I1 I2 I3 I4 I5 I6 CRC 
 ' FF - Семейство, Ix - Адрес,
 ' CRC - Контрольная сумма
REPEAT
 DELAYMS 25 ' Ждем окончания преобразования
 OREAD DQ,4,[Cnt] ' пока не придет импульс, сигнализирующий
UNTIL Cnt <> 0 ' об окончании преобразования
 
'Посылаем команду начала считывания
OWRITE DQ,1,[$55,$10,$31,$C5,$C8,$00,$00,$00,$F4,$BE] 
 ' FF I1 I2 I3 I4 I5 I6 CRC
 ' FF - Семейство, Ix - Адрес,
 ' CRC - Контрольная сумма

OREAD DQ,2,[Temp.LOWBYTE,Temp.HIGHBYTE,Cnt,Cnt,Cnt,Cnt,Cnt,Count_Per_Deg]
 
'Каждая переменная Cnt содержит сотые доли градуса, поэтому 100/16 = 6.25:
Temp_Dec = (6.25 * Cnt) 
 
' Если 8 бит = 1, то температура отрицательная
If Temp.8=1 Then
 ' Если отрицательная, то пропускаем первый бит и инвертируем значение 
 Temp=(Temp.LowByte ^ $FF) >> 1 
 ' Если Cnt = 0, то увеличиваем на 1 переменную Temp, поскольку DS18S20 этого не делает
 If Cnt = 0 then Temp = Temp + 1 
 ' Изменим признак температуры
 Sign = "-" 
Else
 ' Если положительная, то просто убираем первый бит
 Temp=(Temp >> 1) 
 ' И устанавливаем признак 
 Sign = "+" 
 
 ' Инвертируем десятичное значение 
 Temp_Dec = 100 - Temp_Dec 
Endif
 
' Отображаем измеренную температуру
Print At 1,1, Sign, Dec Temp, ".", Dec DIG Temp_Dec, 1, 0,"C "
 
 
Goto Again



Категория: Proton PICBasic | Добавил: ADMIN (06.01.2010)
Просмотров: 9934 | Теги: PROTON, Протон, температура, Проекты, ds18B20 | Рейтинг: 5.0/3
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]