DS1820 bzw DS18S20 gibt nur 85.0°C zurück

OP (Firma: keine) #2319853
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?
OP (Firma: keine) #2319861
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!?!
OP (Firma: keine) #2319920
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 
;-).
OP (Firma: keine) #3104220
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. ;-)

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