Problemas con BMP280 y AHT10 usando I2c

Buenas, he probado a poner el aht.begin en el loop y no ha funcionado. Se me ha ocurrido implementar dos buses I2C distintos en el mismo Arduino, pero no estoy seguro si se puede hacer. Osea, el bus 1 usando A4 y A5 y el bus 2 usando A2 y A3, y en el bus 2 conectar sólo el aht10, con lo cual sería el único dispositivo del bus. Espero ideas.

Reúno por aquí las posibles soluciones por si alguien tiene la misma duda:

-Multiplexar el bus I2C

  • Usar un optoacoplador
    -Olvidarse del AHT10 y usar un DHT11 o DHT22

Si logras una medida siempre al reiniciar, no creo que sea imposible hacerlo funcionar. La sugerencia del aht.begin, es por que esa librería no implementa un reinicio de la comunicación i2c , si hay un reset en la bmp280. Otra opción que tienes es no trabajar con las librerías y hacerlo directamente con la libreria wire, te obligaria trabajar a nivel Byte, pero tendrías mas control sobre el reinicio.

Hi,
Al poner el cs hi y no trabaja quire decir que no estan usando el tri-state como debe ser pero al menos ya sabemos que no trabaja con el cs hi.

Prueba con este skech con el sensor bmp conectado y sin conectar.

#include <Wire.h>
void setup() {
  Serial.begin(9600);  // start serial for output
}

void loop() {
  byte reset = 0xBA;
  byte nuebamedicion = 0xAC;

  Wire.begin();
  delay(10);
  Wire.beginTransmission(8); // transmit to device #8
  delay(10);
  Wire.write(reset); //reseteamos
  delay(10);
  Wire.write(nuebamedicion);
  delay(10);
  Wire.requestFrom(8, 6);    // request 6 bytes from slave device #8

  while (Wire.available()) { // slave may send less than requested
    char c = Wire.read(); // receive a byte as character
    Serial.print(c);         // print the character
    Serial.println();
  }
  Wire.end();
  delay(500);
}

No se si funciona porque no tengo el sensor. Remplaza la dirección, por la del sensor aht10

¿Por qué no lees el BMP por SPI en lugar de I2C y fin del conflicto?

Puedes usar un pin para alimentar el AHT10 y con ello reiniciarlo cuando te haga falta y si no es suficiente usar un PMOSFET o un NMOSFET para el mismo fin (reiniciar la alimentación del sensor).

Olvida la idea del A2 A3 en un BUS I2C que no existe.

La única alternativa es con un 4066 o un 4052 que tiene la posibilidad de elegir que par de pines usar.
Es una llave dos polos dos posiciones.

Con dos pines digitales controlas que dispositivo usarás. Es mas has puedes simplificarlo a solo uno.
AB son los pines del 4052 que controlan que par de pines estarán
Pones fijo B en 0 y con A en 0/1 tienes control de X0 Y0 (0) o X1 Y1 (1)

Hi,
Ultima sugerencia. Pones el pin del BMP280 Hi y corres el programa de scanner I2C y mira a ver que modulos encuentra. Debe de aparecers solamenta el de ATH10.

gatul:
¿Por qué no lees el BMP por SPI en lugar de I2C y fin del conflicto?

Vale te contesto, todos los sensores los tengo que usar con I2C porque con SPI ya estoy usando un módulo lora y no me queda ningún digital libre para hacer el cambio. Además, aparte del AHT10 y el BMP280, también estoy usando un MPU6050, por lo tanto, con el aht seguiría sin funcionar. La gracia de este proyecto es lograr la modularización y la mayor ampliabilidad de sensores útiles posibles.

tauro0221:
Hi,
Ultima sugerencia. Pones el pin del BMP280 Hi y corres el programa de scanner I2C y mira a ver que modulos encuentra. Debe de aparecers solamenta el de ATH10.

Respecto a ti, usando el I2C scanner con los 3 sensores a la vez, se muestran las direcciones de los tres sin problemas, no sólo la del AHT10

Hi,
Si entiendo el resultado de tu prueba dice que el scanner lee todos los modulos exepto el AHT10. La prueba que yo sugiero es de poner el BMP280 con el pin cs hi y el AHT10 y leer con el scanner el I2C. Estoy tratando de verificar de que el cs del BMP280 hi elimina el BMP280 y entonces puedes ver si I2C encuentra el AHT10. Yo haria la prueba pues tengo un BMP280 pero no tengo el AHT10. Es solamente verificar si el cs permite leer el AHT10. Por eso la prueba.

Hurgando un poco en la web encontré este tema que profundiza un poco sobre el problema

Re: Has anyone be able to get the AHT10 i2c temp/humid sensor to work?

Traduzco la parte interesante del 4to. post:

La razón es que el AHT10 NO PUEDE FUNCIONAR CON OTROS DISPOSITIVOS EN I2C.
Por una razón desconocida, el módulo interpreta cualquier combinacion de bits 01110001 en el i2c como un comando de lectura propio y comienza a enviar los 6 bytes.
No lo sabía y tuve que luchar hasta que descubrí cuál era el problema.
¿Y qué veo / encuentro en el PDF del AHT10?
Esta línea en la página 8 en la Figura 11: 

"3) Sólo se puede conectar un solo AHT10 al bus I2C y no se pueden conectar otros dispositivos I2C". 

Y eso es todo, chicos.
Lo saben, lo dejan, ningún otro dispositivo con el AHT10.
Y es realmente así.
No vi ese comentario y me encontré solo con el problema con los bits 01110001.
Entonces vi el comentario y la imagen fue clara.

Si googlean van a encontrar infinidad de personas que se han topado con el mismo problema y como dije anteriormente, es un tema de diseño del AHT.

La única solución de compartir I2C es multiplexar el bus para que el AHT10 lo use solo cuando sea necesario.

Saludos

@gatul, palabras mas palabras menos es lo que dijo @tauro0221 en el post#3.

Por eso la sugerencia del multiplexor es la mas recomendada. Para mi lo mejor es reemplazarlo por algo que funcione y dejarlo para otra cosa., pero cada cual resuelve sus proyectos como quiere.

Ya sé y lo dije, también dije en el post #6 que la única solución es multiplexar el bus.

Pero como parece que no le creen a la hoja de datos del fabricante es que comparto más datos sobre el problema del AHT, para que no sigan dando vueltas en busca de una solución que no existe.

Saludos

Hi,
Gatul yo entiendo tu pensar pero para mi posiblemente el fabricante cuando menciona eso es porque posiblemente paso por alto el tri-state. Si los modulos que tienen cs debe complentamente poner las senales del modulo flotando. Quire decir que esta en alta impendancia y no ofrece carga. Por so yo queria hacer la prueba de poner el cs del MBP280 HI y que no apararesca la direccin en el I2C.Correr el programa para ver si la direccion del AHT10 aparece. Estos problemas son los que a mi gustan analizar. Voy a tener que ordenar uno.Ya yo tengo varios BMP280.Update ya pedi 3 de ellos y les contare los resutados.

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