Hallo,
ich habe erstmal ein kleines Testprogramm geschrieben, um erstmal zu
sehen ob die Temperatursensoren funktionieren. Und sie funktionieren
Perfekt.
Hier mal der reine Do Loop Schleife Code
1 | Do
|
2 |
|
3 | 1wreset ' Bus reseten damit alle Sensoren hören
|
4 | 1wwrite &HCC ' &HCC = alle Sensoren am Bus werden angesprochen / &H55 einen bestimmten Baustein ansprechen mit 1wverify Dsid1-3(1) oder 1wwrite &H55 ' 055H = Match ROM command, also Baustein auswählen For I = 1 To 8 : 1wwrite Dsid(i) : Next I
|
5 | 1wwrite &H44 ' Sensoren veranlassen die Temperatur zu messen
|
6 |
|
7 | Waitms 750
|
8 |
|
9 | 1wverify Dsid1(1) 'Spreche den ersten Sensor an
|
10 | If Err = 1 Then
|
11 | Locate 10 , 33
|
12 | Lcd "Fehler" 'Err = 1 dann stimmt etwas nicht
|
13 | Elseif Err = 0 Then
|
14 | 1wwrite &HBE ' Kommando READ SCRATCHPAD
|
15 | Gosub Berechnung
|
16 | Temp1 = Fusing(dg2 , "#.#") 'Ergebnis in Temp1 als String ablegen und ab der zweiten kommastellen abschneiden
|
17 | Locate 10 , 33
|
18 | Lcd Temp1 ; " C" ' Zeige Text aus Tabelle Data1 von Stelle index(1)
|
19 | End If
|
20 |
|
21 | 1wverify Dsid2(1) 'Spreche den ersten Sensor an
|
22 | If Err = 1 Then
|
23 | Locate 12 , 33
|
24 | Lcd "Fehler" 'Err = 1 dann stimmt etwas nicht
|
25 | Elseif Err = 0 Then
|
26 | 1wwrite &HBE ' Kommando READ SCRATCHPAD
|
27 | Gosub Berechnung
|
28 | Temp2 = Fusing(dg2 , "#.#") 'Ergebnis in Temp1 als String ablegen und ab der zweiten kommastellen abschneiden
|
29 | Locate 12 , 33
|
30 | Lcd Temp2 ; " C" ' Zeige Text aus Tabelle Data1 von Stelle index(1)
|
31 | End If
|
32 |
|
33 | Loop
|
34 |
|
35 | End
|
36 |
|
37 | Berechnung:
|
38 |
|
39 | Dsid2scratchpad(1) = 1wread(9) ' lese 9 bytes in das Array (byte9=checksumme)
|
40 | If Dsid2scratchpad(9) = Crc8(dsid2scratchpad(1) , 8) Then ' überprüfe Checksumme (9 Byte) wenn OK dann
|
41 | Itmp = Dsid2scratchpad(1) And 1
|
42 | If Itmp = 1 Then Decr Dsid2scratchpad(1)
|
43 | Dg = Makeint(dsid2scratchpad(1) , Dsid2scratchpad(2)) ' erstes und 2 Byte (LSB+MSB) zusamm fügen &H0A + &H02 = &HA2 = 162
|
44 | Dg = Dg * 50
|
45 | Dg = Dg - 25
|
46 | Dg1 = Dsid2scratchpad(8) - Dsid2scratchpad(7)
|
47 | Dg1 = Dg1 * 100
|
48 | Dg1 = Dg1 / Dsid2scratchpad(8)
|
49 | Dg = Dg + Dg1
|
50 | Dg2 = Dg / 100
|
51 | End If
|
52 |
|
53 | Return
|
Jetzt möchte ich das ganze aber in das eigentliche Programm einsetzen,
wo aber viele andere Dinge zusätzlich gemacht werden. Unter anderem
DCF77 auswertung, Helligkeitsauswertung, Tastenauswertung etc. Dann
funktionieren die Sensoren scheinbar nur noch sporadisch. Also manchmal
wird mir "Fehler" angezeigt, wie ich es einprogrammiert habe, wenn der
Sensor nicht angeschlossen ist oder der Sensorwert Nr. 1 nimmt plötzlich
den Sensorwert Nr.2 an. Ich kopier den ganzen oberen Code (der Solo
absolut perfekt und stabil läuft) in die Do Loop schleife des anderen
Programmes und dann läuft es schon nicht mehr richtig. Also so:
Do
Dcf77 Auswertung
Tasterauswertung
Temperaturauswertung
.
Helligkeitsauswertung
...
loop
Wieso funktioniert dann der Code nicht mehr. Ich kopier den 1:1 und auch
die Initialisierungssequenz am Anfang des Programmes wird mit der
Initialisierungssequenz vom "Soloprogramm" 1:1 ergänzt.
Stimmt da dann etwas mit dem Timing nicht mehr? Wobei das eigentlich
nicht sein kann.