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):
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).