makespacemadrid / ApolloVentilator

Nos gustaría ser el Marlin de los ventiladores :)
GNU General Public License v3.0
6 stars 7 forks source link

Cambio de dirección I2C del sensor de flujo #73

Closed novvere closed 4 years ago

novvere commented 4 years ago

Crear un firmware que cambie la dirección I2C de un sensor de flujo SFM3xx.

novvere commented 4 years ago

El único documento que he encontrado que explica como hacerlo es para un sensor de líquidos, he preguntado al fabricante (Sensirion) como hacerlo.

novvere commented 4 years ago

Sensirion responde que en estos sensores no se puede cambiar la dirección I2C, hay que usar un multiplexor.

novvere commented 4 years ago

estamos usando una librería Software I2C para poder avanzar, tenemos que revisar los pines en los que se puede utilizar el el arduino uno. Si no hay dispositivo slave parece que se bloquea, hay que revisar si se puede poner un timeout.

novvere commented 4 years ago

Los pines configurados para software I2C se corresponden con el número de pin dentro del puerto, es decir

#define SDA_PORT PORTC
#define SDA_PIN 2 
#define SCL_PORT PORTC
#define SCL_PIN 3

utiliza los pines A10 para SDA y A11 para SCL

Puedes definir, también antes de hacer el include..

#define I2C_TIMEOUT 10000

para que salte por timeout a los 10 segundos. El valor del timeout puede ir de 0 (no timeout) a 10000 (10 segundos) En el arduino nano que Yo usé, conciden port c pin1 con A1 y portc pin2 con A2

novvere commented 4 years ago

No se puede cambiar la dirección del sensor y las pruebas realizadas con varias librerías I2C software dan muchos problemas. Optamos por usar un multiplexor hardware

balrog-kun commented 4 years ago

Mientras se esperan nuevos componentes os recomiendo usar un esp32 como multiplexer. En ESP32 tengo entendido existe I2C por hardware en los pines GPIO 21&22 pero a la libreria le dices en que pines la quieres instanciar y funciona independietemente de si son estos dos u otros, en mi prototipo usaba 3 buses I2C sin problema.