otuzsubat
Member level 4
- Joined
- Jun 7, 2004
- Messages
- 72
- Helped
- 7
- Reputation
- 14
- Reaction score
- 5
- Trophy points
- 1,288
- Location
- istanbul, Turkey
- Activity points
- 668
pcf8583 pic
I want to use weekday alarm in PCF8583. For example, i want that it produces an interrupt at every Monday, 13:30. My code is below. Could you say me where is the mistake?
int int2bcd(int dec){
return ((dec/10)<<4)+(dec%10);
}
void rtc_set(){
i2c_start();
i2c_write(0xA2); //send device address
i2c_write(0x00);//send address byte
i2c_write(0x80);//Stop RTC counting
/*************Write actual time ****************/
i2c_write(0x00);//Hundredth of second
i2c_write(0x00);//Seconds
i2c_write(rtc[3]);//Minutes(in BCD format)
i2c_write(rtc[2]);//Hours(in BCD format, 24hour format)
i2c_write(rtc[0]);//Year/Date(in BCD format)
i2c_write(rtc[1]);//Weekday/Month(in BCD format)
i2c_write(0x00);//Disable Timer
/*************Write alarm time ****************/
i2c_write(0xA0);// Alarm Flag, Interrupt, No timer alarm, Weekday alarm
i2c_write(0x00);//Alarm Hundredth of second
i2c_write(0x00);//Alarm Seconds
i2c_write(int2bcd(alarm.minute));//Alarm Minutes
i2c_write(int2bcd(alarm.hour));//Alarm Hours
i2c_write(0x00);//Alarm Date
i2c_write((0x01<<(alarm.day-1)));//Alarm Weekday
i2c_stop();
delay_ms(5);
i2c_start();//start transmission
i2c_write(0x00); //send device address
i2c_write(0x00);//Send address byte
i2c_write(0x04);//Start RTC counting
i2c_stop();
delay_ms(5);
}
I want to use weekday alarm in PCF8583. For example, i want that it produces an interrupt at every Monday, 13:30. My code is below. Could you say me where is the mistake?
int int2bcd(int dec){
return ((dec/10)<<4)+(dec%10);
}
void rtc_set(){
i2c_start();
i2c_write(0xA2); //send device address
i2c_write(0x00);//send address byte
i2c_write(0x80);//Stop RTC counting
/*************Write actual time ****************/
i2c_write(0x00);//Hundredth of second
i2c_write(0x00);//Seconds
i2c_write(rtc[3]);//Minutes(in BCD format)
i2c_write(rtc[2]);//Hours(in BCD format, 24hour format)
i2c_write(rtc[0]);//Year/Date(in BCD format)
i2c_write(rtc[1]);//Weekday/Month(in BCD format)
i2c_write(0x00);//Disable Timer
/*************Write alarm time ****************/
i2c_write(0xA0);// Alarm Flag, Interrupt, No timer alarm, Weekday alarm
i2c_write(0x00);//Alarm Hundredth of second
i2c_write(0x00);//Alarm Seconds
i2c_write(int2bcd(alarm.minute));//Alarm Minutes
i2c_write(int2bcd(alarm.hour));//Alarm Hours
i2c_write(0x00);//Alarm Date
i2c_write((0x01<<(alarm.day-1)));//Alarm Weekday
i2c_stop();
delay_ms(5);
i2c_start();//start transmission
i2c_write(0x00); //send device address
i2c_write(0x00);//Send address byte
i2c_write(0x04);//Start RTC counting
i2c_stop();
delay_ms(5);
}