Forum: Mikrocontroller und Digitale Elektronik DS 18S20 SEARCH_ROM


von Lukas S. (irre)


Lesenswert?

Hallo,

ich bin im Moment dabei den Temperatursensor DS18S20 zu programmieren 
und soweit funktioniert alles. Allerdings möchte ich nun mehrere 
Sensoren an einen Bus hängen und dafür ist ja nötig, dass ich die 
Seriennummern kenne, oder?

Ich versteh allerdings nicht, wie ich den Code bekomme. Mit READ_ROM 
soll es ja irgendwie möglich sein, wenn nur ein Sensor am BUS ist, 
dessen Seriennummer zu bekommen. Wird dann nach dem Befehl READ_ROM vom 
Sensor der komplette 64-BIT code gesendet? Oder muss ich noch einen 
READ_SCRATCHPAD anfügen? Ich habe das Prinzip nicht durchschaut. Das 
Datenblatt habe ich mir natürlich durchgelesen, finde aber, dass dort 
nicht ersichtlich ist, wie die Prozedur abzulaufen hat.


LG

von Klaus (Gast)


Lesenswert?

Lukas S. schrieb:
> Wird dann nach dem Befehl READ_ROM vom
> Sensor der komplette 64-BIT code gesendet?

JA!

>Oder muss ich noch einen READ_SCRATCHPAD anfügen?
 Nein!

SCRATCHPAD wirst du zwar auch auslesen wollen, weil Du die Temperatur 
auch wissen willst.

Aber für den ROM-Code brauchst es nicht auszulesen.

TX  Reset      Master issues reset pulse.
RX  Presence   DS18S20 responds with presence pulse.
TX  CCh        Master issues Skip ROM command.
TX  Reset      Master issues reset pulse.
TX  33h        Master issues READ - ROM command.

Ab da den 64 Bit-Code in einen speicher ablegen. Also 8 byte.

von Lukas S. (irre)


Lesenswert?

Klasse, funktioniert super, vielen Dank!


wie funktioniert dann die MATCH_ROM routine?

reset;
MATCH_ROM command;

und dann den 64-BIT code des jeweiligen Sensors?

anschließend einen DS18S20 command?

ist dies irgendwo im Datenblatt beschrieben?

Für den SEARCH_ROM find ich auch keine Vorgehensweise.



LG

von error (Gast)


Lesenswert?

>Für den SEARCH_ROM find ich auch keine Vorgehensweise.

http://www.maxim-ic.com/app-notes/index.mvp/id/187

Ab Seite 51: http://pdfserv.maxim-ic.com/en/an/AN937.pdf

von Klaus (Gast)


Lesenswert?

Lukas S. schrieb:
> wie funktioniert dann die MATCH_ROM routine?
> reset;
>
> MATCH_ROM command;
> und dann den 64-BIT code des jeweiligen Sensors?

Genau so!

> anschließend einen DS18S20 command?
Versteh ich jetzt nicht!

> ist dies irgendwo im Datenblatt beschrieben?
JA! Seite 17 Example 1

> Für den SEARCH_ROM find ich auch keine Vorgehensweise.

Die Routine dazu gibt es im Netz sogar von Dallas aber wirklich nützlich
find ich Search_ROM eh nicht.

von Peter D. (peda)


Lesenswert?

Lukas S. schrieb:
> Für den SEARCH_ROM find ich auch keine Vorgehensweise.

Z.B.:

Beitrag "DS1820, DS18B20 in C"

Klaus schrieb:
> aber wirklich nützlich
> find ich Search_ROM eh nicht.

Doch, ist es.
Man kann damit sehr bequem alle Sensoren auslesen und muß nicht die 
Codes aller Sensoren speichern.
Nach jedem Search-ROM ist ein Sensor adressiert und kann ausgelesen 
werden.
Um einen Sensor einer Meßstelle zuzuordnen, kann man eine Nummer in 
dessen EEPROM (2 Byte) speichern.


Peter

von Lukas S. (irre)


Lesenswert?

danke euch beiden


@Peter: die sachen hatte ich mir schon angeguckt, aber wirklich schlau 
bin ich aus dem Purogrammiertem nicht geworden. Um was zu lernen, muss 
ich das einfach von Grund auf selbst programmieren und nachvollziehen...

u

von Peter D. (peda)


Lesenswert?

Entspricht doch dem Ablaufdiagramm im Datenblatt mit kleinen 
Optimierungen für den Programmablauf.

Der Trick ist, jedes Bit wird zweimal gelesen und dann wird das Bit 
gesendet, für das sich der Algorithmus entschieden hat.
Ein Zähler merkt sich die Position der letzten Diskrepanz, damit im 
nächsten Durchlauf der entgegengesetzte Pegel gesendet werden kann.
Sind alle Diskrepanzen aufgelöst, dann wurde der letzte Sensor gefunden.

Jeder Durchlauf adressiert einen Sensor. Man kann in gleich auslesen 
oder seine Adresse irgendwohin speichern.


Peter

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.