ich lese einen Ds1820 aus, bekomme aber eine falsche ausgabe (statt zb.: 13,5 C bekomme ich 135 C) wie kann ich die zahl trennen über Fusing habe ich es schon probiert das will bascom aber nicht! ich denke es liegt daran das ich "T" as Integer definiert habe! was kann ich da machen? Quellcode: ------------------------------------------------------------------------ -- $regfile = "m8def.dat" $crystal = 3686411 Ddrd = &HFF Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2 Config Lcd = 16 * 2 Config 1wire = Portc.5 Dim Dsid(8) As Byte Dsid(1) = &H10 : Dsid(2) = &H68 : Dsid(3) = &H17 : Dsid(4) = &H25 : Dsid(5) = &H01 : Dsid(6) = &H08 : Dsid(7) = &H00 : Dsid(8) = &H98 Dim Sc(9) As Byte -------------------------->Dim T As Integer Dim T1 As Integer Dim I As Byte Cls Cursor Off Locate 1 , 1 : Lcd "Mein Termometer" Do 1wreset 1wwrite &HCC 1wwrite &H44 Waitus 200 1wverify Dsid(1) 1wwrite &HBE Sc(1) = 1wread(9) If Sc(9) = Crc8(sc(1) , 8) Then I = Sc(1) And 1 If I = 1 Then Decr Sc(1) T = Makeint(sc(1) , Sc(2)) T = T * 50 T = T - 25 T1 = Sc(8) - Sc(7) T1 = T1 * 100 T1 = T1 / Sc(8) T = T + T1 T = T / 10 Locate 2 , 1 --------------------------------> Lcd T ; " Grad" Else Locate 2 , 1 For I = 1 To 8 Lcd Hex(sc(i)) Next End If Waitms 500 Loop End ------------------------------------------------------------------
Probiere mal so und nehm gleich ein Gradzeichen rein: Deflcdchar 1 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 ... Dim Temp As Single ... Do 1wreset 1wwrite &HCC 1wwrite &H44 Waitus 200 1wverify Dsid(1) 1wwrite &HBE Sc(1) = 1wread(9) If Sc(9) = Crc8(sc(1) , 8) Then I = Sc(1) And 1 If I = 1 Then Decr Sc(1) T = Makeint(sc(1) , Sc(2)) T = T / 2 T1 = Sc(8) - Sc(7) T1 = T1 / Sc(8) Temp = T + T1 'Temp = Temp - 0.25 Locate 2 , 1 Lcd " Temp.: " ; Fusing(Temp , "##.#") ; Chr(1) ; "C " Else
Ich versteh grad garnicht, was du da alles rumrechnest. Eigentlich reicht das auslesen von Sc(1) und Sc(2) und das ganze dann durch die Genauigkeit teilen: Answer(1) = 1wread(9) T = Makeint(Answer(1) , Answer(2)) Temp = T / 16 Print Fusing(Temp , "#.##") Bei mir heisst Sc() halt Answer() und ich habe einen DS18b20. Deswegen "T / 16", beim normalen DS1820 müsste es "T / 2" sein. Gruß Dominique Görsch PS: Answer ist Byte, T ist Integer, Temp ist Single
mit str(variable) wandelst du die variable in einen String um mit len(variable) kannst du dir die Zeichenlänge des strings ausgeben lassen mit mid(variable, sartposition, anzahl der Zeichen) kannst du ausschneiden mit instr(variable, xx) kannst du nach nen bestimmten zeichen suchen und dessen position wiedergebn lassen Schaun danach mal in der bascom hilfe nach! gruss axel
@dgoersch: Cooool39 benutzt den DS18S20. Ist ein etwas größerer Aufwand, um die höhere Auflösung zu bekommen. Und er vermeidet (klevererweise) Flieskommarechnung. @Cooool39: temp$=str(T):format(temp$,"0.0"):lcd temp$
das war nicht mein Quellcode, den habe ich nur gefunden und umgeschrieben! und ich benutze den Code mit einen DS1820. kann mir jemand sagen wie der code für einen DS18b20 aussehen würde?
Christian M. wrote:
> kann mir jemand sagen wie der code für einen DS18b20 aussehen würde?
Genau dafür hab ich doch den Code gepostet ;)
"Deswegen "T / 16", beim normalen DS1820 müsste es "T / 2" sein. " Wieso das denn ? Wer kann mir das erklären, ich habe bisher beim 1820 wie beim 18b20 benutzt; ohne Probleme. Was habe ich da übersehen ? Dietmar
Wenn ich das richtig sehe, hat der DS18b20 eine höhere Auflösung, nämlich 9, 10, 11 und 12 Bit, der DS18s20 bietet lediglich 9-Bit an. Möglicher Weise verwendest du beide einfach im 9-Bit Modus und brauchst deswegen den Code nicht anpassen.
ja stimmt.. letztlich eh egal weil: ±0.5°C Accuracy from -10°C to +85°C es sei denn man hat spaß an wild hüpfenden stellen hinter dem komma ;-)
@dgoersch Im Datenblatt zum DS18B20 hab ich nichts über einen 9-Bit-Modus gelesen. Kannst Du das bitte genauer erklären? @jasmin Auch wenn der Sensor "nur" eine Genauigkeit von 0.5°C hat, muß die binäre vierte Nachkommastelle noch lange nicht hüpfen. Ich nutze die höhere Auflösung der Sensoren, um Temperaturtrends zu erkennen.
screwdriver wrote: > Im Datenblatt zum DS18B20 hab ich nichts über einen 9-Bit-Modus gelesen. > Kannst Du das bitte genauer erklären? Nein sorry, ich habe auch nur in die "Parametric Search"[1] geschaut, dort steht der DS18b20 mit 9-12 Bit Auflösung drin. Gruß Dominique Görsch [1]http://para.maxim-ic.com/en/search.mvp?fam=temp_sens&374=1-Wire&374=1-Wire%20Non-Network&tree=master
der gefällt mir sehr gut: Answer(1) = 1wread(9) T = Makeint(Answer(1) , Answer(2)) Temp = T / 16 Print Fusing(Temp , "#.##") und wie sieht es mit der Nachkomma-Stelle aus? kann mir jemand das noch veraten?
@screwdriver stimmt zur Trendanzeige sehr nützlich wenn der Asolutwert nicht interessiert. Aber Vorsicht, man kann sich auch dicke Weiber schönsaufen !
Aktuell passend... Dicke Mädchen haben schöne Namen. Heißen Tosca, Rosa, oder Carmen Dicke Mädchen machen mich verrückt Dicke Mädchen hat der Himmel geschickt! Gruß Dominique Görsch PS: http://www.youtube.com/watch?v=uYNV2_Fylg8
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.