Kód: Vybrat vše
#include <avr/io.h>
extern "C" {
#include <i2cmaster.h>
}
#define DS3231_ReadMode_U8 (0xD1)
#define DS3231_WriteMode_U8 (0xD0)
#define DS3231_REG_ALARM_1 (0x07)
#define DS3231_REG_ALARM_2 (0x0B)
#define DS3231_REG_CONTROL (0x0E)
#define LED PA5
int main(){
DDRA |= (1 << LED);
init_ds3231();
ds3231_SetDateTime(__TIME__);
ds3231_SendMinuteInterrupt();
init_interrupt();
sei();
while(1){
}
}
void init_interrupt(){
MCUCR |= (1 << ISC01) | (1<<ISC00); // Nastavi interrupt na náběžnou hranu INT0 pinu
GIMSK |= (1 << INT0); // Zapne externí přerušení na INT0 pinu
}
ISR(EXT_INT0_vect){
PORTA ^= (1 << LED);
}
void init_ds3231()
{
i2c_init();
i2c_start(DS3231_WriteMode_U8);
i2c_write(DS3231_REG_CONTROL);
i2c_write(0x06); // Nastaví bity INTCN a A2IE
i2c_stop();
}
void ds3231_SendMinuteInterrupt(){
i2c_start(DS3231_WriteMode_U8);
i2c_write(DS3231_REG_ALARM_2); // Registr 0Bh
i2c_write(0x80); // Nastaví A2M2 bit registru 0Bh
i2c_write(0x80); // Nastaví A2M3 bit registru 0Ch
i2c_write(0x80); // Nastaví A2M4 bit registru 0Dh
i2c_stop();
}
void ds3231_SendSecondsInterrupt(){
i2c_start(DS3231_WriteMode_U8);
i2c_write(DS3231_REG_ALARM_1); // Registr 07h
i2c_write(0x80); // Nastaví A1M1 bit registru 07h
i2c_write(0x80); // Nastaví A1M2 bit registru 08h
i2c_write(0x80); // Nastaví A1M3 bit registru 09h
i2c_write(0x80); // Nastaví A1M4 bit registru 0Ah
i2c_stop();
}
void ds3231_SetDateTime()
void ds3231_GetDateTime(){...}
byte dec2bcd(char p_num1, char p_num2){...}
uint8_t bcd2dec(byte p_num, byte p_decimal){...}
Kód: Vybrat vše
void ds3231_SendMinuteInterrupt(){
i2c_start(DS3231_WriteMode_U8);
i2c_write(0x0B);
i2c_write(0x80);
i2c_stop();
i2c_start(DS3231_WriteMode_U8);
i2c_write(0x0C);
i2c_write(0x80);
i2c_stop();
i2c_start(DS3231_WriteMode_U8);
i2c_write(0x0D);
i2c_write(0x80);
i2c_stop();
}