DS18S20 messen manchmal falsch

Gast #2346870
Lesenswert?

Hallo alle zusammen,
ich lese mit einem Atmega8 5 DS18S20 Temperatursensoren aus und gebe die 
Werte auf einem 4x20 Zeichen Display aus bzw. schicke sie per UART zum 
PC/LabView (Pull-Up 4,3 kOhm, parasitäre Versorgung).
Das Problem: Hin und wieder misst mindestens einer der Sensoren einen 
falschen Wert mit Abweichungen nach oben und unten (von +55 bis -80 
obwohl T=20).
Woran kann das liegen? Die meiste Zeit geht ja alles.
Ich mache die Pausen zur 1-wire Kommunikation über _delay_us(); kann das 
ein Problem sein? Sind die Pausen zu ungenau und sollte ich es mit einem 
Timer lösen? Danke schonmal für die Hilfe. Wenn Code gebraucht wird 
reiche ich den gerne nach (ist etwas viel)!
Viele Grüße
Thomas
Gast #2348571
Lesenswert?

Bei der Temperaturmessung mit Parasitäre Stromversorgung muss über einen 
seperaten Ausgang ein Transistor oder FET geschaltet den s.g.STRONG 
PULLUP ON DQ. siehe Anhang und mind. 750ms gehalten werden.

Dabei ist zu beachten das erst nach 750ms die Sensoren ausgelesen werden 
können ansonsten gibt es Fehler.

Ob es dir hilft keine Ahnung!
Angehängte Dateien:
Gast #2351705
Lesenswert?

Hallo,
danke für die Antworten! Die CRC wird nicht kontrolliert, da ich 
Probleme habe sie zu generieren. Wenn da jemand schon etwas programmiert 
hat und es posten könnte, wäre ich dankbar dafür!
Mir ist die Sache mit dem Strong-Pull- Up (warum auch immer) im 
Datenblatt nicht aufegfallen. Ich werde das auf jeden Fall probieren, 
sobald ich mir einen entsprechende Transistor besorgt habe!
Moderator (Firma: Titel) Persönliche Seite #2351720
Lesenswert?

Daywalker schrieb:
> ich lese mit einem Atmega8 5 DS18S20 Temperatursensoren aus
Wie lange sind die Leitungen?
Kann da was einkoppeln?

Daywalker schrieb:
>>> DS18S20 messen manchmal falsch
> Die CRC wird nicht kontrolliert
Das ist so wie:
Warum verhalten sich andere Autofahrer mir gegenüber so rücksichslos?
Übrigens: in meinem Auto sind alle Lampen (Blinker, Bremse,...) kaputt, 
ich ersetze sie aber nicht, weil ich nicht drankomme.
#2351864
Lesenswert?

Daywalker schrieb:

> Datenblatt nicht aufegfallen. Ich werde das auf jeden Fall probieren,
> sobald ich mir einen entsprechende Transistor besorgt habe!

Das Bild beschreibt einen klassischen 8051er-Port, der fast keinen Strom 
liefern kann. In Verbindung mit einem AVR wird kein Transistor benötigt, 
dessen Port kann wenn aktiv auf high den Strom locker selbst liefern.

Du bist übrigens nicht der Erste, der einen DS18x20 einsetzt. Es gibt 
dafür Code, hier im Forum und anderswo. Inklusive CRC.

http://www.mikrocontroller.net/articles/Temperatursensor#DS18S20_.2F_DS18B20
Gast #2365013
Lesenswert?

Hallo,
danke für eure Hilfe auch wenn keiner Tipps helfen konnte habe ich das 
Problem mittlerweile gelöst! Die Antwort steht hier und stammt von 
Volker U.
Beitrag "DS1820, DS18B20 in C"
Das Problem war, dass ich einen zu langsamen Quarz mit 3,8... Mhz 
eingesetzt habe, dadurch wurde die parasitäre Stromversorgung nicht 
schnell genug (max. 10 µs) nach senden des T_Convert Befehls geschaltet. 
Ich habe einen schnelleren Quarz 7,2... MHz eingelötet und danach waren 
die Fehlmessung weg (innerhalb von 24h keine einzige!)
#2365420
Lesenswert?

Daywalker schrieb:
> Das Problem war, dass ich einen zu langsamen Quarz mit 3,8... Mhz
> eingesetzt habe, dadurch wurde die parasitäre Stromversorgung nicht
> schnell genug (max. 10 µs) nach senden des T_Convert Befehls geschaltet.

Dann sollte er entweder den alten Wert oder 85°C anzeigen.

Viel eher wird das Bit-Timing nicht stimmen, da ja die C-Ausdrücke auch 
Zeit brauchen und zu den Delays addiert zu lang sein können.
Vielleicht hast Du auch eine ungünstige Optimierung gewählt. Ich benutze 
ausschließlich -Os.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren