Jetzt hab ich auch eine Temperatur.
Habe das Beispiel von for_ro genommen und einfach nur meine Daten eingegeben.
Ich bräuchte aber die Temperatur in 0.1 Schritten !
Jetzt hab ich auch eine Temperatur.
Habe das Beispiel von for_ro genommen und einfach nur meine Daten eingegeben.
Ich bräuchte aber die Temperatur in 0.1 Schritten !
Nimm einfach das Beispiel von Gestern auf dieser Seite das mir for_ro geschickt hat.
Ganz am Schluß sind IDs, die du gegen deine austauschen mußt.
Allerdings kann ich dir nicht groß weiter helfen wenns nicht gehen sollte.
Ich blicke selbst noch nicht durch und bin immer noch am Grübeln wie er das gemacht hat.
Es funzt aber bis auf eine Kleinigkeit. In der letzten Zeile bei T4 wird
T4= 23 CC angezeigt. Da ist ein C zuviel. Sonst ists wunderbar.
Gruß
Hans
Suche mal hier im Forum "DS1820". Da gibts einige Beispiele mit 1/2 Grad und mit 1/10 Grad. Da mußt du dir den Teil einfach dazukopieren.
Da die Dinger aber nicht so genau sind und es eigentlich auf ein Grad Hin oder her nicht ankommt ist es mir Wurscht.
Hallo,
meine Sache läuft mit 4 Sensoren und 0.1Grad
Was mich nur stört sind die ganzen waitms.
Momentan lasse ich alle 5 sec. die 4 Sensoren hintereinander auslesen und dann wird mir der Wert ausgegeben.
Nur wenn ich die 4 Dinger hintereinander auslese steht mein Programm wegen den waitms so ca. 3 sec und ich kann nichts weiter machen.(Menü durchblättern usw.)
Kann man das nicht anders lösen?
Müssen die ganzen waitms da hin?
Hier mal mein Ausschnitt der auf meinem Steckbrett läuft:
Den Code habe ich hier aus dem Forum, habe das nur mal verdoppelt und vor die neuen Variablen ne 1 vorgehängt.Code:$regfile = "m32def.dat" $crystal = 8000000 Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.4 , Db7 = Portd.3 , E = Portb.7 , Rs = Portb.6 Config Lcd = 16 * 2 Config Lcdbus = 4 Cursor Off Cls Config 1wire = Portc.5 Dim T As Integer Dim T1 As Integer Dim T2 As Integer Dim T3 As Integer Dim T4 As String * 10 Dim T5 As String * 10 Dim T6 As Single Dim T7 As Single Dim Id1(8) As Byte Dim Id2(8) As Byte Dim Ar1(9) As Byte Dim Ar2(9) As Byte Dim I As Byte , Tmp As Byte , Tmp2 As Byte Dim 1t As Integer Dim 1t1 As Integer Dim 1t2 As Integer Dim 1t3 As Integer Dim 1t4 As String * 10 Dim 1t5 As String * 10 Dim 1t6 As Single Dim 1t7 As Single Dim Id3(8) As Byte Dim Id4(8) As Byte Dim 1ar1(9) As Byte Dim 1ar2(9) As Byte Dim 1i As Byte , 1tmp As Byte , 1tmp2 As Byte Id1(1) = 1wsearchfirst() Id2(1) = 1wsearchnext() Id3(1) = 1wsearchnext() Id4(1) = 1wsearchnext() Do 1wreset 1wwrite &H55 1wwrite Id1(1) , 8 1wwrite &H44 Waitms 300 1wreset 1wwrite &H55 1wwrite Id1(1) , 8 1wwrite &HBE Ar1(1) = 1wread(9) 1wreset Tmp = Ar1(1) And 1 If Tmp = 1 Then Decr Ar1(1) T = Makeint(ar1(1) , Ar1(2)) T = T * 50 T = T - 25 T1 = Ar1(8) - Ar1(7) T1 = T1 * 100 T1 = T1 / Ar1(8) T = T + T1 T = T / 10 T6 = T / 10 T4 = Fusing(t6 , "#.#") Waitms 500 1wreset 1wwrite &H55 1wwrite Id2(1) , 8 1wwrite &H44 Waitms 300 1wreset 1wwrite &H55 1wwrite Id2(1) , 8 1wwrite &HBE Ar2(1) = 1wread(9) 1wreset Tmp2 = Ar2(1) And 1 If Tmp2 = 1 Then Decr Ar2(1) T2 = Makeint(ar2(1) , Ar2(2)) T2 = T2 * 50 T2 = T2 - 25 T3 = Ar2(8) - Ar2(7) T3 = T3 * 100 T3 = T3 / Ar2(8) T2 = T2 + T3 T2 = T2 / 10 T7 = T2 / 10 T5 = Fusing(t7 , "#.#") 1wreset 1wwrite &H55 1wwrite Id3(1) , 8 1wwrite &H44 Waitms 300 1wreset 1wwrite &H55 1wwrite Id3(1) , 8 1wwrite &HBE 1ar1(1) = 1wread(9) 1wreset 1tmp = 1ar1(1) And 1 If 1tmp = 1 Then Decr 1ar1(1) 1t = Makeint(1ar1(1) , 1ar1(2)) 1t = 1t * 50 1t = 1t - 25 1t1 = 1ar1(8) - 1ar1(7) 1t1 = 1t1 * 100 1t1 = 1t1 / 1ar1(8) 1t = 1t + 1t1 1t = 1t / 10 1t6 = 1t / 10 1t4 = Fusing(1t6 , "#.#") Waitms 500 1wreset 1wwrite &H55 1wwrite Id4(1) , 8 1wwrite &H44 Waitms 300 1wreset 1wwrite &H55 1wwrite Id4(1) , 8 1wwrite &HBE 1ar2(1) = 1wread(9) 1wreset 1tmp2 = 1ar2(1) And 1 If 1tmp2 = 1 Then Decr 1ar2(1) 1t2 = Makeint(1ar2(1) , 1ar2(2)) 1t2 = 1t2 * 50 1t2 = 1t2 - 25 1t3 = 1ar2(8) - 1ar2(7) 1t3 = 1t3 * 100 1t3 = 1t3 / 1ar2(8) 1t2 = 1t2 + 1t3 1t2 = 1t2 / 10 1t7 = 1t2 / 10 1t5 = Fusing(1t7 , "#.#") Locate 1 , 1 : Lcd "T1:" ; T4 Locate 1 , 10 : Lcd "T2:" ; T5 Locate 2 , 1 : Lcd "T3:" ; 1t4 Locate 2 , 10 : Lcd "T4:" ; 1t5 Waitms 500 Loop
Hallo Papsi,
wie die ganzen Beispiele hier im Forum schon beschreiben, braucht der DS ca. 750ms für die Konvertierung.
Ich habe keine Wartezeit mit in meinem Programm verbaut, ich stoße meine Konvertierung in einem anderem Programmteil an (z.Bsp. in einer Gosub) und arbeite dann in meinem Code weiter bis zu einem späteren Zeitpunkt es zur Temp-verarbeitung kommt.
Da das Programm weiter im Text arbeitet, reicht bei mir die Zeit aus für die Konvertierung und brauche somit keine Wartezeit.
Vielleicht konnte ich Dir mit dem Tip weiter helfen.
Schönen Abend und Gruß aus Istanbul
MAT
Ich würde den Ablauf etwa so machen:
Lass die ganzen Blöcke weg:Code:Config TimerX = Timer , Prescale = 1024 'oder 1, 8, 64, 256 On TimerX Timer_isr 'TimerX durch beliebigen Timer ersetzen Do If Read_temp_counter = YYYY Then 'YYYY so wählen, dass z.B. jede Sekunde einmal ausgeführt wird Read_temp_counter = 0 '.... jetzt alle Befehle zur Temp Berechnung und Anzeige, kein wait End If Loop Timer_isr: ' Prescale * max_counts Incr Read_temp_counter 'wird alle ----------------------- Sekunden um 1 hochgezählt Return ' $crystal 'für einen 8-bit Timer ist max_counts 256, für einen 16-bit Timer ist es 65536
1wreset
1wwrite &H55
1wwrite Id3(1) , 8
1wwrite &H44
und ersetze sie am Ende deiner Ausgabe durch ein
1wreset
1wwrite &HCC
1wwrite &H44
Und versuche mal die ganze Orgie durch eine Schleife zu ersetzen, die die 4 Sensoren nacheinander aufruft. Dann bracuhst du auch die Unmenge an Variablen nicht mehr. Du willst die Werte ja eh nicht abspeichern, oder?
Gruß
Rolf
Hallo,
habe mein "Problem" gelöst.
Läuft auch mit einem Timer.
Ich lasse einfach eine Variable hochzählen und alle 1 sec. lasse ich dann die Befehle ausführen.
Somit ersetzte ich die waitms und habe dadurch keine Wartezeit im Programmablauf.
Somit habe ich so ca. alle 7-8 sec die aktuelle Temperatur pro Sensor.
Das reicht für meine Zwecke locker aus.
Gruß
Papsi
Umso besser, wenn du es selber hinbekommen hast.
Gruß
Rolf
Hat zwar gedauert, bis ich es hinbekommen habe, aber so langsam begreife ich das hier...![]()
Hallo Papsi!
Könntest du Dein Programm hier reinstellen zum abkupfern.
Meins geht zwar auch, aber man könnte sicher noch einiges verbessern.
Danke nochmal an Rolf!
Gruß
Hans
Lesezeichen