iButton an Arduino

Begonnen von Spielmann, 28 Februar 2014, 21:48:43

Vorheriges Thema - Nächstes Thema

ntruchsess

Zitat von: Prof. Dr. Peter Henning am 02 März 2014, 17:56:05
"get present" setzt nichts, sondern startet die Verify-Routine auf dem 1-Wire Bus.

Die sollte immer "1! liefern, wenn das Device da ist - und "0" sonst. Für das (Teil-)Modul zur Anbindung des Arduino ist ntruchsess veranwortlich, vielleicht kann er helden.

Die FRM_OWX_Verify-methode liefert zurück, ob das Device beim letzten Search des 1-Wire-busses gefunden wurde, eine erneute Suche wird dabei nicht durchgeführt. Das ist allerdings schon immer so, das habe ich nicht geändert. Also nach einen 'get xxx devices' gleich ein 'get yyy present' funktioniert (so wie Ihr schon festgestellt habt).
Hintergrund ist, dass die verwendete 1-Wire Arduino library diese geziehlte Suche nicht unterstützt, das müsste man erst mal nachrüsten und für jedes Verify jedesmal alle Devices zu iterieren erschien mir zu ineffizient. Eigenlich wäre es am effizientesten das gar nicht mit 'ReadingsVal(xxx,'present') abzufragen, sondern ein notify auf das present-reading aller zu beobachtenden Devices zu setzen und regeläßig mit 'get xx devices' alle in einem Rutsch abzuarbeiten.
Ich schau mir aber die 1-Wire-library mal wieder näher an, die geziehlte Suche sollte eigentlich einfach einzubauen sein.

Gruß, Norbert
while (!asleep()) {sheep++};

Prof. Dr. Peter Henning

Na ja, ineffizient ist das Ding schon - weil es eben die Suche auf dem Bus initiiert. Ich bin dabei, das ein wenig zu beschleunigen - denn der DS2480 weiß bei einem Reset, ob überhaupt irgendetwas auf dem Bus sitzt.

Hintergrund ist: Ich will einen Arduino dazu bringen, sehr schnell zu überprüfen, welcher aus einer Auswahl von 1-Wire Buttons im Halter sitzt.

LG

pah

ntruchsess

Also grundsätzlich gäbe es da 2 Strategien:

1. regelmäßig einen vollstendigen 1-Wire-search machen und in allen Devices das present-reading updaten. Hat den Vorteil, dass man automatisch mitkriegt, wenn neue Devices auftauchen und man kann einfach notifies auf das present-reading definieren.

2. geziehlte Suche nach bestimmten, vorher festgelegten Devices (ist vom 1-Wire-Busprotokol her ja kein Problem, eine vollständige Suche ist ja auch nur ein geziehltes Abarbeiten nach dem Schema eines binären Baumes). Hat gegenüber 1. den Vorteil schneller zu sein (signifikant weniger Kommunikation gegenüber 1. auf dem Bus) und läßt individuelle Intervalle pro Device zu. Hat den Nachteil, dass man mehr Konfigurieren muss.

Davon, dass man schon beim Reset weiß, ob überhaupt Devices am Bus hängen, hat man nur dann was, wenn im Regelfall keine dran sind (also z.B. Schließanlage mit iButtons, die aber nur kurz draufgedrückt und dann wieder mitgenommen werden).
while (!asleep()) {sheep++};

Prof. Dr. Peter Henning