Forum: Mikrocontroller und Digitale Elektronik DS1820 DS18S20 1-wire Suchalgorithmus Suchalgorithmen


von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Ein kleiner Versuch einen möglichen Suchalgorithmus auf einem 1-Wire Bus 
darzustellen.

Die APPLICATION NOTE 187 "1-Wire Search Algorithm" - Maxim war in 
manchen Punkten etwas verwirrend.

Programmablauf:

- MASTER sendet ein RESET
- MASTER sendet F0h
- MASTER empfängt BIT(A)
- MASTER empfängt BIT(B)
- MASTER berechnet und sendet das Antwortbit

Mit dem Antwortbit ist es möglich, SLAVES "ruhigzustellen", d.h.
weitere Bits werden von den betroffenen Slaves nicht mehr gesendet, bis 
ein RESET erfolgt.

Beispiel:

Master empfängt vom SLAVE-1 eine 0
Master empfängt vom SLAVE-2 eine 1
Master sendet eine 0
SLAVE-2 hat Pause !


Dieser Suchmechanismus funktioniert nicht nur bei Temperatursensoren.

Bernhard

von Bernhard S. (bernhard)


Lesenswert?


von ajja (Gast)


Lesenswert?

Was willst du damit sagen?
An sich ist sowas ja nicht allzu kompliziert, im Prinzip läufts wie ne 
Traversierung eines nicht-vollständigen binären Baumes ab.

von Bernhard S. (bernhard)



Lesenswert?

Von 10 (DS18s20) Slaves habe ich den ROM Code ausgelesen und die Bytes 
untersucht bei denen "Diskrepanzen" zwischen (A) und (B) auftreten.

Und einen möglichen Suchalgorithmus dargestellt.

Beim ersten Suchlauf antwortet der Master mit einer "NULL" wenn
Diskrpanzen auftreten.

Beim zweiten Suchlauf wird die letzte "Null" vom ersten Suchlauf
duch eine "1" ersetzt und auf weitere Diskrpanzen in diesem Suchlauf
mit einer NULL geantwortet.

Die Suchläufe stoppen, wenn in einem Suchlauf nur noch "1" als
Antwort kamen.

Bernhard

von Peter D. (peda)


Lesenswert?

Bernhard S. schrieb:
> Die APPLICATION NOTE 187 "1-Wire Search Algorithm" - Maxim war in
> manchen Punkten etwas verwirrend.

Kannst Du das näher erläutern?
Ich finde, sie bringt es genau auf den Punkt.
Ich wüßte auch nicht, wie man es anders machen sollte.

Hier meine Implementation des Algorithmus:
Beitrag "DS1820, DS18B20 in C"

Jeder Aufruf gibt die gefundene ID zurück und die Nummer des letzten 
Diskrepanz-Bits.
Beides wird dann für die nächste Suche benötigt.
Der gefundene Sensor ist dadurch adressiert und kann ausgelesen werden.
Gibt es kein Diskrepanz-Bit mehr, dann hat man alle Sensoren gefunden.


Peter

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Peter Dannegger schrieb:

> Kannst Du das näher erläutern?
> Ich finde, sie bringt es genau auf den Punkt.
> Ich wüßte auch nicht, wie man es anders machen sollte.

Du hast bestimmt Recht, doch zum damaligen Zeitpunkt war mir die ganze 
Problematik etwas suspekt (ist es auch jetzt noch).

Daraufhin erstellte ich mir ein paar Zahlenbeispiele und suchte nach
einem Suchalgorithmus.

Ich habe aber momentan den verdacht, dass ich das Fahrrad nocheinmal 
erfand.



Ich fasse nochmal zusammen:

- jeder Suchlauf gibt eine gültige ROM ID aus

- beim ersten Suchlauf antwortet der Master bei jeder Diskrepanz
  mit einer "0"

- die letzte "0", also die letzte Diskrepanz, eines Suchlaufes wird beim
  darauffolgenden Suchlauf durch eine "1" ersetzt (rote Pfeile).
  Entstehen dadurch neue Diskrepanzen, dann wird konsequent
  mit einer "0" geantwortet

- im neuen Suchlauf müssen die führenden "1en" beibehalten werden,
  die vorher schon auf "1" gesetzt wurden (blaue Pfeile).

- die Suche endet, wenn in einem Suchlauf nur noch "1en" auf
  Diskrepanzen geantwordet wurde.

Vielleicht erkennt man das Verahren in der PDF.


> Jeder Aufruf gibt die gefundene ID zurück und die Nummer des letzten
> Diskrepanz-Bits.
> Beides wird dann für die nächste Suche benötigt.
> Der gefundene Sensor ist dadurch adressiert und kann ausgelesen werden.
> Gibt es kein Diskrepanz-Bit mehr, dann hat man alle Sensoren gefunden.


Unterscheidet sich "Dein" Suchmechanismus von "meinem"?


Bernhard

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Ich habe mir erlaubt, den Search Algorithmus zu überarbeiten.

Inwiefern er sich der AN187 ähnelt oder unterscheidet, kann ich nicht 
sagen.


Beispiel eines 1wire Testers (Master)

Beitrag "1wire Slave Tester ATmega8 Assembler"

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.