Hallo,
angenommen die Slaves sind nicht nur vom Programm, sondern auch von der
Aufgabe ununterscheidbar. Sie haben also alle die gleiche Aufgabe, z.B.
Lüftersteuerung nur auf Grund lokaler Temperaturen mit zentraler
Überwachung der Lüfterdrehzahl und der Temperaturen, aber ohne sagen zu
können, welche physikalische Temperatur bzw. Lüfter nicht mehr o.k. ist.
Dann kann man tatsächlich die Adresse jedesmal auswürfeln, z.B. indem
per (echter) Zufallszahl nach Power-On eine bestimmte Zeit gewartet
wird, bevor sich ein Slave am Bus anmeldet. Diesem wird dann vom Master
eine Adresse zugewiesen, die bis zum nächsten Power-Off Gültigkeit hat.
Dazu braucht man entweder ein Bus, der Kollisionen erkennt und behandelt
oder aber eine ziemlich ausgefuchste Buserkennungsphase die recht lange
dauern könnte.
Eine weitere Alternative besteht darin, dass die Slaves beim erstmaligen
Anmelden (gekennzeichnet z.B. durch eine Anmeldeadresse) oder während
einer Konfigurationsphase eine eindeutige Adresse zugeordnet bekommen
und diese z.B. im EEprom abspeichern. Dies funktioniert natürlich nur
dann, wenn der Bus Schritt-Für-Schritt in der im Master hinterlegten
Reihenfolge in Betrieb genommen wird (funktioniert bei Hausbussen sehr
gut, so wird es z.B. bei KNX gelöst).
Ist dies nicht möglich und müssen die Slaves trotzdem eindeutig
zugeordnet werden, bleibt nur eine Art von Dasy-Chain (z.B. wie oben
schon beschrieben, geht auch mit durchgereichten Select-Leitungen oder
durchgereichten Datenleitungen wie bei den WS2812-LEDs) oder eine
"mechanische" Kodierung durch
Mikroschalter/Lötbrücken/Jumper/Widerstand, wie sie z.B. bei I2C gerne
gemacht wird. Dies könnte natürlich auch außerhalb des Slave-Bords
realisiert werden (z.B. bei einem Lüfter-Tachosignal den Pullup am
Lüfter anbauen und je nach Bauort variieren. Benötigt dann aber
zusätzlich noch eine A-D-Auswertung des Signals)
Irgendwie muss man in diesen Fällen ja dem Slave seinen Einbauort
mitteilen.
Schöne Grüße,
Martin