PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DS18S20 Seriennr. am LCD ausgeben?



Maxxtro
21.02.2009, 09:22
Hallo allerseits!

Wollte mal kurz fragen, ob jemand bereit ist, mir zu sagen wie ich die Seriennummer eines DS18S20 auslese und anschliessend am LCD ausgebe?
Habe bereits die Seite im Wiki hier glesen, aber ich bekomms nicht hin, das ganze dann am LCD auszugeben.

MfG,
Maxxtro

Neutro
21.02.2009, 10:55
Hier ein Link der weiterhilft:
http://mikrocontroller.jacob-pirna.de/1wire_bascom_ds1820.html
Da kannst du ein Beispielprog. zu Ermittlung der Adresse Downloaden.

Ich hoffe das dir das weiterhilft

Gruß

Neutro

for_ro
21.02.2009, 10:56
Hier gibt es so viele Beiträge zum Thema DS18x20, da ist bestimmt etwas dabei.
Wenn du schon etwas versucht hast, dann zeig das doch mal.

Gruß

Rolf

Maxxtro
21.02.2009, 12:12
So, eine der Seriennummern ist jetzt z.B. 10994E710108006D.

Nun ist in einem der Codes auf der von Neutro geposteten Seite die Zeile

' Die Adresse meines DS1820 die ich vorher ermittelt habe
Dsid(1) = &H10 : Dsid(2) = &H68 : Dsid(3) = &H17 : Dsid(4) = &H25 : Dsid(5) = &H01 : Dsid(6) = &H08 : Dsid(7) = &H00 : Dsid(8) = &H98

Die weitere Ansteuerung über diese zugewiesenen Nummern scheint mir logisch; aber wie kommt man auf z.B. &H10 usw? Ich sehe dorten keinen zusammenhang zwischen der Seriennr. und diesen Anweisungen?

MfG

for_ro
21.02.2009, 12:25
So, eine der Seriennummern ist jetzt z.B. 10994E710108006D.

Nun ist in einem der Codes auf der von Neutro geposteten Seite die Zeile
' Die Adresse meines DS1820 die ich vorher ermittelt habe
Dsid(1) = &H10
Dsid(2) = &H68
Dsid(3) = &H17
Dsid(4) = &H25
Dsid(5) = &H01
Dsid(6) = &H08
Dsid(7) = &H00
Dsid(8) = &H98


Na ja, deine ist dann
Dsid(1) = &H10
Dsid(2) = &H99
Dsid(3) = &H4E
Dsid(4) = &H71
Dsid(5) = &H01
Dsid(6) = &H08
Dsid(7) = &H00
Dsid(8) = &H6D

Oder was meinst du?

Maxxtro
21.02.2009, 12:32
Also, ich habe ja jetzt die Seriennummern meiner DS1820s.
Nun möchte ich die ja einzeln ansteuren.

Dazu brauche ich ja die jeweilgen Adressen bzw. Nummern der einzelnen Sensoren?!
Nur wie komme ich an die? Das wollte ich wissen.

Wie kommst Du auf diese nummern? Diese ganzen Dsid(1), Dsid(2),... sind also allesamt nur ein DS1820?
Falls ja, wie schreibe ich dann mehrere in die Liste?

for_ro
21.02.2009, 12:51
Ja, das ist ein einziger Sensor. Da ist der Typ und andere Angaben drin verschlüsselt. Alle 64bit zusammen sind die eindeutige Seriennummer.

Du kannst die Nummern z.B. im EEPROM abspeichern und bei Bedarf wieder von dort einlesen. Das kann vor jeder Messung sein (das braucht etwas Zeit) oder alle beim Start in ein Array ablegen (das braucht etwas SRAM), wie das in dem Beispiel wohl gemacht ist.
Es könnte auch sein, das dort die Nummern alle direkt im Programm angegeben sind, dann hast du dir auch das Einlesen aus dem EEprom gespart.

Gruß

Rolf

for_ro
21.02.2009, 13:17
Im Programm sieht das dann so aus:

Dim Dsid(16) As Byte 'Platz für 2 Sensoren

Dsid(1) = &H10 : Dsid(2) = &H68 : Dsid(3) = &H17 : Dsid(4) = &H25 : Dsid(5) = &H01 : Dsid(6) = &H08 : Dsid(7) = &H00 : Dsid(8) = &H98 'erster Sensor (aus dem Beispiel)
Dsid(9) = &H10 : Dsid(10) = &H99 : Dsid(11) = &H4E : Dsid(12) = &H71 : Dsid(13) = &H01 : Dsid(14) = &H08 : Dsid(15) = &H00 : Dsid(16) = &H6D 'zweiter Sensor (deine Nummer 10994E710108006D)

1wreset
1wwrite Match_rom
1wwrite Dsid(1) , 8 'bzw 1wwrite Dsid(9) , 8 für den zweiten
1wwrite Read_scratchpad

Gruß

Rolf

Maxxtro
21.02.2009, 22:11
Vielen Dank Rolf! Soweit hauts jetzt hin!
Hab nur noch ein Problem mit der Temperatur selber; entweder unter 0° bekomme ich eine 3-stellige Zahl, oder negative temperaturen werden ordentlich angezeigt, aber ab ca. 3° - 0° wird mir nicht mehr z.B. 3,0° sondern 30 angezeigt... :-k

for_ro
21.02.2009, 23:21
Wie sieht dein Programm denn jetzt aus?

gruß

Rolf

Maxxtro
22.02.2009, 10:42
Also entweder:

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 T As Integer
Dim T1 As Integer
Dim I As Byte
Dim Halb As Byte
Dim Halb2 As Byte
Dim Ds1820 As Byte
Dim Ds1820_2 As Byte
Cursor Off


Do
' 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 = Makeint(sc(1) , Sc(2))
' Die Nachkommastelle entfernen
T = T / 2
' Temperatur in ganzen Grad Schritten ausgeben
Locate 1 , 1
Lcd "T1: " ; T ;
End If
' Ausgabe alle 0,75 Sekunden
Waitms 750
'usw... für 3 Sensoren.
Wobei hier dann ab ca. 3° 30 am Display steht, wenn ich mich recht entsinne.

Oder diesen Teil:

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 T As Integer
Dim T1 As Integer
Dim I As Byte
Dim Halb As Byte
Dim Halb2 As Byte
Dim Ds1820 As Byte
Dim Ds1820_2 As Byte
Cursor Off


Do
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 700
1wreset
1wverify Dsid(9)
1wwrite &HBE
Ds1820 = 1wread(9)
Locate 4 , 1
Lcd Ds1820
1wreset
Halb = Ds1820 And 1
Locate 2 , 1
Shift Ds1820 , Right
If Ds1820 > 127 Then
Lcd "-"
Ds1820 = 256 - Ds1820
If Halb = 1 Then Ds1820 = Ds1820 - 1
Else
Lcd " "
End If
Lcd Ds1820 ; ".";
If Halb = 1 Then
Lcd "5"
Else
Lcd "0"
End If
Lcd "C "
Waitms 700
'usw...
Loop


Wobei hier dann im Negativen Bereich eine 3-stellige Zahl und keine negatvie Temperatur raus kommt... :-k

Edit: http://s11.directupload.net/images/090222/bczymorr.jpg
"T1" ist jetzt mal zu vernachlässigen und mit 1. Code gschrieben.
Die "Temperatur" in der zweiten Zeile ist die, die ich mit dem 2. Code programmiert habe (sie ist negativ!) und der Wert ganz unten ist "Ds1820"
Wenn er jetzt also 256 - Ds1820 rechnen würde, würde wohl auch die richtige Temperatur heraus kommen, nur scheint es mir, als würde er die If-Schleife nicht richtig ausführen; 1. rechnet er anscheinend nicht 256 - Ds1820 und 2. zeigt er auch ein keinster Weise ein "-" an :-k

for_ro
22.02.2009, 11:45
Ich habe dir mal den 1. Code so abgeändert, wie ich denke dass er laufen müsste. Kann ich aber nicht ausprobieren.

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 T As Byte 'kein Integer mehr
Dim T1 As Integer
Dim I As Byte
Dim Halb As Byte
Dim Halb2 As Byte
Dim Ds1820 As Byte
Dim Ds1820_2 As Byte
Cursor Off

Do
' 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
Print "-";
T = 256 - T
End If
T = T / 2
locate 1,1
If Sc(2) > 0 Then lcd "-";
lcd T ;
If Sc(1).0 = 1 Then
lcd ".5°C"
Else
lcd ".0°C"
End If
End If
' Ausgabe alle 0,75 Sekunden
Waitms 750
'usw... für 3 Sensoren.
loop


Probier es mal aus.

Maxxtro
22.02.2009, 12:24
Funktioniet leider (gar) nicht :-k

MfG

for_ro
22.02.2009, 14:00
Funktioniet leider (gar) nicht :-k

MfG
Also keine Ausgabe auf dem Display?
Wie sieht denn dein Code drumherum aus, dein 1. Beispiel ist ja bestimmt nicht komplett.
Ich habe nur die Zeilen ersetzt, die T berechnen. Den Rest musst du wieder dabei tun.
Durch die 1wire Befehle kann man das schlecht durch den Simulator laufen lassen. Ich muss die dann alle durch Pseudobefehle ersetzen.

Gruß

Rolf

Maxxtro
22.02.2009, 14:13
Nein, keine Ausgabe auf dem Display...

$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 'bloß für meine displaybeleuchtung
Portd.0 = 1


' 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 T As Integer
Dim T1 As Integer
Dim I As Byte
Dim Halb As Byte
Dim Halb2 As Byte
Dim Ds1820 As Byte
Dim Ds1820_2 As Byte
Cursor Off


Do

' 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(1)
If Sc(9) = Crc8(sc(1) , 8) Then
T = Sc(1)
If Sc(2) > 0 Then
Lcd "-";
T = 256 - T
End If
T = T / 2
Locate 1 , 1
If Sc(2) > 0 Then Lcd "-";
Lcd T ;
If Sc(1).0 = 1 Then
Lcd ".5°C"
Else
Lcd ".0°C"
End If
End If
' Ausgabe alle 0,75 Sekunden
Waitms 750


1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
1wreset
1wverify Dsid(9)
1wwrite &HBE
Ds1820 = 1wread(9)
Locate 4 , 1
Lcd Ds1820
1wreset
Halb = Ds1820 And 1
Shift Ds1820 , Right

If Ds1820 > 127 Then
Ds1820_2 = 256 - Ds1820
Else
Ds1820_2 = Ds1820
End If

If Halb = 1 Then
Ds1820_2 = Ds1820_2 - 1
End If

Locate 3 , 1
Lcd Ds1820_2 ; ".";

If Halb = 1 Then
Lcd "5"
Else
Lcd "0"
End If
Lcd "C "
Waitms 700

Loop


End

Mit dem 2. Teil des Codes habe ich wie gesagt das Problem unter 0°, aber wenigstens ne Anzeige... :-k

for_ro
22.02.2009, 14:29
Wiese steht denn beim ersten Sensor
Sc(1) = 1wread(1)
da muss wie unten auch
Sc(1) = 1wread(9)

sonst liest der keine CRC ein und die Abfrage geht schief.

Gruß

Rolf

Maxxtro
22.02.2009, 14:49
Gute Frage... wahrscheinlich dachte ich bei dem 9er unten dass oben wegen dem 1. Sensor ein 1er hin muss :-b

Nun, jetzt funktionierts! Sowohl im + als auch im - Bereich bekomme ich ne vernünftige Temperatur angezeigt! Danke! Mal schaun wie weit ich jetzt allein komme :mrgreen:

MfG

Maxxtro
23.02.2009, 18:55
So, noch mal ned Frage zur Temperatrumessung ](*,)


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

Diese beiden Dinger waren zum feststellen und speichern von Höchstwerten; passt so weit auch. (Je ein Abschnitt für einen Sensor)
Jetzt habe ich bei beiden
"If Sc2(1).0 = 1 Then
X = T2 + 1
Else
X = T2
End If"
eingefügt, um bei ,5° aufzurunden.

Komischer weise funktioniert das bei Sensor 2 bzw. T2, nicht aber bei Sensor 1! Beim ersten wird der höchstwert zwar nach wie vor gespeichert, aber nicht aufgerundet.
Woran liegt das, wo beide male doch genau das selbe passiert (passieren soll)?

for_ro
24.02.2009, 19:17
Ist denn die Temperatur an Sensor T sicher größer als H?
Ansonsten ist dein Flag nicht gesetzt und die Änderung von T wird nicht durchgeführt.
Wie oft führt er diesen Teil eigentlich aus? Da ist ein Befehl drin, der nach EEProm schreiben aussieht. Das sollte sicherlich nicht jede Sekunde stattfinden, selbst bei einer Minute ist das EEProm nach 2 Monaten nicht mehr beschreibbar.

Gruß

Rolf

Maxxtro
24.02.2009, 19:40
Der Befehl wird so zu sagen "jede Sekunde" ausgeführt und er schreibt in den EEPROM, allerdings nur, wenn die Temperatur größer als alle Temperaturen zuvor ist! Und das sollte ja nicht all zu oft vorkommen O:)
Und gelesen wird der Wert im EEPROM bei jedem einschalten, das sollte okay sein, oder? :-k

Aber T ist größer als H; das erkennen und speichern der Höchstwerte funktioniert ja sowieso, aber das mit ,5° haut nicht hin!
Es wird bei ,5° also das ,5 einfach abgeschnitten und der Wert nicht aufgrundet!
Mit T2 funktioniert das ja ganz genau so und ohne Probleme?!

for_ro
24.02.2009, 20:07
Aber T ist größer als H; das erkennen und speichern der Höchstwerte funktioniert ja sowieso, aber das mit ,5° haut nicht hin!

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.

Gruß

Rolf

Maxxtro
24.02.2009, 20:13
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-[

for_ro
24.02.2009, 20:22
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!

Maxxtro
24.02.2009, 20:25
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

for_ro
24.02.2009, 20:52
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

Maxxtro
24.02.2009, 20:59
$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

for_ro
24.02.2009, 21:31
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

Maxxtro
24.02.2009, 21:36
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

Rone
25.02.2009, 12:05
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

Maxxtro
25.02.2009, 12:22
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

Maxxtro
26.02.2009, 13:53
So, Problem gelöst indem ich eine extra Flag und extra Variablen für T2 benutze...

Neues Problem:
If Sc(2) > 0 Then
If T > M Then Set Flag3
If Flag3 = 1 Then
If Sc(1).0 = 1 Then
X = T + 1
Else
X = T
End If
Eram_m = X
M = Eram_m
Reset Flag3
End If
End If

Das wäre das gleiche, nur diesmal für den negativen Bereich; wieder gleiches Problem ](*,)
Variablen alle nur einmal vergeben; restlicher Code bis eben auf die hinzugefügten Variablen der gleiche!