Half duplex: ¿Cómo evitar cortocircuitos?

5

Considere dos Arduinos (ATmega328P), con los pines 2 conectados para comunicación half-duplex (por ejemplo, usando SoftwareSerialWithHalfDuplex ):

AmbosArduinospuedenestartransmitiendoalmismotiempo,yaseaporrazoneslógicasosialgoestámal.Enestecaso,unArduinopuedeestablecerelpin2enalto,elotroArduinopuedeestablecerloenbajo.Elresultadoesuncortocircuito.Paralimitarlacorrientea5mA,podríaagregarunaresistenciade1kΩ:

¿Es esa la solución preferida? ¿Me estoy perdiendo algo?

    
pregunta feklee

2 respuestas

11

Esa es una forma razonable de resolver el problema con colisiones accidentales.

Otro método común es utilizar una salida de drenaje agotado . Es el metodo utilizado por I2C para garantizar que dos controladores en conflicto no consuman demasiada corriente y para garantizar que la señal sea baja o alta, y no algo intermedio.

De esta manera, puedes conectar tantas salidas como desees, ya que no hacen nada o llevan la salida a tierra. Si dos o más pines llevan la misma señal a tierra, no pasa nada malo.

Para hacer que esto funcione, necesita un solo resistor de pull-up en el bus, y dado que nadie está manejando activamente la señal alta, esto hace que la tasa de bits máxima sea menor.

Ya que está utilizando una interfaz serial controlada por software, debería ser fácil de adaptar a sus necesidades. En lugar de configurar los puertos como salidas push-pull y luego configurarlos como bajos o altos, los configura como entradas con pull-up cuando se supone que tienen salida alta o input , y configúrelos como output low cuando se supone que están output low .

    
respondido por el pipe
2

Es tan bueno como cualquier otra cosa. Una alternativa sería operar los pines en modo de drenaje abierto, pero luego necesitaría una resistencia de extracción externa.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas