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
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.
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...
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
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.
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
Hatte ich oben schon geschrieben. Der übrig gebliebene nimmt nicht mehr an der Ausscheidung teil.
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
> 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
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
Hallo, danke für die vielen Antworten. Noch eine Frage: Wenn ich search rom sende (f0h), welches bit kommt zuerst. MSB oder LSB? Cheffe
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.