Tengo problemas al establecer una conexión I2C entre ESP32 NodeMCU y ADS1115 ( hoja de datos ).
Estoy usando lo siguiente código de ejemplo de Adafruit:
#include <Adafruit_ADS1X15.h>
Adafruit_ADS1115 ads; /* Use this for the 16-bit version */
//Adafruit_ADS1015 ads; /* Use this for the 12-bit version */
void setup(void)
{
Serial.begin(9600);
if (!ads.begin()) {
Serial.println("Failed to initialize ADS.");
while (1);
}
}
void loop(void)
{
int16_t adc0;
float volts0;
adc0 = ads.readADC_SingleEnded(0);
volts0 = ads.computeVolts(adc0);
delay(1000);
}
Siempre me bloqueo en la parte de ads.begin(). Así que creo que la conexión I2C falla al inicializarse. Tengo otro ADS1115 que funciona bien con el mismo ESP y código.
Intenté depurar la conexión con mi osciloscopio y reconocí lo siguiente:
- Por alguna razón el SCL High está alrededor de 4,5V en el ADS1115 que funciona bien y 3,3V en el que no funciona.
- En el caso de que no funcione, siempre obtengo un "not acknowledge" para la conexión I2C.
¿Cuáles deberían ser los siguientes pasos para seguir depurando?
ACTUALIZACIÓN:
Después de configurar la conexión I2C entre el ESP32 y el módulo ADS1115 a través de los 3,3V, las cosas mejoraron ligeramente. Ahora obtengo alrededor de 10 errores en la parte ads.begin() y luego se atasca mientras se ejecuta ads.readADC_SingleEnded(0);. Por otro lado, con el ADS1115 funcionando, ejecuto sin problemas la parte ads.begin() sin obtener ningún error.
Del osciloscopio obtengo el siguiente comportamiento:
Me he dado cuenta de lo siguiente:
- En el caso del ADS1115 en funcionamiento, el voltaje es mucho más suave, incluso en la parte en la que el voltaje debería ser constante.
- Para que el voltaje del ADS1115 no funcione necesita más tiempo para ponerse en estado HIGH por la conexión SCL.
Como hice manualmente la soldadura de ambos módulos, mi suposición es que la capacitancia es mayor del módulo que no funciona. Las resistencias Pull-Up de ambos módulos son exactamente las mismas (10k).
¿Sería una posible solución disminuir la resistencia de pull-up en el módulo que no funciona?
ACTUALIZACIÓN2:
Ahora ya funciona, al menos en una (buena) protoboard. Parece que mi soldadura era mala, lo cual no entiendo porque con resistencias pull-up más bajas (5k) ese voltaje se veía muy bien en el osciloscopio. Hice un par de pruebas con mi osciloscopio con un ADS1115 completamente nuevo en una protoboard y al principio tampoco funcionaba. Después de cambiar a otra protoboard (mejor) funciona.
Acepto la respuesta de Justme porque era parte de la solución.