DS1820 DS18S20 1-wire Suchalgorithmus Suchalgorithmen

#2400328
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
Angehängte Dateien:
#2403827
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
#2403968
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
#2405470
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
Angehängte Dateien:

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