I have a 1602A V2.0
LCD display (16 chars x 2 lines) that I intend to connect to my Kinetis MK26 ARM M4
MCU via a LCM 1602 I2C extender
(which has a Philips PCF8574AT
on it).
I'm trying to get it to work since this morning, but apparently, the address I calculated for the I2C extender (0x3F
according to this datasheet, A0, A1, A2 are non-jumpered) is not OK, so I tried to scan for a valid address where the I2C extender would ACK
me back, but I cannot find any.
I connected just the PCF8574AT
to my board, the LCD is not connected and it still doesn't work.
I have the following piece of code (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);
}
}
Could you please point out what I'm doing wrong, why my scan doesn't yield any results?
Or is there a problem with my I2C extender, phisycally?
I'd expect the output of the above code to contain a single "ADDRESSS 0x... IS OK" line with a timeout different than 0, but that's not the case.
Merry Christmas!
PS:
The LCM 1602 I2C extender I'm talking about is this one (with the Philips controller on it):
Which as as far as I can tell has this schematic (although the controller is not identical): http://www.nexuscyber.com/Content/files/Schematic/I2C_Schematic.pdf
I connected the SDA & SCL to the properly labeled pins on my board (so I guess pull-up resistors are in place, I'd have to check to be sure), and the GND and VDD to a GND and a 3v3 on the board directly (I also tried connecting it to a separate 5v power source, results are the same).