• Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

Pcf8574ap

Status
Not open for further replies.

chandu13

New Member
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
 

chandu13

New Member
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
 
Status
Not open for further replies.

Latest threads

EE World Online Articles

Loading
Top