Für I²C hätt ich eine Idee, vielleicht kann man die ja aufs RS485 übertragen?
  1. Der Master (Chef) sendet einen General Call (GCALL).
  2. Der Chef wird zum Slave.
  3. Nach dem GCALL bestimmt jeder Slave eine Zufallszahl Z (zB aus uninitialisiertem RAM-Inhalt).
  4. Der Slave wird zum Master und versucht, Z an den Chef zu senden.
  5. Verliert er die Arbitration, wartet er bis der Bus frei ist und geht zurück zu 4.
  6. Kommt der Slave (momentan ein Master) zum Chef (momentan Slave) durch, bekommt er eine Adresse A vom Master zugewiesen.
  7. Wenn alle Slaves zum Master durchgekommen sind, ist man fertig.
  8. Falls sich scheinbar weniger als die vorhandenen N Slaves (Chef muß N kennen) gemeldet haben, dann haben 2 oder mehr Slaves genau das selbe Z geschickt, ohne daß einer die Arbitration verloren hat.
    Das ist möglich, wenn beide (oder mehrere) zur gleichen Zeit die gleichen Daten mit der selben Geschwindigkeit schicken.
    Durch Vergrößern von Z kann man die Wahrscheinlichkeit dafür aber beliebig klein machen. Tritt dieser Fall auf (kann man wohl nur über einen Timeout erkennen), dann startet das ganze von vorne bei 1.