void i2c_start();
void init_ports();
void Delay(int);
void initialise_rtc(char hours, char minutes, char seconds);
void i2c_write(char sa, char address, char data);
void i2c_send(char data);
int i2c_acknowledge();
typedef struct portF_bits{
char SCL:1;
char SDA:1;
}control;
void setup() {
int acknowledgement;
// initialising the ports
init_ports();
// initialise rtc
//initialise_rtc(0x00,0x00,0x00);
// i2c_start();
// i2c_send(0xD0);
// acknowledgement = i2c_acknowledge();
// Serial.begin(115200);
// if(acknowledgement)
// Serial.println("get the acknowledgement");
// else
// Serial.println("not get acknowledgement");
i2c_start();
}
// initialising rtc
void initialise_rtc(char hours,char minutes,char seconds){
char slave_address = 0xD0;
//writing on seconds register
i2c_write(slave_address,0x00, 0x00);
//writing on minutes register
//i2c_write(slave_address,0x01, 0x00);
//writing on hours register
//i2c_write(slave_address,0x02, 0x00);
}
// write on an address using i2c
void i2c_write(char sa, char address, char data){
int acknowledgement;
i2c_start();
i2c_send(sa);
acknowledgement = i2c_acknowledge();
Serial.begin(115200);
if(acknowledgement)
Serial.println("get acknowledgement");
}
// we get the acknowledgement using these function
int i2c_acknowledge(){
control *portF = 0x31;
portF->SCL = 0;
portF->SDA = 1;
portF->SCL = 1;
Delay(10);
if(portF->SDA == 0)
return 1;
else
return 0;
}
// used to send 1 byte
void i2c_send(char data){
control *portF = 0x31;
char i;
for(i=7;i>=0;--i){
portF->SCL = 0;
portF->SDA = (data>>i)&1;
// Delay(1000);
portF->SCL = 1;
// Delay(1000);
}
}
//start i2c
void i2c_start(){
control *portF = 0x31;
portF->SDA = 1;
//Delay(1000);
portF->SCL = 1;
//Delay(1000);
portF->SDA = 0;
//Delay(1000);
}
//initialise ports
void init_ports(){
volatile char *ddrF = 0x30;
*ddrF|=0xC0;
}
//provides delay in seconds
void Delay(int milli_seconds){
volatile long int i;
while(milli_seconds--){
for(i=0;i<500;++i);
}
}
void loop() {
// put your main code here, to run repeatedly:
}