В данном проекте используется весьма распространенный датчик измерения температуры ds18b20. Измеренная температура при помощи микроконтроллера Atmega8515 выводится на символьный дисплей 16x2.
ATmega8515 выбран потому, что он совместим по выводам с 8051 микроконтроллером. В этом проекте используется тактирование от внутреннего RC генератора, поэтому необходимо выставить фъюз биты для работы с внутренним генератором.
DS1820 Цифровой термометр обеспечивает 9-битные температурные измерения по Цельсию. DS1820 общается по 1-проводной шине, что по определению требует только одну линию данных (и землю) для связи с центральным микропроцессором.
Он имеет диапазон рабочих температур от -55 ° C до + 125 ° C, и с точностью ± 0,5 ° C в диапазоне от -10 ° С до + 85 ° С.Кроме того, DS1820 можно запитыватся непосредственно от линии данных, устраняя необходимость использования внешнего источника питания.
Программа микроконтроллера
‘—————————————————————————————–
‘copyright : (c) 2008-2009, AVRprojects.info
‘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