Dos input pero de diferente voltaje 5V y 3.3V

Buenos dias, tengo que conectar dos circuitos, uno trabaja nativo con 5V y el otro es el ESP32 que trabaja a 3.3V, la activacion es con GND, para ambos circuitos esto es una entrada, no es salida de uno para entrada de otro, ambos circuitos estan con resistencia pullup por software (recordar que son entradas), referenciando el de 5V a 5V posiblemente con una resistencia de 10k y el ESP lo mismo, aunque tengo entendido que este referencia a 3.3V con una resistencia de 47k, ahora como la activacion en GND y este es comun para ambos chip no hay problema, el problema es cuando ambas estan en reposo, ya que sus referencias no son las mismas, habia pensado en el circuito de 5V, hacer un divisor de tension, pero el problema es que son dos resistencias por cada input, y son 12input; lo otro que pense pero no lo he probado es simplemente usar un zener de 3.3V en la input de 5V y este lo referencia a 3.3V. La verdad nunca me habia tocado el tema de activar dos entradas comunes pero con distintas referencias, cuando una es salida y otra entrada lo tengo clarisimo, pero cuando ambas entradas se deben activar con gnd y se comparten, no sabria como hacerlo de la menor forma y en el minimo espacio, ya que aca el problema es el espacio. Tambien esta la opcion de poner un diodo que me bloquee la linea positiva de 5V y solo me deje pasar el GND, alguna opcion? adjunto una imagen sobre la solucion con el diodo entre entradas.

PD: Asumo que la impedancia de entrada de las input es de 1M

EDIT: subi fotos mejores

que tal esto

image
Colocalo como gustes, es bidireccional.

Lo simule y se comporta bastante bien, la corriente es mas alta cuando referencio a negativo, pero son apenas 500uA. lo malo es que necesito tres pines.

El circuito funciona y no hace falta simular nada.
Busca en Google : 5V a 3.3V 2n7000 y veras.

No se trata de hacerlo y ya, por lo menos no soy de los que piensan asi, además yo estoy asociando dos inputs no una output a una input, por lo mismo trate de simularla, todos los ejemplos que vi eran de output a input, y donde indique en el primer post que para esa interfaz no tengo problema, en cambio para dos inputs de diferentes voltajes y tirando ambas a gnd no lo había hecho nunca y quería probarlo.

En teoria, el Arduino es bastante tolerante con los voltages de entrada, asi que una señal de 3V3 debería ser un HIGH. Si en el arduino no activas la resistencia PULL-UP esta quedará flotante, al menos no introducirá corriente.

Si conectas "directamente" dicho pin sin resistencia PULL-UP al pin del ESO debería, en teoria, funcionar sin problemas: Cuando el switch esté abierto, los 3v3 del ESP estarán presentes en el pin del ESP correspondiente a través de su resistencia de PULL-UP, como el arduino no tiene dicha resistencia en un input tendrá los 3V3, que aunque muy justo será un valor HIGH.

CAPTURA

También podrías prescindir de ambas resistencias de pull-up, usar una resistencia externa colocandola a los 3V3 del ESP, tal y como te pongo en la imagen, y el circuito debería poder funcionar.

Pero todo esto es en teoría, asumiendo que los niveles TTL del arduino son bastante flexibles y que una entrada no consume corriente, al menos es despreciable, en un microcontrolador.

De todas formas, lo que quieres hacer no es algo normal. Lo lógico sería que las entradas fueran solo a un microcontrolador y que este se comunicará el estado de dichas entradas ya sea mediante SPI, I2C, Serial, o cualquier otra forma de comunicación.

No es un arduino, es una placa cerrada que ya viene con resistencias pullup por software, no tengo acceso a ella y esta es la placa que t rabaja a 5V, solo tengo acceso al ESP32, lo que se quiere hacer es detectar cuando a la input original le llegue un estabo BAJO, y ese mismo estado debe detectarlo el ESP32. El circuito original ya trabaja a 5V y el esp32 a 3.3V, por lo que he visto aunque no lo he probado del todo bien es el diodo a la input del ESP32, asi solo deja pasar el 0 y no el 1 de la referencia pullup, lo malo de esto es que el estado bajo queda en 0.5V, apenas pueda hacerlo les ocmentare.

El esquema que te sugerí es el que se usa para intercambiar datos vias I2C bidireccional entre micros de 5V y sensores de 3.3V.
No hay nada que simular como ya te dije. Funciona.

No veo ningun error en tu razonamiento y las simulaciones que muestras para mi son correctas y viables.

Busca un diodo con una tension de umbral de union mas baja. Yo encontre este:


Seguro que existen muchos mas.
Una pregunta el pulsador SW1, ¿Es un pulsador real?, ¿O estas simulando con el algun circuito que te lleva ese punto a GND?.
Saludos.

1 Like

El circuito con el 2n7000 requiere que el estado se produzca del lado 5V o del lado 3.3V. Okay?

En la aplicacion es un switch real, de hecho es un pulsador que lleva las input a GND, y tienes razon con lo del umbral, buscare un diodo con bajo umbral.

Hoy probe el circuito real con un 1N4148 y a pesar de dejar el GND levantado 0.5V la placa ESP32 lo senso bien como un LOW, aun asi probare otros diodos.

¿Y si de una vez tomas las hojas de datos de ambos micros y lees cuales son los niveles para HIGH/LOW en lugar de andar adivinando o presuponiendo como también lo haces con la impedancia de las entradas?

Saludos

Pues si es un pulsador real , ya los tienes de dos circuitos y te quitas de lios.

Ya lo hice, y la esp32 nivel low es máximo 0.8V, lo que presumí fueron las impedancias de entrada solamente, pero aprovechando el tema quiero medirlas para tener el dato real.

Solo aprovecho de compartir ideas y pruebas, que supongo es la idea del foro.

Ojala se pudiera, asi seria muy facil, pero no se puede debido al tipo de switch utilizado.

Entonces, si sabes que para el ESP es 0.8V y para el ATmega es 1.5V, con el diodo está perfecto ya que 0.5V es menor a ambos máximos.
Ya dejaría de darle vueltas al asunto.

Ah, si quieres una caída menor usa diodos Schottky o diodos de germanio.

Saludos

Si diodos de germanio es lo ideal, la otra placa no es un atmega, de hecho ni siquiera se que micro es, solo se que trabaja a 5V y que esta con pullup por software.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.