H.Brill
10.04.2010, 07:56
Hallo,
Hab mir ein kleines Windowsprogramm erstellt,
das die Temperaturen von zwei 1Wire Sensoren
ausliest, die über RS232 vom AVR geschickt werden.
Wenn ich nun die Sensoren berühre, kommen die
Daten nicht mehr richtig an. Könnt ihr mal auf meinen
Code schauen, ob das so richtig ist bzw. ob man was
optimieren/ändern muß.
' Beispiel für das myAVR Board 1 & 2 mit LCD und 1wire Temperatursensoren an Pin 5 von Port C
' Zwei 1wire Temperatursensoren DS1820
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600
' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von BASCOM durch Software realisiert
Config 1wire = Portc.5
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim I As Byte
Dim Nr As Byte
Dim Sc(9) As Byte
Dim T As Integer
Dim T1 As Integer
Dim T2 As String * 7
Dim Ts As Integer
Dim T3 As String * 17
' Ersten angeschlossenen DS1820 finden und Adresse auslesen
Dsid1(1) = 1wsearchfirst()
Waitms 100
' Zweiten DS1820 suchen und Adresse auslesen
Dsid2(1) = 1wsearchnext()
Waitms 100
'Thermostat - Ts = Schalttemperatur x 10
Ts = 2500
Do
' Alle angeschlossenen DS1820 zum Messen veranlassen
1wreset
1wwrite &HCC
1wwrite &H44
Waitus 200
' Den ersten Sensor auswählen
1wverify Dsid1(1)
' Kommando READ SCRATCHPAD
1wwrite &HBE
Sc(1) = 1wread(9)
If Sc(9) = Crc8(sc(1) , 8) Then
' Genauere Temperaturberechnung auf 0,1 °C
I = Sc(1) And 1
If I = 1 Then Decr Sc(1)
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
T2 = Str(t)
' Temperatur in 0,1 Grad Schritten ausgeben
T3 = Format(t2 , "+00.0") + " C" + "|"
End If
'Waitms 500
' Ausgabe alle 0,5 Sekunden
' Den zweiten Sensor auswählen
1wverify Dsid2(1)
' Kommando READ SCRATCHPAD
1wwrite &HBE
Sc(1) = 1wread(9)
If Sc(9) = Crc8(sc(1) , 8) Then
' Genauere Temperaturberechnung auf 0,1 °C
I = Sc(1) And 1
If I = 1 Then Decr Sc(1)
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
T2 = Str(t)
' Temperatur in 0,1 Grad Schritten ausgeben
T3 = T3 + Format(t2 , "+00.0") + " C"
Print T3
T3 = Space(17)
End If
' Ausgabe alle 0,5 Sekunden
Waitms 100
Loop
End
Das ist die Debug-ausgabe in meinem Windows-
programm. Wie man sieht, kommt zwischendurch
auch mal Daten - Salat :
+24.0 C|+24.0 C
+24.0 C|+24.0 C
+24.0 C|+24.1 C
+24.0 C|+24.1 C
+24.0 C|+24.1 C
+24.0 C|+24.1 C
+24.0 C|+24.0 C
+24.0 C|+24.0 C
+24.0 C|+24.0 C
+24.0 C|+24.0 C
+24.0 C|+24.1 C
+24.0 C|+24.1 C
+85.0 C|+24.1 C
+85.0 C|+24.1 C
+85.0 C|+24.3 C
+85.0 C|+24.3 C
+24.3 C|+24.3 C
+24.3 C|+24.3 C
+24.3 C|+25.2 C
+24.3 C|+25.2 C
+25.3 C|+25.2 C
+25.3 C|+25.2 C
+25.3 C|+26.3 C
+25.3 C|+26.3 C
+26.3 C|+26.3 C
+26.3 C|+26.3 C
+26.3 C|+27.0 C
+26.3 C|+27.0 C
+27.1 C|+27.0 C
+27.1 C|+27.0 C
+27.1 C|+27.7 C
+27.1 C|+27.7 C
+27.7 C|+27.7 C
+27.7 C|+27.7 C
+27.7 C|+28.2 C
+27.7 C|+28.2 C
+28.2 C|+28.2 C
+28.2 C|+28.2 C
+28.2 C|+28.6 C
+28.2 C|+28.6 C
+28.6 C|+28.6 C
+28.6 C|+28.6 C
+28.6 C|+29.0 C
+28.6 C|+29.0 C
+28.8 C|+29.0 C
+28.8 C|+29.0 C
+28.8 C|+29.3 C
+28.8 C|+29.3 C
+29.2 C|+29.3 C
+29.2 C|+29.3 C
+29.2 C|+29.2 C
+29.2 C|+29.2 C
+28.8 C|+29.2 C
+28.8 C|+29.2 C
+28.8 C|+29.0 C
+28.8 C|+29.0 C
+28.6 C|+29.0 C
+28.6 C|+29.0 C
+28.6 C|+28.8 C
+28.6 C|+28.8 C
+28.4 C|+28.8 C
+28.4 C|+28.8 C
+27.0 C|+27.1 C
+27.0 C|+27.1 C
+26.9 C|+27.1 C
+26.9 C|+27.1 C
+26.9 C|+27.0 C
+26.9 C|+27.0 C
+26.8 C|+27.0 C
+26.8 C|+27.0 C
+26.8 C|+26.9 C
+26.8 C|+26.9 C
+85.0 C|+26.9 C
+85.0 C|+26.9 C
+26.8 C|+26.8 C
+26.8 C
+85.0 C|
+26.8 C
+85.0 C|
+26.8 C
+85.0 C|
+27.0 C
+85.0 C|
+27.0 C
+26.8 C|
+27.0 C
+26.8 C|
+27.0 C
+26.8 C|
+27.5 C
+26.8 C|
+27.5 C
+27.6 C|
+27.5 C
+27.6 C|
+27.5 C
+27.6 C|
+28.2 C
+27.6 C|
+28.2 C
+28.3 C|
+28.2 C
+28.3 C|
+28.2 C
+28.3 C|
+28.8 C
+28.3 C|
+28.8 C
+28.8 C|
+28.8 C
+28.8 C|
+28.8 C
+28.8 C|
+29.3 C
+29.3 C
+85.0 C|+29.3 C
+85.0 C|+29.3 C
+85.0 C|+29.6 C
+29.3 C|+29.6 C
+29.3 C|+29.6 C
+29.3 C|+29.6 C
+29.3 C|+29.5 C
+29.2 C|+29.5 C
+29.2 C|+29.5 C
+29.2 C|+29.5 C
+29.2 C|+29.3 C
+29.0 C|+29.3 C
Hab mir ein kleines Windowsprogramm erstellt,
das die Temperaturen von zwei 1Wire Sensoren
ausliest, die über RS232 vom AVR geschickt werden.
Wenn ich nun die Sensoren berühre, kommen die
Daten nicht mehr richtig an. Könnt ihr mal auf meinen
Code schauen, ob das so richtig ist bzw. ob man was
optimieren/ändern muß.
' Beispiel für das myAVR Board 1 & 2 mit LCD und 1wire Temperatursensoren an Pin 5 von Port C
' Zwei 1wire Temperatursensoren DS1820
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600
' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von BASCOM durch Software realisiert
Config 1wire = Portc.5
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim I As Byte
Dim Nr As Byte
Dim Sc(9) As Byte
Dim T As Integer
Dim T1 As Integer
Dim T2 As String * 7
Dim Ts As Integer
Dim T3 As String * 17
' Ersten angeschlossenen DS1820 finden und Adresse auslesen
Dsid1(1) = 1wsearchfirst()
Waitms 100
' Zweiten DS1820 suchen und Adresse auslesen
Dsid2(1) = 1wsearchnext()
Waitms 100
'Thermostat - Ts = Schalttemperatur x 10
Ts = 2500
Do
' Alle angeschlossenen DS1820 zum Messen veranlassen
1wreset
1wwrite &HCC
1wwrite &H44
Waitus 200
' Den ersten Sensor auswählen
1wverify Dsid1(1)
' Kommando READ SCRATCHPAD
1wwrite &HBE
Sc(1) = 1wread(9)
If Sc(9) = Crc8(sc(1) , 8) Then
' Genauere Temperaturberechnung auf 0,1 °C
I = Sc(1) And 1
If I = 1 Then Decr Sc(1)
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
T2 = Str(t)
' Temperatur in 0,1 Grad Schritten ausgeben
T3 = Format(t2 , "+00.0") + " C" + "|"
End If
'Waitms 500
' Ausgabe alle 0,5 Sekunden
' Den zweiten Sensor auswählen
1wverify Dsid2(1)
' Kommando READ SCRATCHPAD
1wwrite &HBE
Sc(1) = 1wread(9)
If Sc(9) = Crc8(sc(1) , 8) Then
' Genauere Temperaturberechnung auf 0,1 °C
I = Sc(1) And 1
If I = 1 Then Decr Sc(1)
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
T2 = Str(t)
' Temperatur in 0,1 Grad Schritten ausgeben
T3 = T3 + Format(t2 , "+00.0") + " C"
Print T3
T3 = Space(17)
End If
' Ausgabe alle 0,5 Sekunden
Waitms 100
Loop
End
Das ist die Debug-ausgabe in meinem Windows-
programm. Wie man sieht, kommt zwischendurch
auch mal Daten - Salat :
+24.0 C|+24.0 C
+24.0 C|+24.0 C
+24.0 C|+24.1 C
+24.0 C|+24.1 C
+24.0 C|+24.1 C
+24.0 C|+24.1 C
+24.0 C|+24.0 C
+24.0 C|+24.0 C
+24.0 C|+24.0 C
+24.0 C|+24.0 C
+24.0 C|+24.1 C
+24.0 C|+24.1 C
+85.0 C|+24.1 C
+85.0 C|+24.1 C
+85.0 C|+24.3 C
+85.0 C|+24.3 C
+24.3 C|+24.3 C
+24.3 C|+24.3 C
+24.3 C|+25.2 C
+24.3 C|+25.2 C
+25.3 C|+25.2 C
+25.3 C|+25.2 C
+25.3 C|+26.3 C
+25.3 C|+26.3 C
+26.3 C|+26.3 C
+26.3 C|+26.3 C
+26.3 C|+27.0 C
+26.3 C|+27.0 C
+27.1 C|+27.0 C
+27.1 C|+27.0 C
+27.1 C|+27.7 C
+27.1 C|+27.7 C
+27.7 C|+27.7 C
+27.7 C|+27.7 C
+27.7 C|+28.2 C
+27.7 C|+28.2 C
+28.2 C|+28.2 C
+28.2 C|+28.2 C
+28.2 C|+28.6 C
+28.2 C|+28.6 C
+28.6 C|+28.6 C
+28.6 C|+28.6 C
+28.6 C|+29.0 C
+28.6 C|+29.0 C
+28.8 C|+29.0 C
+28.8 C|+29.0 C
+28.8 C|+29.3 C
+28.8 C|+29.3 C
+29.2 C|+29.3 C
+29.2 C|+29.3 C
+29.2 C|+29.2 C
+29.2 C|+29.2 C
+28.8 C|+29.2 C
+28.8 C|+29.2 C
+28.8 C|+29.0 C
+28.8 C|+29.0 C
+28.6 C|+29.0 C
+28.6 C|+29.0 C
+28.6 C|+28.8 C
+28.6 C|+28.8 C
+28.4 C|+28.8 C
+28.4 C|+28.8 C
+27.0 C|+27.1 C
+27.0 C|+27.1 C
+26.9 C|+27.1 C
+26.9 C|+27.1 C
+26.9 C|+27.0 C
+26.9 C|+27.0 C
+26.8 C|+27.0 C
+26.8 C|+27.0 C
+26.8 C|+26.9 C
+26.8 C|+26.9 C
+85.0 C|+26.9 C
+85.0 C|+26.9 C
+26.8 C|+26.8 C
+26.8 C
+85.0 C|
+26.8 C
+85.0 C|
+26.8 C
+85.0 C|
+27.0 C
+85.0 C|
+27.0 C
+26.8 C|
+27.0 C
+26.8 C|
+27.0 C
+26.8 C|
+27.5 C
+26.8 C|
+27.5 C
+27.6 C|
+27.5 C
+27.6 C|
+27.5 C
+27.6 C|
+28.2 C
+27.6 C|
+28.2 C
+28.3 C|
+28.2 C
+28.3 C|
+28.2 C
+28.3 C|
+28.8 C
+28.3 C|
+28.8 C
+28.8 C|
+28.8 C
+28.8 C|
+28.8 C
+28.8 C|
+29.3 C
+29.3 C
+85.0 C|+29.3 C
+85.0 C|+29.3 C
+85.0 C|+29.6 C
+29.3 C|+29.6 C
+29.3 C|+29.6 C
+29.3 C|+29.6 C
+29.3 C|+29.5 C
+29.2 C|+29.5 C
+29.2 C|+29.5 C
+29.2 C|+29.5 C
+29.2 C|+29.3 C
+29.0 C|+29.3 C