Tengo un microcontrolador que recibe comandos de 8 bits que vienen a través de cables (siguiendo el estándar RS-485) o a través del pin RX de un XBEE (sin usar interruptores reales). Quiero multiplexarlos de alguna manera para recibir automáticamente el comando correcto proveniente de la fuente correcta. Intenté utilizando alguna lógica de compuertas, pero solo funciona si los datos vienen del XBEE. Creo que el problema principal es que el estado inactivo del XBEE es de 3.3V y el estado inactivo del MAX485 es de 0V. ¿Alguien tiene alguna idea de cómo podría hacerlo funcionar? Además, otro problema sería convertir la lógica de 3.3V del XBEE a una lógica de 5V, pensé en usar un IC convertidor de nivel, pero me gustaría saber si es posible solo usando un transistor. ¡Gracias de antemano!
Respuesta
¿Demasiados anuncios?En general, para la multiplexación debes usar un multiplexor en lugar de trastear con compuertas individuales. Solo obtendrás condiciones de carrera, por lo tanto, conflictos, etc. al intentar esto con lógica simple. Sin embargo, si entiendo correctamente, esto no es el núcleo de tu problema.
Quieres que algún dispositivo decida qué entrada debe ser enrutada a tu E/S. Esto no es fácil, porque tener dos entradas lleva a cuatro posibles estados. Sin señal, una señal de cualquiera de las dos entradas o señales simultáneas de ambas entradas. En la mayoría de los casos, la solución es usar dos E/S seriales en tu microcontrolador, porque así te deshaces de todos esos problemas.
¿Qué es necesario hacerlo sin gastar otro puerto serie?
Podrías activar un latch con ambas entradas y tener una de ellas invertida. La salida del latch representa la entrada donde se recibió por última vez un nivel "no inactivo". La salida del latch puede entonces activar un multiplexor.
simular este circuito – Esquemático creado utilizando CircuitLab
Sin embargo, esto no te ayuda en el cuarto caso, cuando llegan dos señales de E/S al mismo tiempo. Entonces debes decidir cómo reaccionar ante tales colisiones.
Editar
Una opción para lidiar con este problema de priorización es poner otro D-Latch después del R/S-Latch.
Esto permite que el μC controle cuándo cambiar entre las señales de entrada. Mientras la salida del μC esté alta, cualquiera de las señales entrantes puede activar el multiplexor para cambiar. La tarea del μC es entonces establecer el pin de control en bajo mientras desee leer los datos entrantes. Al final de la transmisión, el μC vuelve a poner el pin en alto y el mecanismo de autoselección se reactiva.
Debes asegurarte de que la demora de propagación de la compuerta AND y OR juntas sea mayor que la demora del RS. De lo contrario, la señal incorrecta se latching a través del D-latch.
Aún así, si las transmisiones simultáneas no están descartadas, te enfrentarás a transmisiones incompletas después de liberar el pin de la compuerta.
Con respecto al cambio de nivel, hay muchas soluciones en la web y en la mayoría de los casos son más engorrosas de construir y de cualquier manera más costosas que un IC convertidor de nivel. ¿Tienes una razón para hacerlo discreto o es solo para aprender?