Hallo! Ich habe einen DS18S20 der leider irgendwie nur 255 returned (bei allen Werten, also jedes Byte), egal ob V++ / GND angeschlossen sind, ob im Parasite-Mode und erst recht ganz egal wieviele Sleeps ich einbaue. Programmiere in Bascom. Wäre für Ideen und Vorschläge dankbar!
Ohne weitere Details wird dir keiner helfen können. Was für einen Controller nutzt du? Wie sehen Schaltung und Quelltext aus?
Hallo Daniel, 255 ist in Bascom das Ergebniss wenn es kein Ergebniss gibt. Also auch wenn er nicht angeschlossen ist, gibt 1wread() 255 aus. Mein Funktionierender Code auf AVR, die beiden routinen werden im Abstand von einer Sekunde aufgerufen: Messen: Config 1wire = Porta.1 1wreset Disable Interrupts 'wirklich noetig(?) 1wwrite &HCC 'Adresse ueberspringen da nur ein Sensor Waitms 1 1wwrite &H44 'Temp messen Enable Interrupts Read_state = 1 Return Auslesen: Config 1wire = Porta.temp2 Disable Interrupts 1wreset 1wwrite &HCC 1wwrite &HBE 'Temperatur soll ausgelesen werden Scratch_1(1) = 1wread(8) 'Auslesen von 8 Byte 1wreset Enable Interrupts Temperatur = Scratch_1(1) 'Positiver Tempwert Read_state = 0 Return Es haengt nur ein Sensor dran, am Pin, also keine Adressierung. HTH, bye Uwe
meiner funktioniert garantiert auch, werden im Abstand von 500ms aufgerufen, erst reset um die Messung auszulösen, dann 500ms später, Daten abholen und umrechnen, so ergibt zB. 32°C den Wert 320. Es werden 3 Leitungen abgefragt, kann auch auf eine begrenzt werden. Der Grund für 3 war, kein Mensch kann bei 6 Sensoren (2x3) wissen, welcher jetzt diese ganz spezielle 64Bit SerNr hat, bei 3 Leitungen/ Pins weiß ichs. Der Ursprüngliche Code stammt nicht von mir, sondern ist von hier ausm Forum. Sub 1wire_reset ' 1Wire RESET For Ch = 1 To 3 A = Ch - 1 1wreset PinD , Ch 1wwrite &HCC , 1 , PinD , A 1wwrite &H44 , 1 , PinD , A Next End Sub '****************************************************** Sub 1wire_read ' DS1820 readout For Ch = 1 To 3 A = Ch - 1 1wreset PinD , A 1wwrite &HCC , 1 , PinD , A 1wwrite &HBE , 1 , PinD , A Ds_read(1) = 1wread(9 , PinD , A ) 1wreset PinD , A If Flag.2 = 1 Then ' nur beim Regeln alte Werte speichern Lasttemp(ch) = Currenttemp(ch) End If Ds_temp1 = Ds_read(1) And 1 If Ds_temp1 = 1 Then Decr Ds_read(1) Ds_temp1 = Makeint(ds_read(1) , Ds_read(2)) Ds_temp1 = Ds_temp1 * 50 Ds_temp1 = Ds_temp1 - 25 Ds_temp2 = Ds_read(8) - Ds_read(7) Ds_temp2 = Ds_temp2 * 100 Ds_temp2 = Ds_temp2 / Ds_read(8) Ds_temp1 = Ds_temp1 + Ds_temp2 Currenttemp(ch) = Ds_temp1 / 10 Next End Sub '******************************************************
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.