No se puede determinar la dirección del dispositivo I2C conectado (escáner I2C simple)

2

Tengo una pantalla LCD 1602A V2.0 (16 caracteres x 2 líneas) que pretendo conectar a mi MCU Kinetis MK26 ARM M4 a través de un LCM 1602 I2C extender (que tiene un PCF8574AT de Philips).

Estoy tratando de que funcione desde esta mañana, pero aparentemente, la dirección que calculé para el extensor I2C ( 0x3F según esta hoja de datos, A0, A1, A2 no están puenteadas) no está bien, así que intenté buscar una dirección válida donde el extensor de I2C ACK me devolviera, pero no puedo encontrar ninguna.

He conectado solo el PCF8574AT a mi placa, la pantalla LCD no está conectada y todavía no funciona.

Tengo el siguiente código (KSDK 2.0):

#include "fsl_gpio.h"
#include "fsl_port.h"
#include "fsl_i2c.h"

#include "Retarget.h"
#include "Log.h"
#include <stdio.h>

#include <stdint.h>
#include <stdbool.h>

int main()
{
    RetargetInit();

    i2c_master_config_t masterConfig;
    uint8_t status;

    /* Get default configuration for master. */
    I2C_MasterGetDefaultConfig(&masterConfig);
    printf("Got def. config\r\n");

    /* Init I2C master. */
    I2C_MasterInit(I2C0, &masterConfig, CLOCK_GetFreq(I2C0_CLK_SRC));
    //I2C_Enable()

    printf("Init\r\n");

    /* Send start and slave address. */
    printf("Starting...\r\n");
    // 0x70, 0x27, 0x38, 0x20, 0x3F

    uint8_t u8Addr = 0x3F;

    for(u8Addr=0; u8Addr<128; u8Addr++)
    {
        status = I2C_MasterStart(I2C0, u8Addr, kI2C_Write);

        LOG("sent address 0x%x", u8Addr);
        uint32_t u32Flags;
        /* Wait address sent out. */

        uint16_t timeout = UINT16_MAX;
        while(!((u32Flags = I2C_MasterGetStatusFlags(I2C0)) & kI2C_IntPendingFlag) && (--timeout))
        {
        }

        if((u32Flags = I2C_MasterGetStatusFlags(I2C0)) & kI2C_IntPendingFlag)
        {
            LOG("ADDRESSS 0x%x IS OK", u8Addr);
        }

        LOG("timeout is %d", timeout);

        //LOG("done address");
        status = I2C_MasterStop(I2C0);
        LOG("Stopped with status=%d", status);
    }
}‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

¿Podría por favor indicar qué estoy haciendo mal, por qué mi análisis no produce ningún resultado?

¿O hay un problema con mi extensor I2C, físicamente?

Espero que la salida del código anterior contenga una sola línea de "DIRECCIONES 0x ... ESTÁ BIEN" con un tiempo de espera diferente a 0, pero ese no es el caso.

Feliz Navidad!

PS: El extensor LC2 1602 I2C del que estoy hablando es este (con el controlador Philips en él):

Que,porloquepuedodecir,tieneesteesquema(aunqueelcontroladornoesidéntico): enlace

He conectado el SDA & SCL a los pines correctamente etiquetados en mi placa (así que supongo que las resistencias de pull-up están en su lugar, tendría que verificar para estar seguro), y la GND y VDD a una GND y un 3v3 en la placa directamente (también Intenté conectarlo a una fuente de alimentación de 5 V separada, los resultados son los mismos).

    
pregunta Paul

2 respuestas

1

Según el schematic del PCB y el datasheet de PCF8574 la dirección I2C se puede calcular después de la figura 10:

No estoy seguro de qué versión de IC está utilizando. El esquema dice PCF8574 y usted mencionó el PCF8574A. Sin embargo, si es PCF8574 la dirección es 0x20 , si es PCF8574A la dirección es 0x70 .

    
respondido por el auoa
-1

No sé cómo "calculó" la dirección, pero si su circuito es como el esquema al que hace referencia, entonces la dirección predeterminada es 0 . En el caso de que la dirección de entrada sea "negativa activa", entonces la dirección predeterminada es 7 .

    
respondido por el Guill

Lea otras preguntas en las etiquetas