DS 18B20 Delay

Ich habe ein bischen gestöbert und bin auf etwas gestossen, das ich von diesem Sensor so vorher nicht wusste: gibt es eine programmblockierende Verzögerung beim auslesen?

Oder hab ich das in den alten Postings falsch verstanden.

Dort wird zum einen OneWire.h und DallasTemperature.h verwendet.

Gibts da was das den Ablauf blockiert oder ist das einfach nur eine Wartezeit intern im Sensor und mein Programm sollte eben auch solange warten bis es Daten anfordert, damit es nicht blockiert.

Aktuell stelle ich noch alles zusammen, daher kein Script.

Hintergrund: ich möchte am Moped ein Display, Spannungsmessung, Temperaturmessung, Griffheizung mit 2 Tasten stufig schalten. Dafür darf eben das Script nicht blockierend sein. Ich hoffe die DS18B20 sind da richtig.

Der Sensor macht eine A/D-Wandlung. Die braucht je nach Auflösung eine gewisse Zeit. Siehe Datenblatt Seite 9:
https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf

Normal wird da einfach ein delay() dafür verwendet um diese Zeit zwischen Anforderung einer Messung und dem Auslesen der Daten einzuhalten. Das wird in requestTemperatures() gemacht. Aber du kannst das mit DallasTemperature auch nicht-blockierend machen. Einfach mal in den Header schauen was da alles an Methoden gibt. Dann fällt dir vielleicht setWaitForConversion() auf.

Aber dann musst du die Zeit zwischen Anforderung und Auslesen per Hand machen! Siehe millis()/BlinkWithoutDelay. Es gibt da auch in der Bibliothek das Beispiel WaitForConversion2 dazu

ok, also verstehe ich das richtig, ich rufe request auf, warte "händisch" meine Zeit ab, hole dann den Messwert ab, verarbeite ihn, mache neuen request und warte wieder (klaro nicht blockierend über millis).

Mir reicht es völlig wenn da alle 5sec eine Messung reinkommt, Wärme ist träge.

Hab leider gerade einen Sensor geschossen, weil man sollte nicht schreiben, löten, Anleitung lesen gleichzeitig und dann übersehen das die Pinbelegung bottom view ist, während man von oben drauf schaut und anlötet. Hab schon gewusst warum ich 5 Sensoren bestelle :slight_smile:

Aber nun läuft zumindest das beispielscript schonmal.

Und weil da immer Pullup Widerstand 4,7k gefordert wird, würde der interne Arduino pullup nicht reichen, hat das schonmal einer getestet?

Mir reicht es völlig wenn da alle 5sec eine Messung reinkommt, Wärme ist träge.

Das ist aber die Zeit zwischen zwei Requests. Das kommt dann noch dazu

Du könntest aber auch zwischen Request und Auslesen 5 Sekunden warten. Und nach dem Lesen direkt einen neuen Request starten. Dann ist zwar die Temperatur 5 Sekunden alt, aber du hast nur eine Zeitabfrage

Und weil da immer Pullup Widerstand 4,7k gefordert wird, würde der interne Arduino pullup nicht reichen, hat das schonmal einer getestet?

Du könntest ins Datenblatt deines Sensors schauen.
Dort findest du das Timing.
Und Strombedarf.

Dann könntest du die Impedanz/Kapazität deiner Verbindungskabel ermitteln.
(Das können bei dem Sensor viele viele Meter sein)

Aus den Daten könntest du die Spannungsverläufe berechnen.
Bildchen malen.
Das Bildchen sagt dir dann ob die Signale interpretierbar sind.

Meine Glaskugel sagt:
Nein, die internen Pullup reichen nicht.

The 1-Wire bus requires an external pullup
resistor of approximately 5kΩ;
quelle

Hi

Der DS18B20 braucht ca. 750ms, wenn Er auf 'maximale Auflösung' steht.
Je Bit weniger halbiert sich die Zeit, Die gewartet werden muß.
Wenn Du den Sensor nicht parasitär betreibst, kannst Du auch 'Anfragen', ob die Wandlung abgeschlossen ist.

MfG

Serenifly:
Das ist aber die Zeit zwischen zwei Requests. Das kommt dann noch dazu

Du könntest aber auch zwischen Request und Auslesen 5 Sekunden warten. Und nach dem Lesen direkt einen neuen Request starten. Dann ist zwar die Temperatur 5 Sekunden alt, aber du hast nur eine Zeitabfrage

Jo, so dachte ich mir das. Also ist es eine interne Zeit im IC, die benötigt wird. Nach dem Lesen gleich request. Danke

@Combie: jo, rechnen kann ich..bzw Excel. Aber wie so oft, manchmal funktionierts doch, obwohl Excel nein sagt. So wie beim Siemens SSR. Datenblatt sagt 15-30V Ansteuerspannung. 10St bestellt alle schalten bei ca 7V durch. Ich habe an meinem Regler einen 12V Ausgang. Dürfte lt Datenblatt nicht gehen, funktioniert aber problemlos. Und ja, es kann sein, das ich mal einen SSR erwische der unsauber schaltet. Deswegen ist ja das Datenblatt auch da. Dann muss ich mir überlegen, obs einmalig ist oder ein neues Design das nicht mehr so tolerant ist.

Und daher dachte ich eben, das bestimmt schon der eine oder andere es mal getestet hat und Erfahrungen drüber. Ich benutze den 3Draht Modus, weil am Moped die höhere Störfestigkeit kein Nachteil ist. Wenn also da jemand scho Erfahrungen gesammelt hat, wäre ich dankbar, spart mir einen Widerstand im Gehäuse. Der Platz wird sowieso schon sau eng dort. Und da ich es vergiessen will, sind nachträgliche Änderungen schwer.

Was hat ein Siemens SSR Datenblatt mit deinen Temperatur Sensoren zu tun?
Etwa soviel wie Nachbars Kuh mit Mozart, oder?

Nee, nee, nee....

weil am Moped die höhere Störfestigkeit kein Nachteil ist.

Aber dann den Widerstand einsparen wollen...
Aus meiner Sicht völlig Widersinnig.

Nee, nee, nee....

Dürfte lt Datenblatt nicht gehen, funktioniert aber problemlos.

Damit endet die Diskussion hier für mich.

Ein Tipp noch zum Abschluss:

Wer sich gerne mit unnützen Problemen herumschlägt, der ignoriert Datenblätter.
Entscheide selber.

Es hätte völlig genügt wenn du gesagt hättest das du keinen Plan hast von den DS18B20 und noch nicht getestet ob sie mit dem Pullup funktionieren.

das du keinen Plan hast von den DS18B20

Eine gewagte Behauptung!
Ich nenne es: Eine Lüge.

und noch nicht getestet ob sie mit dem Pullup funktionieren.

Nein, da hast du recht!
So blöd wäre ich wirklich nicht!
Natürlich folge ich den Empfehlungen des Datenblattes.

wenn es eine Lüge wäre, wäre es dir sicher ein leichtes gewesen, meine Frage zu beantworten. Hast du aber nicht. Das lässt allerdings 2 Schlüsse zu: entweder du weist es nicht(meine erste Vermutung) oder du bist derart arrogant, das du es deswegen nicht beantwortest.

Ich bleibe daher mal bei meiner ersten Vermutung.

Hallo,

na na.

Zwischen µC internen Pullup und dem laut Datenblatt liegt Faktor 10.
Er hat ja 2 Aufgaben. Allgemein für 1 Wire Pullup weil Datapin open drain ist.
Für parasitäre Versorgung kommt noch die Ladefunktion hinzu. Wobei ich kein Freund von parasitärer Versorgung bin.
Was ein zu hochohmiger Pullup bewirken kann solltest du besser wissen wie ich.
Das mag auf dem Steckbrett funktionieren, da funktioniert so vieles, im Moped sicherlich nicht wie gedacht.
Also, du kannst es probieren, darfst dich dann jedoch nicht wundern.

Jo, nachdem ich nichts gefunden habe, das es schonmal jemand so getestet hat, lass ich es auch. Parasitäre Versorgung kommt eh nicht in Frage, das ist mir absolut zu anfällig. Hab es nun an ein 3-Ader Ölflex gelötet, damit ich es sauber verlegen kann.

Hatte halt den ersten Test 3-Draht ohne Widerstand gemacht und es hat funktioniert. Labormässig, mit 5cm Kabel, ohne weitere Störquellen in der Nähe und mit einer sauberen Versorgungsspannung. Bevor ich nun also alle möglichen Scenarien nachstelle und teste, wollte ich wissen, ob schonmal jemand rumgespielt hat und ausserhalb der Specs experimeniert.

Hab noch einige Aufgaben zu meistern, muss noch ein FET einbauen, ein Display wasserdicht verbauen, den Controller selbst, 3,3V erzeugen (geht nicht am Nano wenn er keine USB-Versorgung hat) fürs Display, Spannungsteiler für Bordspannungsmessung. Und das alles in 9x4,5x4cm bei einem 1,5" Display und mehrere Kabeleinführungen und alles im Sichtbereich, also sauberes Design.

Hallo,

vielleicht kennste das schon vielleicht auch nicht. Einflussnahme des Pullups bei I2C. Ähnlichkeiten der Signalbeeinflussung gibts dann wohl auch bei 1 Wire. Hatte Nick einmal anschaulich dargestellt. Gammon Forum : Electronics : Microprocessors : I2C - Two-Wire Peripheral Interface - for Arduino

Ich habe den DS18B20 im Auto verbaut, die Leitung führt dabei durch den Motorraum bis vor an die Frontschürze. Ich habe darauf geachtet, die Sensorleitung nicht an Zünd- oder Batteriekabeln entlang zu legen. Das ganze ging ca. 1 Jahr lang gut, dann hat sich der Sensor verabschiedet, und das sogar in einem weiteren Fall.

Nun habe ich in beiden Fällen einen neuen Sensor verbaut, direkt am Sensor werden Signal- und Versorgungspin des Sensors mit je einer Z-Diode geschützt, außerdem habe ich dort noch einen Kondensator von Versorgungspin nach GND geschaltet. Es funktioniert schon mal, ist nur die Frage, wie lange :slight_smile:

ok, ich teste nunmal die "normale" Schaltung, ich will die Temperatur des Lima-Reglers messen und bin daher relativ nahe an einer Drehstromlichtmaschine, Diodenpaket und Linearregler. Ich werde sehen, welche Störungen ich bekomme, dürfte recht schnell auffallen. Dann werde ich mir Gedanken um Entstörung machen. Kondensator und Ferrite wirken manchmal Wunder.

Aber dafür habe ich meinen EMV-Laboranten, der das tag täglich für Kunden macht.