mikrocontroller.net

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


Autor: Cheffe (Gast)
Datum:

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

Autor: A. K. (prx)
Datum:

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

Autor: Route_66 (Gast)
Datum:

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

Autor: Cheffe (Gast)
Datum:

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

Autor: A. K. (prx)
Datum:

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

Autor: Cheffe (Gast)
Datum:

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

Autor: A. K. (prx)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Cheffe (Gast)
Datum:

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

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

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

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.