'-------------------------------------------'
' Mikrocontroller/Chip '
'-------------------------------------------'
$regfile = "m32def.dat" 'ATMEGA32 Registerdatei
$crystal = 8000000 'Externer Quarz 8Mhz
$hwstack = 256 'HardwareStack
$swstack = 256 'SoftwareStack
$framesize = 128 'Framesize
$baud = 9600 'Baudrate
'-------------------------------------------'
' LCD Konfiguration '
'-------------------------------------------'
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.0 , Rs = Portc.1
Config Lcd = 16 * 2
'-------------------------------------------'
' 1Wire Konfiguration '
'-------------------------------------------'
Config 1wire = Porta.1
'-------------------------------------------'
' Deklarationen '
'-------------------------------------------'
Const Ee_dsid1 = 2
Const Ee_dsid2 = 10
Const Ee_dsid3 = 18
Const Ee_dsid4 = 26
'-------------------------------------------'
' Variablen '
'-------------------------------------------'
Dim Sc(9) As Byte , Sensor As Byte , W As Word
Dim Dsid1str As String * 8 , Dsid2str As String * 8 , Dsid3str As String * 8 , Dsid4str As String * 8 , Dsidtempstr As String * 8
Dim Dsid1(8) As Byte At Dsid1str Overlay , Dsid2(8) As Byte At Dsid2str Overlay , Dsid3(8) As Byte At Dsid3str Overlay , Dsid4(8) As Byte At Dsid4str Overlay
Dim Dsidtemp(8) As Byte At Dsidtempstr Overlay
Dim T1 As Integer
Dim T2 As Single
Dim T3 As Single
Dim T As Integer
Dim I As Byte
Dim J As Byte
'-------------------------------------------'
' Main '
'-------------------------------------------'
Cls
Cursor Noblink
Locate 1 , 1
Lcd "Thermometer..."
Wait 2
J = Ee_dsid1
For I = 1 To 8 '4x8 bytes (Adressen DS18S20) aus Eeprom lesen
Readeeprom Dsid1(i) , J
Incr J
Next
For I = 1 To 8
Readeeprom Dsid2(i) , J
Incr J
Next
For I = 1 To 8
Readeeprom Dsid3(i) , J
Incr J
Next
For I = 1 To 8
Readeeprom Dsid4(i) , J
Incr J
Next
Sensor = 0
Waitms 200
1wverify Dsid1(1) 'Sensor1 vorhanden?
If Err = 0 Then
Locate 1 , 1
Lcd "Sensor 1 vorhanden"
Waitms 200
Set Sensor.0
End If
Waitms 200
1wverify Dsid2(1) 'Sensor2 vorhanden?
If Err = 0 Then
Locate 1 , 1
Lcd "Sensor 2 vorhanden"
Waitms 200
Set Sensor.1
End If
Waitms 200
1wverify Dsid3(1) 'Sensor3 vorhanden?
If Err = 0 Then
Locate 1 , 1
Lcd "Sensor 3 vorhanden"
Waitms 200
Set Sensor.2
End If
Waitms 200
1wverify Dsid4(1) 'Sensor4 vorhanden?
If Err = 0 Then
Locate 1 , 1
Lcd "Sensor 4 vorhanden"
Waitms 200
Set Sensor.3
End If
Waitms 200
W = 1wirecount() 'Wieviele Sensoren gibt es?
J = 0
Locate 2 , 1
Lcd W
For I = 0 To 3 'Wieviele sind identifiziert?
J = J + Sensor.i
Next
If J < W Then 'Wenn neuer Sensor vorhanden
For I = 1 To 6 'Signal für Anlernen
Waitms 300
Next I
Dsidtemp(1) = 1wsearchfirst() 'Erster Sensor am Bus
If Dsidtempstr = Dsid1str Or Dsidtempstr = Dsid2str Or Dsidtempstr = Dsid3str Or Dsidtempstr = Dsid4str Then 'ID schon im EEPROM?
Dsidtemp(1) = 1wsearchnext() 'Zweiter Sensor am Bus
If Dsidtempstr = Dsid1str Or Dsidtempstr = Dsid2str Or Dsidtempstr = Dsid3str Or Dsidtempstr = Dsid4str Then 'ID schon im EEPROM?
Dsidtemp(1) = 1wsearchnext() 'Dritter Sensor am Bus
If Dsidtempstr = Dsid1str Or Dsidtempstr = Dsid2str Or Dsidtempstr = Dsid3str Or Dsidtempstr = Dsid4str Then 'ID schon im EEPROM?
Dsidtemp(1) = 1wsearchnext() 'Vierter Sensor am Bus
End If
End If
1wverify Dsidtemp(1) 'Nochmal überprüfen
If Err = 0 Then 'Wenn in Ordnung...
If Sensor.0 = 0 Then 'Sensor 1 nicht vorhanden?
J = Ee_dsid1 'In Position 1 im EEPROM
Elseif Sensor.1 = 0 Then 'Sonst in Position 2
J = Ee_dsid2
Elseif Sensor.2 = 0 Then
J = Ee_dsid3
Else
J = Ee_dsid4
End If
End If
For I = 1 To 8 'Schreibe ID ins EEPROM
Writeeeprom Dsidtemp(i) , J
Incr J
Next
End If
Waitms 200
End If
Do
' Alle angeschlossenen DS1820 zum Messen veranlassen
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 800
' Den gewünschten Sensor auswählen
1wverify Dsid1(1)
' Kommando READ SCRATCHPAD
1wwrite &HBE
Sc(1) = 1wread(9)
If Sc(9) = Crc8(sc(1) , 8) Then
T = Makeint(sc(1) , Sc(2))
T = T * 50
T = T - 25
T1 = Sc(8) - Sc(7)
T1 = T1 * 100
T1 = T1 / Sc(8)
T = T + T1
T = T / 10
T1 = T2 * 10
T3 = T - T1
Locate 2 , 4
Lcd T2 ; "." ; T3 ; Chr(223) ; "C"
'Lcd T ; Chr(223) ; "C"
End If
' Ausgabe alle 0,5 Sekunden
Waitms 500
Loop
End