Forum: Mikrocontroller und Digitale Elektronik DS18S20 messen manchmal falsch


von Daywalker (Gast)


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

von Daywalker (Gast)


Lesenswert?

an den Timern hat es nicht gelegen, das habe ich geändert und getestet.
Hat keiner eine Idee? Kennt keiner dieses Messverhalten?

von (prx) A. K. (prx)


Lesenswert?

Wird die CRC kontrolliert und ein entsprechender Fehler erfasst?

von Klaus (Gast)


Angehängte Dateien:

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!

von Daywalker (Gast)


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!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von Gebhard R. (Firma: Raich Gerätebau & Entwicklung) (geb)


Lesenswert?

Hast du Interrupts laufen? Das bringt das Timing durcheinander und war 
bei mir einmal ein Problem.

Grüsse

von (prx) A. K. (prx)


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

von Daywalker (Gast)


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!)

von Crc (Gast)


Lesenswert?

Dennoch solltest du den CRC überprüfen und den Strong pullup einbauen

von Peter D. (peda)


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

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
Noch kein Account? Hier anmelden.