Sin ACK con i2c Escribir dirección de esclavo en TCA9555

0

Al ejecutar una prueba en un PIC16F18877, encuentro un problema con i2cWrite.

Durante el envío de una dirección a un TCA9555 no puedo obtener un ACK adecuado.    Después de iniciar I2c, se llama a la función con dirección de esclavo 0x40.    De hecho, 0x20 primeros 7 bits para dirección esclavo complementados con 0 para escritura    en el bit 0.    A0; A1 y A2 son todos llevados a GND. Pruebas con un TCA9555 diferente da    el mismo error.

Necesito que ACK se convierta en 0, pero el valor de retorno es 1.

La función i2cWrite se ha utilizado en muchos proyectos y se ha probado ahora    con un DS3231. Desde este dispositivo obtengo un ACK adecuado.

Al pasar por la función se muestran las señales altas y bajas de SDA adecuadas.    Incluso visible en la propia línea SDA.

Puede que esté haciendo algo mal con el TCA9555 pero no tengo idea de qué.

   bit i2cWrite(const unsigned char Byte)
       {
            unsigned char i = 0;
        for(i=0;i<8;i++)        // Repeat for every bit
        {
          Set_SCL_Low;
          Delay();
          // when it is confirm that SCL is low
          if((Byte<<i)&0x80)    // Place data bit value on SDA pin
            Set_SDA_High;   // If bit is high, make SDA high
          else          // Data is transferred MSB first
            Set_SDA_Low;    // If bit is low, make SDA low
          Delay();
          Set_SCL_High;     // So that slave can ackknowldege
          Delay();
          Delay();
         }
         // Get ACK from slave
         Set_SCL_Low;
         Set_SDA_High;
         Delay();
         Delay();
         Set_SCL_High;
         Delay();
         Delay();
         return SDA;
        }
    
pregunta Decapod

0 respuestas

Lea otras preguntas en las etiquetas