Ich dachte nur, weil beide Sensoren gegen H vergleichen. Der erste, der einen größeren Wert hat, wird dafür sorgen, dass der andere nicht mehr sein Flag gesetzt bekommt. Sieht für mich etwas seltsam aus.Zitat:
Zitat von Maxxtro
Gruß
Rolf
Druckbare Version
Ich dachte nur, weil beide Sensoren gegen H vergleichen. Der erste, der einen größeren Wert hat, wird dafür sorgen, dass der andere nicht mehr sein Flag gesetzt bekommt. Sieht für mich etwas seltsam aus.Zitat:
Zitat von Maxxtro
Gruß
Rolf
Ja aber sobald der eine seinen Höchstwert in den EEPROM geschrieben hat, wird Flag ja zurückgesetzt und der andere könnte rein theoretisch seinen Höchstwert schreiben, was allerdings eher selten vorkommen wird, da wohl so gut wie immer der gleiche der beiden Sensoren die höhere Temperatur haben wird... 8-[
Ich verstehe deinen Punkt nicht.
Du sagst, dass es ok ist, wenn immer der gleiche Sensor (evtl. T2) den Max-Wert setzt. Vorm wegspeichern wird er gerundet. Ok.
Woher weißt du, dass es bei dem anderen (T) nicht geht, wenn er nie den höchsten Wert hat, wird er auch nicht gerundet. Du kannst den gespeicherten Wert von T doch gar nicht von dem von T2 unterscheiden!
Weil ich bis jetzt noch beide Sensoren hier habe und beide einzeln erwärmen kann! Und wenn T(1) jetzt einen neuen Höchstwert erreicht wird der Wert eben leider nicht aufgrundet :-k
ich sehe halt - wohl ebenso wie du - keinen Unterschied zwischen den beiden Teilen. Wenn es sich dennoch anders verhält, muss es etwas mit der Umgebung zu tun haben.
Zeig doch mal dein komplettes Programm. Vielleicht ist da ja noch etwas versteckt.
Gruß
Rolf
Code:$regfile = "m32def.dat"
$crystal = 16000000
' LCD konfigurieren Port auf Ausgabe setzten und Pin's entsprechend zuordnen
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcd = 16 * 4
Config Lcdbus = 4
Config Portd.0 = Output
Portd.0 = 1
Deflcdchar 1 , 8 , 20 , 8 , 32 , 32 , 32 , 32 , 32
Cursor Off
' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von BASCOM durch Software realisiert
Config 1wire = Portd.7
Dim Dsid(24) As Byte
' Die Adresse meines DS1820 die ich vorher ermittelt habe
Dsid(1) = &H10 : Dsid(2) = &H99 : Dsid(3) = &H4E : Dsid(4) = &H71 : Dsid(5) = &H01 : Dsid(6) = &H08 : Dsid(7) = &H00 : Dsid(8) = &H6D
'^= 1
Dsid(9) = &H10 : Dsid(10) = &H3D : Dsid(11) = &H48 : Dsid(12) = &H71 : Dsid(13) = &H01 : Dsid(14) = &H08 : Dsid(15) = &H00 : Dsid(16) = &H71
'^= 2
Dsid(17) = &H10 : Dsid(18) = &H4D : Dsid(19) = &H47 : Dsid(20) = &H71 : Dsid(21) = &H01 : Dsid(22) = &H08 : Dsid(23) = &H00 : Dsid(24) = &H86
'^= 3
Dim Sc(9) As Byte
Dim Sc2(9) As Byte
Dim Sc3(9) As Byte
Dim T As Byte
Dim T2 As Byte
Dim T3 As Byte
Dim H As Long
Dim Flag As Bit
Dim Eram_h As Eram Long
Dim X As Long
H = Eram_h
Dim M As Long
Dim Flag2 As Bit
Dim Eram_m As Eram Long
Dim Y As Long
M = Eram_m
Dim Flag3 As Bit
Dim Flag4 As Bit
Do
Wait 1
' Alle angeschlossenen DS1820 zum Messen veranlassen
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
' Den gewünschten Sensor auswählen
1wverify Dsid(1)
' Kommando READ SCRATCHPAD
1wwrite &HBE
Sc(1) = 1wread(9)
If Sc(9) = Crc8(sc(1) , 8) Then
T = Sc(1)
If Sc(2) > 0 Then
T = 256 - T
End If
T = T / 2
Locate 1 , 1
Lcd "T:"
If Sc(2) > 0 Then Lcd "-";
Lcd T;
If Sc(1).0 = 1 Then
Lcd ".5" ; Chr(1) ; " / "
Else
Lcd ".0" ; Chr(1) ; " / "
End If
End If
Waitms 1
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
' Den gewünschten Sensor auswählen
1wverify Dsid(9)
' Kommando READ SCRATCHPAD
1wwrite &HBE
Sc2(1) = 1wread(9)
If Sc2(9) = Crc8(sc2(1) , 8) Then
T2 = Sc2(1)
If Sc2(2) > 0 Then
T2 = 256 - T2
End If
T2 = T2 / 2
Locate 1 , 11
If Sc2(2) > 0 Then Lcd "-";
Lcd T2 ;
If Sc2(1).0 = 1 Then
Lcd ".5" ; Chr(1)
Else
Lcd ".0" ; Chr(1)
End If
End If
' Ausgabe alle 0,75 Sekunden
Waitms 1
If T > H Then Set Flag
If Flag = 1 Then
If Sc(1).0 = 1 Then
X = T + 1
Else
X = T
End If
Eram_h = X
H = Eram_h
Reset Flag
End If
If T2 > H Then Set Flag
If Flag = 1 Then
If Sc2(1).0 = 1 Then
X = T2 + 1
Else
X = T2
End If
Eram_h = X
H = Eram_h
Reset Flag
End If
If Sc(2) > 0 Then
If T > M Then
Set Flag2
If Flag2 = 1 Then
Y = T
Eram_m = Y
M = Eram_m
Reset Flag2
End If
End If
End If
If Sc2(2) > 0 Then
If T2 > M Then
Set Flag4
If Flag4 = 1 Then
Y = T2
Eram_m = Y
M = Eram_m
Reset Flag4
End If
End If
End If
Locate 4 , 1
Lcd "max." ; H ; Chr(1)
Locate 4 , 9
Lcd "min.-" ; M ; Chr(1)
Loop
End
Ok, ich gebe auf. Ich sehe keinen Unterschied. Wo wird das runden eigentlich nicht gezeigt, ganz unten bei LCD "max." ...?
Jetzt kannst du noch die Stack- und Framewerte hochsetzen, falls er sich da irgendwie verschluckt. Die sind im Programm nicht angegeben.
Gruß
Rolf
Ja, unten bei max. wird der Wert mit abgeschnittener Kommazahl angezeigt...
Ich probiers mal mit Stack und Framewerten... :mrgreen:
Edit: Probiert - bringt auch nix :-k
Hallo!
Schau Dir nochmal Deine LCD Ausgabe an!
Zähl mal nach und überlege!
Das kann sich doch so wohl nicht ausgehen, oder ?
Mit freundliche Grüßen
Rone
Was soll sich da denn bitte nicht ausgehen können?! :-s
Du meinst "Locate 4 , 9"? Nun, wenn die Minimaltemperatur in den 2-stelligen Bereich gehen sollte, dann würde wohl das °-Zeichen wegfallen... aber was hat das mit meinem Problem zu tun?
Oder meinst Du etwas anderes?
MfG,
Maxxtro