¿Evitar la entrada de datos bit-bang desde el dispositivo de alimentación posterior?

Estoy construyendo una máquina Z80 a partir de componentes, para hablar inicialmente con una PC a través de E / S de bit banged a través de un cable USB FTDI , y tengo poca idea de cómo evitar volver a alimentar la placa Z80 desde una línea de datos de 5V . Los datos de Z80 a PC funcionan bien, de lo contrario, al revés. Soy un neófito en esto, con experiencia en codificación.

Esquema de E/S de Z80 Bit Bang

(No se muestra arriba, también tuve que agregar un hacky N4148 entre U1 y la línea de bus de datos).

El problema surge cuando quiero recibir bits en la máquina Z80, enviados por la PC:

Al apagar la máquina Z80, permanece semialimentada desde la línea de datos de 5V de la PC. He pasado horas y mucho buscando tratando de entender esto. La mayor parte de Internet parece preocupada por volver a alimentar de forma segura a Raspi y Arduino, pero hubo algunos hallazgos:

Culpable: esto parece suceder a través de mi compuerta AND U1: la hoja de datos SN74HC08N muestra clasificaciones máximas absolutas para la corriente de "abrazadera" de entrada como (no debe exceder) +/- 20 mA fuera del rango de voltaje 0 a VCC, siendo VCC 0 aquí ( apagado), lo que deduzco significa que puede volver a encenderse inadvertidamente desde las entradas. Entonces, la corriente a la entrada de U1 AND está saliendo a través de la línea VCC, alimentando nuevamente la placa.

Correcciones que puedo ver/he probado:

  • Poner un segundo N4148 o mejor en el VCC de la compuerta AND U1 para limitar la alimentación a un mA pequeño. Lo intenté, oculta/resuelve el problema, pero no puedo imaginar que esto sea correcto.

  • Use un MOSFET/BJT para intentar conducir U1 solo desde VCC, enviando datos FTDI a la puerta/base. No tengo la habilidad suficiente para saber si esto es más correcto que un diodo.

  • Op-amp plus MOSFET (como en una pregunta relacionada pero distinta ): puedo seguirlo, pero ¿es esta realmente la forma habitual? Esto no se siente como un enfoque estándar para una pequeña máquina de 8 bits, pero tal vez estoy totalmente equivocado.

  • Optoaislamiento : esto surge mucho en las respuestas por lo que puedo ver, pero no sé si esta es una práctica estándar para su dispositivo de consumo promedio. ¿Todas las microcomputadoras comunes con capacidad RS-232 de 8 bits estaban realmente optoaisladas? Los esquemas que encontré parecen simplemente usar el MAX232 o equivalente, pero no puedo entender cómo eso ayuda.

Según su experiencia, ¿cómo se tiende a evitar esto al diseñar tales circuitos?

La corriente no está sujeta; ese valor es para la corriente que fluye a través de los diodos de sujeción de voltaje. Y las clasificaciones máximas absolutas especifican los valores más allá de los cuales el dispositivo podría explotar.
@CL Buen punto, no lo había entendido bien. Actualizaré la pregunta.

Respuestas (2)

Agregue una resistencia en serie como 10K solo a la línea de señal de entrada, lo que limitará la corriente sin ralentizar demasiado la señal.

No relacionado, pero es posible que desee agregar un pullup de 100K para establecer un nivel lógico conocido cuando se desconecta el cable FTDI.

esquemático

simular este circuito : esquema creado con CircuitLab

Hay ciertos chips lógicos que no tienen el mismo tipo de red de protección interna y se pueden conectar directamente a un voltaje de entrada incluso cuando no tienen alimentación, pero aquí no es necesario.

Otro enfoque es simplemente insertar un BJT con una resistencia base de 10K, que invierte la señal. Si coloca un 1N4148 desde la base hasta el emisor, puede soportar grandes transitorios o ESD en la entrada sin freír nada.

esquemático

simular este circuito

Gracias, esta es una gran explicación, y gracias por la nota en el pullup también. Agregué la serie 10k y eso parece resolver el problema: todavía recibo algo de alimentación, pero del orden de 1V, por lo que no es suficiente para encender los LED o ejecutar los circuitos integrados. ¿Sería una buena práctica (o inútil) agregar un 1N4148 al VCC de la puerta AND también?
No hará ninguna diferencia en el back-powering pero evitará el uso de la red de protección interna. Un BAT54 sería aún más efectivo porque es un Schottky y tiene una caída más baja. Un solo BAT54S le permitiría sujetar ambos rieles. ¿Es una buena práctica? Probablemente, ya que de lo contrario está infringiendo la regla de la hoja de datos sobre el voltaje de entrada máximo, pero no parece ser necesario siempre que la corriente se limite a algo razonable como 0,5 mA. Sin la resistencia, etc., aplicar un voltaje a la entrada y luego aplicar energía puede hacer que el chip falle debido al bloqueo.
Lo investigaré, gracias, parece que puedo hacer una lectura realmente interesante allí. Aceptando esta respuesta con gratitud. Pregunta adicional si tiene tiempo: en el segundo enfoque, sigo que en esas resistencias, el BJT actuará como un interruptor para bajar VCC, por lo que invierte la señal con la entrada. Supongo que el menú desplegable es para evitar una señal flotante cuando la línea de entrada (PC) está apagada. ¿Cómo funciona el uso del N4148 aquí? ¿Es que de alguna manera alienta a ESD a "circular" localmente alrededor del segmento del riel de tierra entre R2 y el emisor de Q1, o evita ingresar al BJT?
Sí, el 100K es para evitar que capte ruido si el cable se deja abierto. El 1N4148 no es necesario para la funcionalidad, pero protege el transistor si se aplica < -5V (quizás a través de ESD o un puerto RS232 real) a la entrada. Lo más probable es que pueda omitirlo, pero realmente hace que la entrada sea a prueba de balas contra la mayoría de los abusos.

Envíe una señal BREAK en la interfaz asíncrona desde la PC para restablecer el Z80, esto establecerá los datos de TX en inactivo, que será 0V en una interfaz de nivel TTL.

Algunos software de comunicaciones de PC, algunos USARTS y algunos convertidores de USB a ASYNCH no pueden mantener la condición BREAK de forma permanente, pero generalmente pueden causar un pulso largo (muchas longitudes de caracteres) y esto debería ser suficiente para que su circuito se reinicie.