Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
11/26/13 01:26
Read: times


 
#190165 - LED connection to PCF8575
Responding to: ???'s previous message
Hi ,

For the PCF8575 pin A0, A1 and A2 connected to ground. So that the slave address (0x40).
The LED connected to the 16 P-Port of PCF8575 (P0-P7) and (P10-P17) with the limiting resistor of 470R.
But i may do wrong in sending the address byte and the data byte?

Thank you.

Regards,
Nor

Below is the code :

...insert code here[#include <REG51F.H>
#include <stdio.h>
#include <INPUT_OUTPUT.h>
#include <delay1.h>

// Function declarations
void initRS(); 												
void initPort();											
void I2C_Init();
void I2C_Start();
void I2C_Restart();
void I2C_Stop();
void I2C_SendAck();
void I2C_SendNack();
unsigned char I2C_Write(unsigned char Data);
unsigned char I2C_Read();


#define SDA p1_0
#define SCL p1_1

//Main function
void main()
{
	initRS();
	initPort();
	I2C_Init();
	
	//unsigned char RxByte = 0;

	I2C_Start();
	I2C_Write(0x40);
	I2C_Write(0xAA);
	I2C_Write(0xF0);
	I2C_Read();
	I2C_SendAck();
	I2C_Stop();

}


//Function : I2C Write Byte	transfer 3 bytes

unsigned char I2C_Write(unsigned char Data)
	{
	unsigned char i;		// Variable to be used in for loop
	
	for(i=0;i<8;i++)		// Repeat for every bit
	{
		SCL = 0;		// Make SCL pin low
		delay1();		  // Data pin should change it's value,
									// when it is confirm that SCL is low

		if ((Data & 0x40) == 0)			  //
			SDA = 1;
		else
			SDA = 0;
			delay1();
		SCL = 1;
		Data<<=1;
	 }

	//Get ACK from slave
	 SCL = 0;
	 SDA = 1;
	 delay1();
	 SCL = 1;
	 SCL = 0;
	 return SDA;

	//

	for(i=0;i<8;i++)		// Repeat for every bit
	{
		SCL = 0;		// Make SCL pin low
		delay1();		  // Data pin should change it's value,
									// when it is confirm that SCL is low

		if ((Data & 0xAA) == 0)			  //10101010
			SDA = 1;
		else
			SDA = 0;
			delay1();
		SCL = 1;
		Data<<=1;
	 }

	//Get ACK from slave
	 SCL = 0;
	 SDA = 1;
	 delay1();
	 SCL = 1;
	 SCL = 0;
	 return SDA;

	 //

	 for(i=0;i<8;i++)		// Repeat for every bit
	{
		SCL = 0;		// Make SCL pin low
		delay1();		  // Data pin should change it's value,
									// when it is confirm that SCL is low

		if ((Data & 0xF0) == 0)			  //11110000
			SDA = 1;
		else
			SDA = 0;
			delay1();
		SCL = 1;
		Data<<=1;
	 }

	//Get ACK from slave
	 SCL = 0;
	 SDA = 1;
	 delay1();
	 SCL = 1;
	 SCL = 0;
	 return SDA	;
	}  
		
		

//	Function : I2C Read Byte
	unsigned char I2C_Read()
	{
	unsigned char i, Data=0;
	for(i=0;i<8;i++){
		SCL = 0;
		SCL = 1;
		delay1();
		if(SDA)
			Data |=1;
		if(i<7)
			Data<<=1;
	}
	SCL = 0;
	SDA = 1;
	return Data;
	}
		


// Function : To set initial values of SDA and SCL
void I2C_Init()
{
	SDA = 1;				// Set SDA pin HIGH
	SCL = 1;			    // Set SCL pin LOW
}

// Function : Master sending START condition, HIGH to LOW transition on SDA while SCL keeping high
void I2C_Start()
{
	SCL = 1;
	SDA = 1;
	delay1();
	SDA = 0;
	SCL =1;
	delay1();
}

void I2C_Restart()
{
	SDA = 1;
	SCL = 1;
	SDA = 0;
}

void I2C_Stop()
{
	SDA = 0;
	SCL = 1;
	SDA = 1;
}

void I2C_Ack()
{
	SDA = 0;
	SCL = 1;
	SCL = 0;
}

void I2C_Nack()
{
	SDA = 1;
	SCL = 1;
	SCL = 0;
}

// Initialize serial port 
void initRS ()
{
    SCON  = 0x50;		        // SCON: mode 1, 8-bit UART, enable rcvr      
    TMOD  = 0x20;               // TMOD: timer 1, mode 2, 8-bit reload        
    TH1   = 253;                // TH1:  reload value for 9600 baud @ 11.0592MHz   FDH
    TR1   = 1;                  // TR1:  timer 1 run                          
    TI    = 1;                 	// TI:   set TI to send first char of UART    
}

//Initialize port
void initPort()
{
	P1 = 0xFF;                 
	P2 = 0x00;
	P0 = 0x00;
}]





List of 6 messages in thread
TopicAuthorDate
i2c : PCF8575 interface with 8051 microcontroller            01/01/70 00:00      
   did you notice            01/01/70 00:00      
   How did you connect the LED's?            01/01/70 00:00      
      LED connection to PCF8575            01/01/70 00:00      
         what happened to MSB of data?            01/01/70 00:00      
            Write_Byte            01/01/70 00:00      

Back to Subject List