Hallo,
ich möchte den maximalen und minimalen Temperaturwert speichern.
Als Sensor benutze ich den LM92.
Ich erhalte im pos. und im neg. Temp.-bereich jeweils pos. Daten-Werte.
Zusätzlich dazu das Vorzeichen.
im Temp.-bereich von 0°C bis + 100°C geht das auch problemlos.
Im Temp.-bereich von 0°C bis - 50°C funktioniert es teilweise.
Kommt man vom pos. Temp.-Bereich nach minus werden die min. Werte richtig angezeigt, der minimalste Wert (z.B. -28,5 °C) wird gespeichert.
Beim max. Wert funktioniert es nur solang, wie die aktuelle Temp kleiner wie der max. Wert ist (z.B +21,3°C).
Dann wird als max. Wert die minimalste Temp. übernommen.
Ich brauche bitte Unterstützung bei dieser Sache.
Danke
Anbei der Code-Auschnitt.
Gruß
Dago
Alles anzeigen
ich möchte den maximalen und minimalen Temperaturwert speichern.
Als Sensor benutze ich den LM92.
Ich erhalte im pos. und im neg. Temp.-bereich jeweils pos. Daten-Werte.
Zusätzlich dazu das Vorzeichen.
im Temp.-bereich von 0°C bis + 100°C geht das auch problemlos.
Im Temp.-bereich von 0°C bis - 50°C funktioniert es teilweise.
Kommt man vom pos. Temp.-Bereich nach minus werden die min. Werte richtig angezeigt, der minimalste Wert (z.B. -28,5 °C) wird gespeichert.
Beim max. Wert funktioniert es nur solang, wie die aktuelle Temp kleiner wie der max. Wert ist (z.B +21,3°C).
Dann wird als max. Wert die minimalste Temp. übernommen.
Ich brauche bitte Unterstützung bei dieser Sache.
Danke
Anbei der Code-Auschnitt.
Gruß
Dago
BASCOM-Quellcode
- Dim Lm92tempint As Word 'Temperaturwert als High- und Lowbyte zusammengefasst in richtiger Reihenfolge
- Dim Lm92tempbytehi As Byte at Lm92tempint + 1 Overlay 'LM92 Highbyte in Variable Lm92tempint
- Dim Lm92tempbytelo As Byte at Lm92tempint Overlay 'LM92 Lowbyte in Variable Lm92tempint
- Dim Lm92temprs232 As Word
- Dim Lm92temprs232_S As byte
- Dim Lm92temperature As Single 'Temperaturwert dezimal
- Temp_lesen:
- Lm92tempint = 0
- I2cstart 'I²C Bus starten
- I2cwbyte Lm92addr 'Temperatur-Sensor ansprechen
- I2crbyte Lm92tempbytehi , Ack 'Highbyte auslesen
- I2crbyte Lm92tempbytelo , Nack 'Lowbyte auslesen
- I2cstop 'I²C Bus anhalten
- waitms 500
- Lm92temprs232 = Lm92tempint
- Lm92tempsign = Lm92tempbytehi And 128
- If Lm92tempsign = 128 Then 'wenn im Highbyte bit 8 (128), minus Temp.-Werte, gesetzt dann
- Lm92tempint = Not Lm92tempint 'binären Temp.-Wert invertieren
- Lm92tempint = Lm92tempint + 1 'invertierten Temp.-Wert +1 -> positve Zahlenwerte
- Locate 2,5
- LCD "-" 'Minus-Zeichen ausgeben
- 'Lm92tempsign_plus = 0
- Lm92tempsign_minus = 1
- 'Flag_minus_min = 1
- Else 'wenn nicht, dann
- Locate 2,5
- LCD "+" 'Plus-Zeichen ausgeben
- Lm92tempsign_plus = 1
- 'Lm92tempsign_minus = 0
- 'Flag_plus_min = 1
- End If
- '--------------------------------------------------------------
- if Lm92tempsign_minus = 1 then
- 'if Flag_minus_min = 1
- if Lm92tempint_min < Lm92tempint then
- Lm92tempint_min = Lm92tempint
- 'Flag_minus_min = 1
- end if
- 'end if
- goto 1
- end if
- if Lm92tempsign_plus = 1 then
- 'if Flag_plus_min = 1
- if Lm92tempint_min > Lm92tempint then
- Lm92tempint_min = Lm92tempint
- end if
- 'end if
- goto 1
- end if
- 1:
- if Lm92tempsign_minus = 1 then
- 'if Flag_minus_min = 1
- if Lm92tempint_max > Lm92tempint then
- Lm92tempint_max = Lm92tempint
- 'Flag_minus_min = 1
- end if
- 'end if
- goto 2
- end if
- if Lm92tempsign_plus = 1 then
- 'if Flag_plus_min = 1
- if Lm92tempint_max < Lm92tempint then
- Lm92tempint_max = Lm92tempint
- end if
- 'end if
- goto 2
- end if
- 2:
- Shift Lm92tempint , Right , 3 'schiebe die 16 Bit um 3 bit nach rechts
- Lm92temperature = Lm92tempint * Lm92resolution 'binaeren Temperaturwert mit Aufloesung multiplizieren
- Return
- Temp_max:
- 'Lm92tempint_max1 = Lm92tempint_max
- if Lm92tempsign_minus = 1 then
- Locate 2,5
- LCD "-"
- Lm92tempint_max1 = Lm92tempint_max
- end if
- if Lm92tempsign_plus = 1 then
- Locate 2,5
- LCD "+"
- Lm92tempint_max1 = Lm92tempint_max
- end if
- Shift Lm92tempint_max1 , Right , 3 'schiebe die 16 Bit um 3 bit nach rechts
- Lm92temperature_max1 = Lm92tempint_max1 * Lm92resolution 'binaeren Temperaturwert mit Aufloesung multiplizieren
- Lm92tempint_max1 = 0
- locate 2,1
- lcd "max"
- Locate 2 , 10
- Lcd Chr(1) ; "C"
- locate 2,6
- Lcd = Fusing(Lm92temperature_max1 , "##.#")
- If Lm92temperature_max1 < 9.95 Then
- Locate 2 , 7
- Lcd = Fusing(Lm92temperature_max1 , "##.#")
- Locate 2 , 6
- Lcd " "
- end if
- waitms 2000
- return
- Temp_min:
- 'Lm92tempint_min1 = Lm92tempint_min
- if Lm92tempsign_minus = 1 then
- Locate 2,5
- LCD "-" 'Minus-Zeichen ausgeben
- Lm92tempint_min1 = Lm92tempint_min
- Else 'wenn nicht, dann
- Locate 2,5
- LCD "+" 'Plus-Zeichen ausgeben
- Lm92tempint_min1 = Lm92tempint_min
- End If
- Shift Lm92tempint_min1 , Right , 3 'schiebe die 16 Bit um 3 bit nach rechts
- Lm92temperature_min1 = Lm92tempint_min1 * Lm92resolution 'binaeren Temperaturwert mit Aufloesung multiplizieren
- Lm92tempint_min1 = 0
- locate 2,1
- lcd "min"
- Locate 2 , 10
- Lcd Chr(1) ; "C"
- locate 2,6
- Lcd = Fusing(Lm92temperature_min1 , "##.#")
- If Lm92temperature_min1 < 9.95 Then
- Locate 2 , 7
- Lcd = Fusing(Lm92temperature_min1 , "##.#")
- Locate 2 , 6
- Lcd " "
- end if
- waitms 2000
- return