La mejor manera de obtener +5V o +12V o 0V desde el pin arduino

Estoy trabajando en un programador eeprom como escudo Arduino. Hay dos pines en mi EEPROM que requieren una señal de 12V como parte del proceso de programación. Uno de ellos es un pin de dirección que también conduzco mediante una señal a través de un registro de desplazamiento 595, y el otro es el pin de habilitación de salida que está conectado a un pin normal de Arduino para operación de 5V y 0V.

Me gustaría tener un pin en el arduino para cada uno de los pines de 12 V que lo establecerán en el voltaje más alto sin dañar ningún otro componente.

Estaba pensando que podría usar una configuración de transistor simple como la Figura 1 en esta página, pero realmente no estoy seguro de qué tan bien funcionaría cuando se conectara a ambas fuentes a la vez. Necesitaría diodos para proteger mis componentes de 5V de daños por la señal de 12V, pero sospecho que el circuito puede funcionar. Simplificaré las cosas asegurándome de que Vin sea un suministro sólido de 12V.

Aquí está mi diseño inicial:

ingrese la descripción de la imagen aquí

Mi principal problema es que no entiendo muy bien los elementos del circuito en juego aquí. ¿Esto explotará? Todavía estoy un poco confundido por los circuitos de transistores simples y no estoy seguro de qué partes específicas usar. Siento que lo que estoy tratando de hacer no es tan difícil, pero mis habilidades de circuito no son lo suficientemente buenas como para saber cuál es la mejor manera de lograrlo. Gracias.

Respuestas (3)

Aquí hay un circuito que debería funcionar:

Su idea básica de usar un interruptor PNP de lado alto estaba bien. El problema con esto es que esto expone el alto voltaje al pin micro.

En este circuito, Q2 es el interruptor del lado alto que enciende o apaga la salida de 12V. Q1 cambia el interruptor del lado alto, aislando así el micro de los 12 V en la base de Q2.

Cuando la base de Q1 se mantiene en 5 V, el emisor será de 4,3 V, por lo que habrá 1 mA a través de R1. La mayor parte de esto también fluye a través del colector de Q1, que actúa como un sumidero de corriente conmutable de 1 mA. La mayor parte de esto solo puede provenir de la base de Q2. Suponiendo que los dos transistores tienen cada uno una ganancia de al menos 50, entonces la salida es buena para al menos 45 mA para que Q2 permanezca saturado. El propósito de R3 es solo asegurarse de que Q2 esté realmente apagado cuando Q1 esté apagado.

¿Qué son P1 y P2 aquí?
@CMP: puntos de conexión. Solo muestran dónde sale el 12V conmutado.
¿Así que p1 irá a mi pin eeprom? ¿Es seguro poner 5V allí cuando la señal de 12V está apagada?
@CMP: P1 será de alta impedancia cuando la salida de 12 V esté apagada.
Lo siento, soy un poco lento. Estoy pensando que ahora puedo conectar mi pin de datos de 5v a P1 a través de un diodo y luego conectarlo al pin de mi eeprom. Cuando los 12V están apagados, mi línea de datos lo manejará, y cuando los 12V están encendidos, no dañará mi micro pin. ¿Está bien?
@CMP Funcionaría. También podría usar una resistencia de 1k-10k ya que el microcontrolador tiene diodos de abrazadera que lo protegen, esto limitaría cualquier voltaje aparente en el pin a alrededor de 5V.
@Thomas: la entrada para el voltaje de programación no fija el voltaje a + 5 V; de lo contrario, no habría forma de aplicar los + 12 V.
@CMP, usaría un diodo Schottky, debido a su menor caída de voltaje. O obtenga 5.6V a través de un diodo zener desde +12V y continúe desde allí con el diodo estándar; 5,6 V - 0,6 V = 5 V.
@stevenh Parece que el OP estaba pidiendo 5V IO pero también programación de 12V. Si los 12 V pueden generar más de 1 k, entonces una resistencia de 1 k conectada al pin no debería afectarlo, y permitiría 5 V bidireccionales y 12 V unidireccionales.

Si bien esta es una publicación anterior, recientemente tuve este mismo problema cuando estaba haciendo una grabadora de EEPROM para retrocomputación (donde necesitaba escribir algunas EPROM de estilo 27C512). La respuesta actualmente aceptada tiene la idea correcta (que usé), pero le falta el control y la protección del nivel lógico (5V), y el menú desplegable en el lado de salida. El siguiente circuito agrega estos, y funcionó para mí:

Esquema de alternancia de VPP y nivel lógico

El pin del microcontrolador que se conecta a HVCtlcontrola el voltaje "alto" ( VPPp. ej., 12 V), LVCtlcontrola el voltaje de nivel lógico (p. ej., 5 V), y cuando ambos están bajos, R4baja el pin. El diodo Schottky protege el LVCtlpin del microcontrolador de VPP, mientras que tiene una caída de voltaje tan baja que no afecta el reconocimiento del nivel lógico.

Es decir, la salida ( OUT) está en VPPsiempre HVCtlque sea alta, de lo contrario, está en el estado de LVCtl.

El diodo y los transistores se pueden sustituir por otras partes, estas son solo las que usé (porque las tenía). (editar: en retrospectiva, sugeriría una resistencia de valor más bajo para R2admitir corrientes de programación más altas, por ejemplo, 10K o 4.7K. Sin embargo, el 22K que se muestra funciona en la práctica incluso para EPROM antiguos con hasta 30 mA o más de corriente de programación. )

De las preguntas anteriores deduzco que no quieres un programador universal, sino uno que pueda programar el dispositivo que necesitas para tu CPU homebrew, CMIIW.

Elegiría otro dispositivo EEPROM. ¡El voltaje de programación de 12 V es realmente Fred Flintstone! Los dispositivos modernos son programables a 5V. Ya sugerí echar un vistazo a la memoria Flash en lugar de EEPROM. El SST39SF010A puede escribir a 5 V , y por el dinero obtienes el doble de 64 KB , por lo que si lo deseas, puedes cargar dos programas y alternar entre ellos alternando A16. Para futuras mejoras, hay dispositivos Flash compatibles con pines con 256 KB y 512 KB (misma hoja de datos). Y está disponible en paquete DIL. ¿Quién necesita 12V?

Bueno, si quieres ser sensato, tienes razón. Estaba planeando implementar mi máquina de estado en eeproms, porque asumí que era la mejor solución para la memoria no volátil. Ese chip se parece exactamente a lo que necesito, y en realidad está disponible. Aceptando olin's porque en realidad responde a mi pregunta. Pero gracias por identificar la pregunta que debería haber hecho.
@CMP: no hay problema en que haya aceptado la respuesta de Olin; no podía saber cuál es su problema real y respondió lo que se le preguntó. Dicho esto, llama la atención que las personas (no quiero excluirme) a menudo piensen en una solución en particular, y si se atascan con eso, pregunten sobre ese problema en particular, en lugar de subir un paso y mirar el problema original. Visión de túnel. Olin acertadamente señaló esto ya un par de veces.