Forum: Mikrocontroller und Digitale Elektronik DS1820 bzw DS18S20 gibt nur 85.0°C zurück


von Marco P. (Firma: keine) (marcopolo)


Lesenswert?

Ich komme irgendwie nicht recht weiter mit einem von fünf Sensoren.
Ich habe 5Stück DS18S20 Sensoren, wovon einer mir keine vernünftige 
Antwort schickt. Die Temperatur ist immer 85.0Grad.

Ich mache folgendes was mir der UART in dieser Reichenfolge ausgibt:
1.) Init: reset confirmed

2.) SearchRom: MasterWriteByte: 0xf0 -> 0b11110000
//Antwort Telegram: 0x10, 0x37, 0x5f, 0x29, 0x02, 0x08, 0x00, 0xb3,
//Dies ist der Lasered ROM Code welcher zwischengespeichert wird

3.) Init: reset confirmed

4.) MatchRom: MasterWriteByte: 0x55 -> 0b01010101
//mit gespeichertem ROM Code

5.) ReadPowerSupply: MasterWriteByte: 0xb4 -> 0b10110100
//Antwort: 1 d.h. arbeitet nicht parasitär wird abgespeichert

6.) Init: reset confirmed

7.) MatchRom: MasterWriteByte: 0x55 -> 0b01010101
//mit gespeichertem ROM Code

8.) convertT: MasterWriteByte: 0x44 -> 0b01000100
//da nicht parasitär warte auf MASTER Rx=1
//hier hab ich auch schon 1s und länger ohne Erfolg gewartet

9.)Init: reset confirmed

10.) MatchRom: MasterWriteByte: 0x55 -> 0b01010101

11.) ReadScratchpad: MasterWriteByte: 0xbe -> 0b10111110
// Antwort Telegram: 0xaa, 0x00, 0x4b, 0x46, 0xff, 0xff, 0x0c, 0x10, 
0x87,

In Temperatur umgerechnet heisst das 85.0 C.
Die CRC passt zum Wert. Wenn ich einen anderen Sensor nehme bekomme ich 
den Temperatur Wert. Ich habe schon DS18S20 und auch DS18B20 probiert, 
wobei letzterer je nach eingestellter Genauigkeit eine andere Umrechnung 
hat.

Habt Ihr noch eine Idee?

von (prx) A. K. (prx)


Lesenswert?

Der liefert ab Powerup solange 85°C, bis eine Messung komplett 
durchgezogen wurde.

von Marco P. (Firma: keine) (marcopolo)


Lesenswert?

Ich sende bei

8.) convertT: MasterWriteByte: 0x44 -> 0b01000100

Und warte dann auf MASTER Rx=1. Was mir dieser Sensor zurückgibt. Somit 
hat der Sensor seine Messung beendet.

Zumindest steht das so im Datenblatt S.17.

Ich kann auch 750ms warten, und in dieser Zeit einen StrongPullup 
machen. Das hab ich auch schon probiert, ohne Erfolg. Macht aber keinen 
Sinn, da ich den Sensor nicht parasitär betreibe!?!

von (prx) A. K. (prx)


Lesenswert?

Wenn du einen Sensor allein an den Bus hängst und mit Skip ROM statt 
Adressierung arbeitest, dann müsste es ohne Programmänderung mit jedem 
Sensor gleichermassen funktionieren. Wenn vier funktionieren und einer 
nicht, dann hat dieser Sensor ein Problem.

von Marco P. (Firma: keine) (marcopolo)


Lesenswert?

Ja, hab mit Skip Rom auch schon gearbeitet. Auch mit Skip-Rom zeigt der 
Sensor als Temperatur Wert 0xaa an.
Moment, seit einer Minute sogar 0xff.

Telegram: 0xff, 0x00, 0x4b, 0x46, 0xff, 0xff, 0x01, 0x10, 0x45,

Ich hab festgestellt, das alle 500-1000 Messungen sogar mal ein 
richtiger Messwert herauskommt. Es ist allerdings nicht nachvollziehbar. 
Die Leitungen sind sehr kurz und es wird ein 4.7k Widerstand genutzt. 
Die Flanken sehen auch ganz ordentlich am Oszi aus...

Wenn mehrere Sensoren an dem Bus hängen funktionieren alle, nur dieser 
gibt einen falschen Temperatur Wert.

Scheint kaputt zu sein oder? Die Augen werden feucht bei 2.50€/Stück 
;-).

von Marco P. (Firma: keine) (marcopolo)


Lesenswert?

Ist zwar schon eine Weile her, aber ich glaube ich habe das Problem 
entdeckt. Der Sensor ist nicht kaputt!

Bei dem "S"-Typ des DS1820 muss beim convertT also beim Messen innerhalb 
von 10us der strong-pull-up gesetzt werden. Und zwar genau für die 
jeweilig benötigte Messdauer also 750ms bei 12bit Auflösung. Dies muss 
man auch mit allen drei angeschlossenen Pins (Vdd; Signal->5k an Vdd; 
GND) beachten. Obwohl im PDF steht das dies nur im "parasite power" 
Modus nötig ist.

Beim "B"-Typ ist das nicht erforderlich. Es sieht so aus als ob der "S" 
Typ mehr Strom braucht und diesen vom Signal Pin zieht.

Wenn kein pull-up gesetzt wird steht in den ersten zwei Bytes:

0xff, 0x00 .

Auch hatte ich fälschlicher Weise nach dem Absenden des convertT Befehls 
auf dem UART etwas ausgegeben und danch den pull-up gesetzt. In diesem 
Fall steht in den ersten zwei Bytes:

0xaa, 0x00.

Es müssen also wirklich 10us nach Absetzen des convertT Befehls sein. 
Die restlichen Werte im Telegram des "S"-Typs sehen immer gut aus, egal 
ob mit oder ohne pull-up.

Ich hoffe es hilft noch jemandem. ;-)

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.