Данный проект состоит из датчика температуры ds18b20 и микроконтроллера. Вывод температуры осуществляется на символьный LCD дисплей размером 16x2. Значение температуры считывается с цифрового датчика ds18b20. В схеме используется микроконтроллер Atmega8515.
Цифровой датчик ds18b20 имеет температурный диапазон от -55 до +125 градусов по Цельсию, точность датчика составляет порядка 0.5 градуса. Подключение датчика осуществляется по 3м проводам, 2 из них это питание, а 3-й это линия данных.
Код программы
‘—————————————————————————————–
‘purpose : DS1820 / DS18S20 Temperature Indicator
‘—————————————————————————————–
$regfile = “m8515.dat” ‘ specify the used micro
$crystal = 8000000 ‘ used crystal frequency
Declare Sub Read1820
Config 1wire = Portd.7
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0
‘Temp variables
Dim Bd1 As Byte
Dim Bd2 As Byte
Dim Bd7 As Byte
Dim Bd8 As Byte
Dim I As Byte , Tmp As Byte
Dim T As Integer , T1 As Integer
Dim Bd(9) As Byte ‘Scratchpad 0-8 72 bits incl CRC, explanations for DS1820
‘Sc(1) ‘Temperature LSB
‘Sc(2) ‘Temperature MSB
‘Sc(3) ‘TH/user byte 1 also SRAM
‘Sc(4) ‘TL/user byte 2 also SRAM
‘Sc(5) ‘config also SRAM x R1 R0 1 1 1 1 1 – the r1 r0 are config for resolution – write FF to byte for 12 bit – others dont care
‘Sc(6) ‘res
‘Sc(7) ‘res
‘Sc(8) ‘res
‘Sc(9) ‘8 CRC
‘DALLAS DS1820 ROM and scratchpad commands”””””””””””””1wwrite….
‘&H 33 read rom – single sensor
‘&H CC skip rom
‘&H BE read scratchpad
‘&H 44 convert T
‘ Main loop
Cls
Cursor Off
Do
1wwrite &HCC : 1wwrite &H44 ‘ start measure
Waitms 400 ‘ wait for end of conversion
Read1820
Wait 1
Loop
End ‘end program
‘Read the DS1820 by skipping the ROM checking, since we are using only 1 sensor
Sub Read1820 ‘ reads sensor ans calculate ‘ T for 0.1 C
1wreset ‘ reset the bus
1wwrite &HCC ‘ read internal RAM
1wwrite &HBE ‘ read 9 data bytest
Bd(1) = 1wread(9)
Bd1 = Bd(1)
Bd2 = Bd(2)
Bd7 = Bd(7)
Bd8 = Bd(8)
‘ read bytes in array
1wreset ‘ reset the bus
Tmp = Bd1 And 1
If Tmp = 1 Then Decr Bd1 ‘ 0.1C precision
T = Bd1
T = T * 50
T = T – 25
T1 = Bd8 – Bd7
T1 = T1 * 100
T1 = T1 / Bd8
T = T + T1
T1 = T / 100 ‘store tens
T = T Mod 100 ‘store decimal number
Cls
Locate 1 , 3
Lcd “Temperature”
Locate 2 , 7
Lcd T1 ; “.” ; T
End Sub
End