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
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.
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.
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.
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.
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?
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.
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.
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.