Jeder DS18B20 hat bekanntlich eine Seriennummer (SN). Über den Befehl 0x33 für das Lesen des ROM habe ich die 8 Bytes der SN ausgelesen. z. B. E4h 00h 00h 00h ABh 97h ACh 28h zumindest das letzte Byte sollte richtig sein, denn dieses entspricht der Angabe im Datenblatt für einen DS18B20 meine Fragen: - da ich die Rechnung der CRC nicht richtig verstanden habe, wäre es schön, wenn jemand das CRC Byte nachrechnen könnte. - in welcher Reihenfolge müssen die einzelnen Bytes als SN eingegeben werden? Zuerst 28h oder E4h z. Z. „empfange“ ich als Temperatur nur 0xFF, was ja nicht stimmen kann MfG
Wolfgang-G schrieb: > z. B. E4h 00h 00h 00h ABh 97h ACh 28h Das ist aber vertauscht, 28h wird zuerst empfangen, E4h zuletzt (=CRC). > - da ich die Rechnung der CRC nicht richtig verstanden habe, wäre es > schön, wenn jemand das CRC Byte nachrechnen könnte. Nimm einfach die Routine aus der CRC App-Note von Maxim. > z. Z. „empfange“ ich als Temperatur nur 0xFF, was ja nicht stimmen kann Da stimmt wohl Dein Programm nicht (Zeile 42). Peter
> 28h wird zuerst empfangen, E4h zuletzt (=CRC Richtig, aber 28h soll lt. Datenblatt das LSB, also das niederwertigste Byte, sein. Deshalb bei mir letzte Stelle Ich wollte nach dem Befehl 0x55 die Seriennummer Byte für Byte eingeben. Muss ich mit 28h oder mit E4h anfangen? >Da stimmt wohl Dein Programm nicht (Zeile 42). Was meinst Du mit „Zeile 42“ MfG
Wir kennen dein Programm nicht. Meine Glaskugel sagt mir aber auch, dass der Fehler in Zeile 42 steckt...
Wolfgang-G schrieb:
> z. Z. „empfange“ ich als Temperatur nur 0xFF, was ja nicht stimmen kann
Haeng nur einen Sensor an den bus, mach ein Reset, Skip ROM, Convert,
Reset, Skip ROM und les dann das Scratchpad aus. Damit solltest du
schauen koennen, ob es wirklich an dem Match ROM liegt, oder ob du was
anderes verhauen hast.
Gruesse
Marvin
Ist euch eigentlich mal aufgefallen, dass eure Glaskugeln defekt sein muessen? Die haben eine sehr geringe Dynamik. :P
Wolfgang-G schrieb: >> 28h wird zuerst empfangen, E4h zuletzt (=CRC > Richtig, aber 28h soll lt. Datenblatt das LSB, also das niederwertigste > Byte, sein. Deshalb bei mir letzte Stelle 28h wird zuerst zum 1820 gesendet. Stelle Dir die Seriennummer als Schieberegister vor. Links wird hineingeschoben, rechts raus. Die CRC kann ich nachher mal prüfen, habe jetzt Feierabend.
>der Fehler in Zeile 42 steckt... na klar..... die Glaskugel Der war gut >Haeng nur einen Sensor an den bus, mach ein Reset, Skip ROM, Convert, >Reset, Skip ROM und les dann das Scratchpad aus. So lese ich ja meine Fühler problemlos aus. Als Brückenschaltkreis werden DS2482-100 für einen Fühler bzw. DS2484-800 für mehrere Fühler verwendet. Nun wollte ich mal mehrere Fühler an eine Datenleitung hängen und mit der Seriennummer arbeiten. Dazu habe ich Skip ROM gegen Match ROM gefolgt von der Seriennummer getauscht. Mit negativen Erfolg. Wenn aber das LSB (hier 28h) zuerst übertragen werden muss, dann werde ich mal weiter nach anderen Fehlern suchen. Oder jemand hat noch einen Tipp. >Die CRC kann ich nachher mal prüfen, habe jetzt Feierabend. das wäre nicht schlecht. Dann wüsste ich, ob die gelesene Seriennummer stimmt. MfG
Wolfgang-G schrieb: >>Die CRC kann ich nachher mal prüfen, habe jetzt Feierabend. > das wäre nicht schlecht. Dann wüsste ich, ob die gelesene Seriennummer > stimmt. Die Prüfsumme (0xE4) ist korrekt. Siehe auch http://zorc.breitbandkatze.de/crc.html CRC Order = 8 CRC polynom = 31 Initial value = 0 Final XOR value = 0 [X] reverse data bytes [X] reverse CRC result before Final XORData sequence = %28%ac%97%ab%00%00%00
Danke Christian, dann funktioniert schon mal das Auslesen der SN zwischenzeitlich habe ich auch das Delphi-Programm von Maxim (Nr27) zur Ermittlung der Prüfsumme zum Laufen gebracht. Gleiches positives Ergebnis MfG
Ich habe das Auslesen mehrerer Sensoren über die ROM-Search Methode gemacht, das funktioniert einwandfrei. Die älteren AVRs hatten ja doch sehr wenig SRAM, da konnte ich es mir nicht leisten, ihn für die Seriennummern zu verschwenden. Die ROM-Searchmethode braucht dagegen nur Platz für den Sensor, der gerade ausgelesen wird (8 Byte). Beispiel siehe Codesammlung. Peter
>Beispiel siehe Codesammlung.
denkst Du dabei an 1 wire.zip ?
Hallo. Hab das gleiche Problem. Will mehrere Sensoren über einen PIC µC auslesen. Ich lese die SN der Sensoren separat aus über READ ROM und schreibe sie dann im zweiten Schritt in den EEPROM des PIC.Dann führe ich eine Temperaturkonvertierung durch mit SKIP ROM für alle Sensoren die an dem Bus anliegen. Wenn ich dann MATCH ROM eingebe gefolgt von der SN kriege ich nur 0xFF wieder (Wird auch richtig übertragen, überprüft mit dem Oszi). Scheinbar kann der Sensore nicht angesprochen werden. Ich kann die Temperatur eines einzigen Sensors am Bus mittels SKIP ROM und dann READ Scratchpad auslesen. Es kann sein, dass die SN nicht ganz richtig ist, da ich nicht weiß wie man eine CRC Prüfung macht. Ich habe z.B. Folgende SN: LSB MSB (CRC) 0x28, 0x7C, 0x26, 0x64, 0x3, 0x0, 0x0, 0xE5 Der FamilyCode ist schon mal richtig, also 0x28 für den DS18B20. In dieser Reihenfolge übergebe ich dem Sensor auch die SN, also zuerst LSB usw. Hat jemand vlt. eine Ahnung, woran es liegen könnte? Danke schon mal im Voraus. lg, malptek
Hat sich geklärt. Beim Senden der SN lief meine schleife von i=0 bis i<9 und hat damit immer ein Byte zu viel gesendet, so dass der Sensor nicht mehr reagiert hat. Läuft alles. Man sollte echt das Handbuch genauer durchlesen, da steht alles Wort für Wort. Danke. lg,
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.