Port Expander

Hay

I am facing problem with LPC2114 inbuilt I2C, i interfaced LPC2114 with PCF8574AP Port Expander.

I have tested following code but the salve device (PCF8574AP) not responding.

My application is I have to read the Digital inputs from the PCF8574AP device

PCF8574AP device address Pins A0, A1, A2 connected to the ground

Please provide the information regarding how to read the inputs from the I2C Port Expander.

///////////////////////////////I2C-Testing-Code///////////////////////

#include<LPC21XX.h>

#define LED1 0x00000010 //P0.4

#define LED2 0x00000040 //P0.6

#define LED3 0x00000080 //P0.7

#define LED4 0x00000400 //P0.10

unsigned char I2CAddress = 0x71; // set I2C slave address for read from the chip

void init_pll()

{

PLLCFG=0x00;//multiplier and divider values are 00

PLLCON=0x00; //PLL is bypassed and the oscillator clock is used directly by the LPC2114,PLL is turned off

PLLFEED=0xAA; //Feed values

PLLFEED=0x55;

VPBDIV=0x01; //VPB bus clock is the same as the processor clock Pclk=14.7MHZ, Cclk=14.7MHZ

}

void I2C0_Isr(void) __irq

{

unsigned char st;

st = I2STAT;

switch(st)

{

case 0x08: //when start bit is enable status of the regeater is 0x08

I2CONCLR=0X20;//Clear start bit

IO0SET=LED1;

delay();

I2DAT=I2CAddress; //send the address with read bit 01110001=0x71

break;

case 0x40: //slave address +R,ACK

I2CONSET = 0x04; // enable ACK for data byte

IO0SET=LED2;

delay();

break;

case 0x48: //slave address+R, Not ACK

I2CONSET = 0x20; // Resend the start condition

IO0SET=LED3;

break;

case 0x10: //Repet Start condition Data Recived ,Not ACK

I2CONCLR = 0x20; // Clear the start condition

I2DAT=I2CAddress; //send the address with read bit 01110001

IO0SET=LED4;

delay();

break;

default:

break;

}

I2CONCLR=0x08; // clear SI

VICVectAddr = 0; // reset VIC

}

void main()

{

unsigned int i;

init_pll();

PINSEL0 |= 0x50; //select the SDA,SCL pins

IODIR0=0x00FFFFF0;

I2CONCLR=0x6c; /* clearing all flags */

I2CONSET=0x40; /* enabling I2C */

I2SCLH=0x08; /* 56.7 KHz */

I2SCLL=0x08;

/* Initialize VIC for I2C use */

VICVectAddr0 = (unsigned int) &I2C0_Isr;

VICVectCntl0 = 0x29; // Channel1 on Source#9 … enabled

VICIntEnable |= 0x200;

/* ISR address written to the respective address register*/

/* Send start bit */

I2CONSET=0x60;

delay(); //

while(1)

{

i++;

delay();

i–;

}

}

Regards

Chandu

Hi

Thanks for the reply

In my circuit I kept 10k as the pull up resisters for the SCL, SDA lines.

How much bias current is need for the SDA, SCL lines to respond PCF8574 device.

Regards

chandu

Hi

PCF8574AP Port Expander is responding & it is giving ACK signal. Problam is with Pull up resisters (Vcc=3.3V), when I kept 10k pull up resisters device is not responding, I think bias current not sufficient for SCL &SDA Pins. When I kept 3.3K Resister devices is responding I think bias current sufficient for SCL &SDA Pins.

Regards

chandu

Hi,

does it work with this code? I’m also trying with PCF8574, but with LPC2148.

Best regards.