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?
Der liefert ab Powerup solange 85°C, bis eine Messung komplett durchgezogen wurde.
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!?!
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.
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 ;-).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.