MCP23017 con NODEMCU v3 (lolin) i2c no funciona

0

QuierousarNodeMCUv3conMCP23017quetieneMAX6675alfinal.Todoestáencircuitoporfavorvealaimagen.MAX6675(U3)noquieretrabajarconMCP23017.

  1. FirstMAX6675(U4)funcionaperfectamentebienusando biblioteca MAX6675

     MAX6675 max(D5, D7, D6);
     max.readCelsius(); //gives proper temperature
    
  2. Para MCP23017 Im usando Adafruit_MCP23017 library

  3. He probado MCP23017 simplemente con el código. El led está parpadeando, así que supongo que no está roto.

    Adafruit_MCP23017 mcp;
    mcp.begin(0);
    mcp.pinMode(0, OUTPUT);
    mcp.digitalWrite(0, HIGH); //LED lights up
    delay(1000); 
    mcp.digitalWrite(0, LOW); //LED turns off
    delay(1000);
    

Modifiqué ligeramente la libra MAX6675 para usar adafruit_MCP23017 para lectura / escritura digital Aquí está mi repositorio de github . Finalmente estoy intentando leer MAX6675 (U3) conectado a través de MCP23017 (U2) usando ese código:

  Adafruit_MCP23017 mcp;
  mcp.begin(0);
  MAX6675_MCP max_mcp(mcp, 1, 2, 3);  
  Serial.print(max_mcp.readCelsius());  //displays 0 or NAN

Suponiendo:

1) U4 / U3 funciona conectado directamente a NodeMcu

2) MCP23017 funciona debido a parpadeo del led

Y mi pregunta es: ¿Por qué MAX6675 (U3) no quiere trabajar conectado a través de MCP23017 (U2)?

¿Dónde me equivoqué?

Si mi pregunta no está bien escrita, corríjala. Gracias!

    
pregunta Sahee

1 respuesta

0
  

¿Dónde cometí un error?

No pude encontrar ningún error en su puerto de la biblioteca MAX6675 al canal MCP23017, excepto por el reemplazo cuestionable de las llamadas _delay_ms ().

Los pull-ups que faltan en las líneas I2C podrían afectar el funcionamiento de MCP23017 de manera impredecible. Espero que no sea funcional en absoluto, pero es posible que la comunicación funcione de una sola manera, es decir, NodeMCU puede enviar comandos a MCP (por lo que funciona la prueba de parpadeo del LED) pero no puede leer las respuestas del esclavo correctamente (por lo que los datos de MAX se corrompe).

Donde realmente cometió un error, es al intentar explotar SPI con el extensor de puerto I2C. Mi estimación original era incorrecta. Después de analizar la biblioteca MCP23017, veo que se necesitan 8 (!) Comandos I2C para enviar 1 bit. es decir, su comunicación es 32 veces más lenta de lo que podría ser.

Si necesita más de un dispositivo SPI, puede colocarlos todos en los mismos pines CLK / MISO y usar MCP23017 para cambiar los pines / CS solamente. O, mejor aún, use el multiplexor SPI (como ADG731 ) en el mismo bus para cambiar / pines CS.

    
respondido por el Maple

Lea otras preguntas en las etiquetas