www.mikrocontroller.net

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


Autor: Wolfgang-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wolfgang-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Guest (Gast)
Datum:

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

Autor: Marvin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marvin (Gast)
Datum:

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

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfgang-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wolfgang-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wolfgang-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Beispiel siehe Codesammlung.
denkst Du dabei an 1 wire.zip ?

Autor: malptek (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: malptek (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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,

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.