ATmega128 tiny RTC 제어하기 -1

2019. 8. 11. 16:17임베디드/ATmega128

RTC란 Real Time Clock의 약자로, 현재 시간을 유지하고 있는 시계를 말한다. 현재 시간을 유지하기 위해 다양한 장치에서 사용되고 있다. RTC는 일반적으로 별도의 전원과 클록을 가지고 있어, 시스템의 전원이 공급되지 않는 경우에도 현재 시간을 유지할 수 있다

 

전용 하드웨어를 사용하여 RTC를 구현하려고 하는데, 이 때 사용되는 칩이 DS1307이다. I2C 프로토콜을 사용하며, 외부 크리스탈과 전용 전원을 통해서 시간을 유지한다. DS1307의 핀 배치와 전형적인 회로 연결을 보여주고 있다

 

 

다음은 I2C 프로토콜을 사용했을 때, DS1307이 Slave 모드에서의 프토토콜 형식이다

 

 

그리고 특이한 핀인 SQW가 보이는 데, 설명을 읽어보면 

 

 

SQWE bit가 1로 된다면, 해당 핀으로 4개의 주파수를 가진 파형을 출력하게 되며, open drain 핀으로 외부 풀업 저항과 전원 연결이 필수인 형태다. 전압에 상관 없이 5.5V까지 풀업 전압이 설정될 것이며, 사용하지 않을 시에는 floating 상태를 유지해야만 한다

 

다음은 I2C 프로토콜을 위한 레즈스터 맵 정보다

 

 

 

사용하려는 모듈의 이미지는 다음과 같다

 

 

 

왼쪽과 오른쪽에 배치된 같은 이름의 핀들은 서로 같기 때문에, 원하는 부분에 연결하면 된다. 참고로 DS는 디지털 온도센서인 DS18B20의 출력 핀으로, Tiny RTC 모듈에는 DS18B20을 연결할 수 있는 자리만 마련되어 있고 실제로는 포함되어 있지 않은 경우가 대부분이다

 

이제 레지스터에 데이터를 쓰는 법을 알아보려고 한다. 슬레이브 주소는 0x68로 고정되어 있다

 

 

그리고 시간, 날짜 정보를 입력하는 메모리 0번~6번비트까지 데이터를 쓸 때는 이진수가 아닌 BCD 포멧을 사용해야 한다는 점을 주의해야 한다