안녕하세요. 오늘은 DS1302(Real Time Clock, RTC)에 대해 알아볼건데요.
DS1302는 시간을 저장하고있는 모듈입니다. 예를들어 아두이노를 시계로 사용하고있는데, 전원이 나가면 시간이 초기화 됩니다. 그러나 DS1302를 연결하면(건전지 사용) 아두이노의 전원이 나가도 시간이 저장됩니다.
VCC2 : 주 전원 핀 입니다. VCC2 >VCC1 + 0.2V이면 VCC2가 전원을 공급하고 VCC2가 더 작으면 VCC1가 전원을 공급합니다.
VCC1 : 보조 전원 핀 입니다. 보통 배터리를 연결하고, DS1302에 전원이 공급되지 않으면 VCC1가 전원을 공급합니다.
GND : GND
X1 ,X2 : 클럭 공급 핀입니다. 32.768Hz를 사용합니다.
SCLK : 시리얼 인터페이스의 데이터의 이동을 동기화 시켜주는 핀
I/O : 입/출력 핀
CE : 리셋 핀
전 DS1302모듈을 가지고 실제 회로대로 만능기판에 납땜을 해서 사용했는데, 미리 조립된 DS1302를 사용해도 상관 없습니다. 아두이노 우노에 전원으로 사용할수있는게 5V, 3.3V가 있는데 5V로 해야합니다.
아두이노에는 DS1302헤더파일이 있는데 이걸 사용하면 매우 쉽습니다.
위의 파일을 다운받고 아래의 그림처럼 들어가서 라이브러리를 추가해줍니다
#include <DS1302.h>
DS1302 rtc(2, 3, 4);
void setup()
{
rtc.halt(false);
rtc.writeProtect(false);
Serial.begin(115200);
rtc.setDOW(TUESDAY);
rtc.setTime(14, 41, 0);
rtc.setDate(22, 8, 2017);
}
void loop()
{
Serial.print(rtc.getDOWStr());
Serial.print(" ");
Serial.print(rtc.getDateStr());
Serial.print(" -- ");
Serial.println(rtc.getTimeStr());
delay (1000);
}
코드에서 보면 setup부분에 setDOW,setTime,setDate함수로 날짜를 업데이트 합니다. 이 날짜는 DS1302에 저장이되므로 날짜를 넣은 이후에 날짜를 새로 갱신하지않기위해서는 코드를 지워야합니다.
if(!strcmp(rtc.getDateStr(),"01.01.2000"))
rtc.writeProtect(false);
else
rtc.writeProtect(true);
만약 위의 방식과 다르게 지우는방식이 싫다면, 위와같은 코드를 넣으면 처음 한번만 날짜값을 업데이트합니다. 왜냐하면 처음 DS1302를 연결해서 rtc.getDataStr()함수를 호출하면 01.01.2000가 읽힙니다. 그래서 01.01.2000이 맞다면 날짜값을 업데이트 가능하게 해주고(rtc.writeProtect(true)) 그렇지 않다면 날짜값 업데이트를 막습니다.(rtc.writeProtect(false)) 이 방식의 단점은 처음 날짜값을 업데이트하고나서 새로 날짜를 업데이트하려면 rtc.getDataStr()값을 01.01.2000으로 만들어야 한다는 점입니다. 값을 01.01.2000으로 만드는 방법은 DS1302에 연결해있는 배터리를 뺐다끼면 됩니다
DS1302 name(CE,IO,SCLK) : DS1302클레스 생성
halt(enable) : DS1302의 세컨드 레지스터의 7번째비트(CH)를 설정하는 함수인데 CH가 1이면 크리스탈이 멈추고 0이면 크리스탈이 동작됨
writeProtect(enable) : DS1302의 컨트롤 레지스터의 7번째비트(WP)를 설정하는 함수인데 WP가 1이면 동작안되고 0이여야 동작됨
setDOW(dow),setTime(hour,min,sec),setDate(date,mon,year) : 설정
getDOWSr([format]),getDateStr([format]),getTimeStr([format]) : 문자열로 읽기
아래의 데이터시트에 함수의 기능이 자세히 나와있습니다.
***오류날때***
실제 DS1302가 조립된걸 사지않고 DS1302를 브레드보드에 연결해서 실행해보면 아래의 오류가 나는 경우가 있습니다.
000:00:00 00.00.2000 -- 00:00:00
'아두이노 > 이론' 카테고리의 다른 글
아두이노 정전식 터치센서 사용하기 TTP223B (0) | 2018.12.19 |
---|---|
2강. 아두이노 analogWrite, PWM 알아보기입니다.(LED키기) (0) | 2018.10.20 |
1강. 아두이노 pinMode,digitalWrite알아보기입니다.(LED키기) (0) | 2018.10.20 |
아두이노 블루투스모듈 설정하기(HC-06) (0) | 2017.05.25 |
아두이노 블루투스모듈 사용하기(HC-06) (0) | 2017.03.14 |