ATmega128 tiny RTC 제어하기 -2

2019. 8. 11. 18:06임베디드/ATmega128

코드를 차근차근 작성해보려고 한다. 먼저 TWBR 레지스터 설정하기 위해서 DS1307의 Clock Frequency를 살펴봐야 한다. 데이터시트를 확인하면 최대 100KHz까지 속도를 지원한다

 

 

그리고 정보 설정 부분 글을 읽어보면

 

 

1. BCD 포멧으로 데이터를 저장하고, 읽을 때도 BCD 포멧으로 읽힌다

2. 00시가 되면 요일이 갱신된다. 1이 일요일, 2가 월요일로 시작하여 7이 토요일로 끝난다

3. CH는 크리스탈을 멈추게 하는 비트로 평상시엔 0으로 둬서 동작시키게 한다

4. 12/24시 모드가 있으며, bit6이 high 모드라면, 12시간 모드로, bit5를 읽어서 AM/PM을 구분할 수 있다

 

그리고 RTC 제어의 핵심인 bcd와 decimal간의 포멧변환 함수다. 저장할 때는 위의 함수를, 읽을 때는 아래 함수를 사용하면 된다

 

uint8_t decimal_to_bcd(uint8_t decimal)
{
	return (((decimal/10) << 4) | (decimal%10));
}

uint8_t bcd_to_decimal(uint8_t bcd)
{
	return (bcd>>4) * 10 + (bcd & 0x0F);
}

 

깃허브주소: https://github.com/surinoel/avr/tree/master/i2c/tinyRTC/tinyRTC

 

 

setup을 한 이후에는 setup을 위한 코드들은 모두 주석을 한 후 while 안에 코드만 실행시킨다