Der MAX31820 wird ja ausdrücklich als software-kompatibel zum DS18B20 beworben, nach meiner Erfahrung stimmt das zumindest für den MAX31820PAR nicht (dass er nur für 3.0 bis 3.7 Volt spezifiziert ist, ist klar). Der MAX31820 ist für 3-Pin-Anschluss gedacht, der MAX31820PAR für 2-Pin parasitic-power.
Ich bekomme bei einem MAX31820PAR in parasitic-power Anschluss sowohl an einem Raspberry Pi mit RaspiOS Trixie, ESP32 und ESP32-C3 (letztere mit Micropython) immer nur die Ausgabe 127.9375 Grad, ich habe auch den pullup-Widerstand mal verkleinert. Der MAX stammt von Mouser, alle 5 Exemplare haben das selbe Verhalten.
ich habe auch den pullup-Widerstand mal verkleinert.
Niedrig genug?
However, when the device is performing temperature conversions or copying data from the scratchpad memory to EEPROM, the operating current can be as high as 1.5mA. This current can cause an unacceptable voltage drop across the weak 1-Wire pullup resistor and is more current than can be supplied by C PP . To ensure that the device has sufficient supply current, it is necessary to provide a strong pullup on the 1-Wire bus whenever temperature conversions are taking place, or data is being copied from the scratchpad to EEPROM. This can be accomplished by using a MOSFET to pull the bus directly to the rail, as shown in Figure 1. The 1-Wire bus must be switched to the strong pullup within 10μs (max) after a Convert T [44h] or Copy Scratchpad [48h] command is issued, and the bus must be held high by the pullup for the duration of the conversion (t CONV ) or data transfer (t WR = 10ms). No other activity can take place on the 1-Wire bus while the pullup is enabled.
Also nach Command den Ausgang mit Totempole auf High (nicht einfach nur open collector sperren)
Vor dem Auslesen dann wieder zurück.
Nur so als erster Gedanke, habe so'n Ding hier nicht zur Verfügung.
Mein Post war eigentlich eher als Warnung gedacht.
Ah, war nicht ganz ersichtlich. Bedeutet dass nun, die Dinger sind ab Werk kaputt? Oder gefälscht? Falls du einen dieser neumodischen Kurvenschreiber (da reicht ja wohl Ein-Kanal ;-) ) dein Eigen nennst, wie sieht denn der Pegelverlauf auf dem Draht aus?
Das die kaputt oder gefälscht sind glaube ich eher nicht, die sind von Mouser. Ich denke eher, dass die Routinen beim Raspi oder Micropython einfach nicht passend für den MAX31820(PAR) sind.
Vielleicht liest ja jemand mit, der den MAX31820 schon ausprobiert hat.
Ich jedenfalls werde zum Original DS18B20 zurückkehren (habe auch ein paar "chinesische" gehabt, hatte aber Glück).
Ich denke eher, dass die Routinen beim Raspi oder Micropython einfach
nicht passend für den MAX31820(PAR) sind.
Daß der Raspi von sich aus keinen 'Strong-Pullup', wie im Datenblatt Fig.1 und Fig.5 gefordert ist, kann sollte sich langsam rumgeschwiegen haben.
DS18x20 funktionieren meist auch ohne den und die dürften die Hauptanwendung beim Pi und µPython-Anwendungen sein.
Du mußt wohl einen Transistor dazu bauen und die Routinen anpassen.
Ich habe mich jetzt mal doch aufgerafft und einen Aufbau mit beiden ICs gemacht.
Das Verhalten des MAX18B20PAR ist schon auffällig, auch die Sekunde mit dem mittleren Pegel nach der Messung mit read_temp().
Pullup war 4k7, also habe ich nochmal niedrigere Pullups probiert.
Bis runter zu 1k2 gab es immer die Ausgabe 127.9375 Grad,
bei 1k0 war der Kippunkt, mal 127.9375, mal die korrekte Temperatur,
unter 1k (680R bzw 820R) gab es immer die richtige Temperatur.
-->> Ein niedriger Pullup unter 1k muss rein. Es lebe das Oszi!
Damit liegst Du schon sehr nahe an den maximalen 4mA Sink-Current und
hast eine unnötig hohe Eigenerwärmung die Dir die Messergebnisse
versaut.
Danke für den Hinweis, werde ich demnächst beobachten, habe den ganzen Kram gerade wieder abgebaut.
Die Lösung mit dem MOSFET im Datenblatt des PAR ist halt für Raspis nicht umsetzbar, das Timing macht die im RaspiOS eingebaute Routine. Für die ESP wäre es denkbar, wenn man eine eigene Routine dafür schreibt.
Edit:
Wenn ich mir das Bild DS1Z_QuickPrint3.png ansehe, dann ist das evtl nur die eine Sekunde NACH der Messung relevant, für die Messung selbst wohl nicht.
und hast eine unnötig hohe Eigenerwärmung die Dir die Messergebnisse
versaut.
Die entsteht aber im Widerstand, nicht im Sensor. Der nimmt sich nur was er braucht und lädt seinen kleinen Ko auf. Seltsam finde ich allerdings, dass im Datenblatt mehrmals von 4.7kΩ gesprochen wird. Vielleicht ist ja die vorgefertigte Implementierung der Ansteuerung, hmmm, sagen wir mal grenzwertig schlecht und hält sich so gar nicht an das im Datenblatt vorgegebene Timing. Ansonsten kann ich mir die Diskrepanz von <1kΩ zu 4.7kΩ nicht erklären.