Forum: Mikrocontroller und Digitale Elektronik Temperaturfühler DS18B20- mit Seriennummer arbeiten


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Wolfgang-G (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Wolfgang-G (Gast)


Lesenswert?

> 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

von Guest (Gast)


Lesenswert?

Wir kennen dein Programm nicht. Meine Glaskugel sagt mir aber auch, dass 
der Fehler in Zeile 42 steckt...

von Marvin (Gast)


Lesenswert?

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

von Marvin (Gast)


Lesenswert?

Ist euch eigentlich mal aufgefallen, dass eure Glaskugeln defekt sein 
muessen? Die haben eine sehr geringe Dynamik. :P

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

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.

von Wolfgang-G (Gast)


Lesenswert?

>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

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

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

von Wolfgang-G (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Wolfgang-G (Gast)


Lesenswert?

>Beispiel siehe Codesammlung.
denkst Du dabei an 1 wire.zip ?

von malptek (Gast)


Lesenswert?

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

von malptek (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.