Si el cableado lo permite, el método más simple es tener un cable que sea una salida del maestro a todos los esclavos, y el otro es un cable de retorno compartido por todos los esclavos al maestro, y dar a cada esclavo un " dirección "codificada" que también está codificada dentro del maestro. El uso de tal enfoque y que cada esclavo se comunique solo cuando se habla, eliminará la necesidad de arbitraje.
Si tiene algún tipo de interrupción periódica en el maestro y el esclavo, sugeriría usar una comunicación normal estilo UART con la condición adicional de que la línea de traansmit estará inactiva durante al menos 12 bits antes de cualquier comando, pero todos los bytes de cada comando se enviarán consecutivamente con al menos 1.1 pero no más de 5 bits de parada entre ellos. Entonces, cualquier esclavo que decida que un comando no le interesa puede ignorar todo lo que sucede a menos que o hasta que vea la línea inactiva por lo menos 10 veces al bit.
El cable de retorno de datos podría implementarse utilizando un enfoque de colector abierto / drenaje abierto (use una resistencia de pull-up y haga que los esclavos tiren del cable cuando quieran enviar un "0" y lo dejen flotando cuando no), pero eso sería lento y sensible al ruido. La inmunidad a la velocidad y al ruido podría mejorarse si no se utiliza el método de colector abierto / drenaje abierto, sino que los nodos incluyen un circuito como el siguiente en sus cables de salida:
simular este circuito : esquema creado usando CircuitLab
Si el PIC hace que la salida sea alta, el bus será alto y, de la misma manera, si el PIC hace que la salida sea baja. Si el PIC deja la salida flotante sin ningún pull-ups interno habilitado, lo que debería hacer siempre que no tenga nada que decir, otros dispositivos en el bus podrán subirlo o bajarlo sin impedimentos.