Forum: Mikrocontroller und Digitale Elektronik mehrere DS18S20 an einem Port-Pin


von Cheffe (Gast)


Lesenswert?

Moin,

beschäftige mich zum ersten Mal mit 1-Wire-Bus und DS18S20. Ich möchte 
später vier ansprechen. Die Programmierung soll in Assembler sein.

Als Board nehme ich erst einmal einen AVR-CTRL mit Atmega32. Da ist ein 
DS18S20 drauf, der mit den Basic-Beispielprogramm auch läuft.

Grundsätzlich ist mit der Ablauf beim Lesen und Schreiben auf dem Bus 
klar. Aber: Was passiert genau, wenn ich einen Reset auslöse und meherer 
Slaves am Bus hängen. Angenommen es sind vier angeschlossen und search 
rom wird angeleiert.

Wer meldet sich zuerst?

Muss ich viermal einen search rom starten oder geben alle vier DS18S20 
nacheinander Ihren ROM-code aus?



Gruß
Cheffe

von (prx) A. K. (prx)


Lesenswert?

Cheffe schrieb:

> Wer meldet sich zuerst?

Die ordnen sich selbst über die eindeutige ID. Da eine "0" auf dem Bus 
sich durchsetzt, kommen die in aufsteigender Reihenfolge dran.

> Muss ich viermal einen search rom starten

Solange bis sich niemand mehr meldet. Derjenige der sich beim ersten Mal 
gemeldet hat nimmt bei zweiten Mal nicht mehr daran teil.

von Route_66 (Gast)


Lesenswert?

Hallo!
Es gibt bei Maxim/Dallas die Application Note 187. Da steht drin, wie 
man alle am Bus hängenden Bausteine erkennen kann. Wenn Du allerdings 
die ROM- Codes deiner Sensoren kennst (einmal jeden separat auslesen), 
kannst Du sie gleich zielgerichtet ansprechen.
Steht übrigens alles im Datenblatt...

von Cheffe (Gast)


Lesenswert?

Moin,

habe ein Verständnisproblem, trotz AN162 und AN187. Also, mein µC macht 
ein Reset und die angeschlossenen DS18S20 melden sich mittels Presence. 
Nun schicke ich das search-Kommando auf den Bus. Antworten jetzt alle 
vier DS18S20 gleichzeitig mit Ihrem ersten Bit? Angenommen ROM1 und ROM4 
starten mit 0 und ROM2 und ROM3 mit einer 1. Was passiert auf dem Bus?


Cheffe

von (prx) A. K. (prx)


Lesenswert?

Cheffe schrieb:

> Nun schicke ich das search-Kommando auf den Bus. Antworten jetzt alle
> vier DS18S20 gleichzeitig mit Ihrem ersten Bit?

Jein. Eine 0 setzt sich durch. Wer in seinem Bit eine 1 hat, aber auf 
dem Bus eine 0 sieht, der nimmt für diese Runde nicht mehr am Verfahren 
teil.

von Cheffe (Gast)


Lesenswert?

Cheffe, super. Also eine DS18S20 mit einer 0 setzt sich gegenüber einer 
1 durch.

Spätestens (höchstwahrscheinlich vorher ;-) beim vorletzten Bit bleibt 
also nur noch ein DS18S20 übrig.

Nun habe ich die 64Bit eines der vier Sensoren. Wie wird denn nun 
sichergestellt, dass dieser sich beim nächsten search nicht wieder 
meldet?



Cheffe

von (prx) A. K. (prx)


Lesenswert?

Hatte ich oben schon geschrieben. Der übrig gebliebene nimmt nicht mehr 
an der Ausscheidung teil.

von Peter D. (peda)


Lesenswert?

Cheffe schrieb:
> Cheffe, super. Also eine DS18S20 mit einer 0 setzt sich gegenüber einer
> 1 durch.

Nein, das Search macht pro Bit 3 Zugriffe (Lesen, Lesen, Senden).
Zuerst wird das Bit abgefragt, dann das Komplement. Liest der Master 
beide Male 0, weiß er, daß Slaves mit dem Bit =0 und =1 am Bus hängen. 
Und beim 3. Zugriff sagt er, welche von beiden auf dem Bus bleiben und 
welche sich verabschieden müssen.

Und in der nächsten ROM-Search-Runde sendet er beim 3. Zugriff den 
anderen Bitwert.
Dazu muß man sich die Nummer des letzten Bits merken, wo das aufgetreten 
ist.
Und auch die 64 Bits des letzten ROM-Search, damit man weiß, ob man für 
dieses Bit schon beide Werte abgefragt hat.

Nach dem ROM-Search ist der gefundene Sensor adressiert. Man muß also 
nicht mit ROM-Match die 64Bit nochmal senden, sondern kann gleich die 
Temperatur auslesen.


Peter

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

> Grundsätzlich ist mit der Ablauf beim Lesen und Schreiben auf dem Bus
> klar. Aber: Was passiert genau, wenn ich einen Reset auslöse und meherer
> Slaves am Bus hängen. Angenommen es sind vier angeschlossen und search
> rom wird angeleiert.
>
> Wer meldet sich zuerst?
Nach einem Reset melden sich alle gleichzeitig mit einem 
Presence-Impuls. Du weißt dann lediglich dass mindestens ein Slave 
vorhanden ist.

Bei nur einem Slave brauchst Du auch keinen Search-ROM oder die ID. Hier 
reicht ein Skip-ROM aus.

Bei mehr als einen Slave brauchst Du eine ID-Liste um die einzelnen 
Slaves ansprechen zu können. Zum Ermitteln der IDs ist Search-ROM 
gedacht.

Peter Dannegger schrieb:
> Nach dem ROM-Search ist der gefundene Sensor adressiert. Man muß also
> nicht mit ROM-Match die 64Bit nochmal senden, sondern kann gleich die
> Temperatur auslesen.
Naja, normalerweise macht man einen ROM-Search nur einmalig bzw immer 
dann, wenn neue Sensoren hinzugekommen sind. Die IDs der Sensoren merkt 
man sich dann für alle weiteren Zugriffe.

Irgendwie macht man dann noch eine Zuordnung, welche ID nun z.B. am 
Vorlauf und welche am Rücklauf hängt. Man kann aber auch "komplett ohne" 
Search auskommen. Dazu muss man natürlich die IDs vorher mal irgendwo 
auslesen und aufschreiben. Im AVR-EEPROM legt man dann eine Tabelle mit 
allen bekannten IDs an.

Eine Alternative zum Search-ROM: Man hängt die Sensoren nacheinander 
(immer nur einen zur Zeit) an den Bus und liest die ID über Skip-ROM 
aus.
Kann man dann zum Beispiel in einem Lernmodus machen:

1. Anzulernenden Sensor (zB "Vorlauf" auswählen)
2. Sensor an den Bus hängen
3. LEARN-Taste betätigen
4. Weiter bei 1

von Peter D. (peda)


Lesenswert?

Christian H. schrieb:

> Naja, normalerweise macht man einen ROM-Search nur einmalig bzw immer
> dann, wenn neue Sensoren hinzugekommen sind. Die IDs der Sensoren merkt
> man sich dann für alle weiteren Zugriffe.

Wenn man genug Speicher hat, kann man es so machen. Aber nicht jeder MC 
hat nen Daten-EEPROM. Normalerweise mache ich es daher wie beschrieben.
Jeder Sensor hat ja 2 Byte EEPROM und da kann man bequem die 
Meßstellennummer eintragen.
Die ID benötigt man also nirgends und muß sie daher nicht speichern. Die 
Messung wird nach Skip-ROM für alle gleichzeitg gestartet.
Geht ein Sensor kaputt, ersetzt man ihn einfach und trägt in dessen 
EEPROM wieder die Meßstellennummer ein.


Peter

von Cheffe (Gast)


Lesenswert?

Hallo, danke für die vielen Antworten. Noch eine Frage: Wenn ich search 
rom sende (f0h), welches bit kommt zuerst. MSB oder LSB?

Cheffe

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Peter Dannegger schrieb:
> Aber nicht jeder MC hat nen Daten-EEPROM.
Der im OP angesprochene Atmega32 hat ihn.

Für meinen Geschmack ist, für jedes Auslesen eines Sensors einen 
Search-ROM zu machen, einfach zu viel Datenübertragung. Wenn ich dann 
noch den 1-Wire-Master in Software mache und eine Menge Sensoren 
verteilt habe, tut der MC ja fast nichts anderes mehr, als 1-Wire.

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.