We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I have studied I2C in a number of sites but I can't find the error in my program. I'm trying to write 'A' and read it from the eeprom.
#include<at89x51.h> #include<lcd.h> #include<delay.h> #include<intrins.h> //For using [_nop_()] #define ack 1 #define nack 0 sbit sda=P1^0; sbit scl=P1^1; void I2C_start() // Start I2C { sda = 1; _nop_();_nop_(); scl = 1; _nop_();_nop_(); sda = 0; _nop_();_nop_(); scl = 0; _nop_();_nop_(); } void I2C_stop() { sda = 0; _nop_();_nop_(); scl = 1; _nop_();_nop_(); sda = 1; _nop_();_nop_(); } void I2C_writebit(unsigned char Data) { unsigned char i; for(i=0;i<8;i++) { sda = (Data & 0x80) ? 1:0; scl = 1; _nop_(); scl = 0; Data<<=1; } scl= 1; _nop_();_nop_(); scl = 0; } unsigned char I2C_readbit(char ackbit) { unsigned char i, Data=0; sda = 1;// not clear Y SDA is out here for(i=0;i<8;i++) { scl = 1; Data<<=1; Data = (Data | sda); scl = 0; _nop_(); } if(ackbit) sda = 0; else sda = 1; _nop_();_nop_(); scl = 1; _nop_();_nop_(); scl = 0; return Data; } void I2C_writebyte() //save in EEPROM { I2C_start(); I2C_writebit(0xA0); //device address I2C_writebit(0x00); //word address I2C_writebit(0x41); //send data A I2C_stop(); } void I2C_readbyte() { unsigned char i; I2C_start(); I2C_writebit(0xA0); I2C_writebit(0x00); I2C_start(); I2C_writebit(0xA1); //device address i=I2C_readbit(nack); I2C_stop(); lcd_data(i); // I have written a separate LCD.h file for this function } void main() { unsigned short int LCDL1=0x80; unsigned short int LCDL2=0xc0; lcd_ini(); I2C_writebyte(); I2C_readbyte(); while(1) { delay_msec(1); } }
Pls reply
Got a Scope? It makes this easier. Do You have another way to read or write the chip? Then you can figure out if you have a read or write problem.
You Code could use some Comments.
But You are not reading back the ACK bit when you write. That is a 9th bit. It will also tell you the Chip is getting your writes.