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
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
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
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,