Temperatuurmeter met een DS1820


Temperatuurmeter

Bij dit project maken we gebruik van een DS1820 one wire sensor, de basis bestaat uit de gebruikelijke AT90S2313 van Atmel.
Aan de Atmel hangt een LCD van in mijn geval 1 regel en 8 posities, je kunt hiervoor nemen wat je wilt.
De source is natuurlijk weer in Bascom geschreven en vrij te gebruiken en aan te passen.

De Bascom source:

$crystal = 10000000
$regfile = "2313def.dat"

Declare Sub Read1820
Declare Sub Crcit
Declare Sub Temperature

Dim Bd(9) As Byte
Dim I As Byte , Tmp As Byte
Dim Crc As Byte
Dim T As Integer , T1 As Integer
Dim V As Byte
Dim Temph As Integer , Templ As Integer
Dim Ia As String * 4
Dim Wd As Integer

Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcd = 16 * 1a

Config 1wire = Pd.6
Deflcdchar 1 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32
Temph = 0
Templ = 999
Wd = 0
Cursor Off
Cls

Locate 1 , 6 : Lcd Chr(1) ; "C"

Do
Temperature
Waitms 250
Wd = Wd + 1
Select Case Wd
Case 1 To 2 :
Locate 1 , 8
Lcd " "
Case 3 To 4:
Locate 1 , 8
Lcd "*"
Wd = 0
Case Else:
Wd = 0
End Select

Loop
End

Sub Temperature                                     ' actual measuring
1wwrite &HCC : 1wwrite &H44             ' start measure
Waitms 300  ' 300                       ' wait for end of conversion
Read1820                                 ' read 9 bytes
If Err = 1 Then                            ' if there is no sensor
Locate 1 , 1 : Lcd "-- "                     ' we put "-- " on LCD
Else
If Crc = 0 Then                      ' sensor present, check CRC
Locate 1 , 1
Ia = Str(t)
Lcd Left(ia , 2) : Lcd "."
Lcd Mid(ia , 3 , 1)
Else
Locate 1 , 1 : Lcd "** "            ' CRC NOT OK, "** " on LCD
End If
End If
End Sub

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)                        ' read bytes in array
1wreset                                               ' reset the bus
Crcit ' ckeck CRC
If Crc = 0 Then                         ' if is OK, calculate for
Tmp = Bd(1) And 1                  ' 0.1C precision
If Tmp = 1 Then Decr Bd(1)
T = Makeint(bd(1) , Bd(2))
T = T * 50 : T = T - 25 : T1 = Bd(8) - Bd(7) : T1 = T1 * 100
T1 = T1 / Bd(8) : T = T + T1 : T = T / 10
End If
End Sub

Sub Crcit
If Bd(8) = Crc8(bd(1) , 7) Then
Crc = 0
End If
End Sub

End

De DS1820 wordt direkt aangesloten op de +5V en op de Ground, de datapin gaat aan PD.6 en er gaat een weerstand van 4k7 van de +5V naar de datapin.

That's all.