DS 18S20 SEARCH_ROM

OP #2654743
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
Gast #2654799
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.
OP #2654825
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
Gast #2654838
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.
#2654962
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
#2655531
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren