RTC Module(DS1302): 두 판 사이의 차이

아두위키 : Arduwiki
(Created page with "{{#seo:|title=아두위키 : 아두이노 RTC 모듈(DS1302) 가이드|title_mode=append|keywords=아두이노, 정보과학, 메이커학습, 수행평가, RTC 모듈(DS1302), 아두이노 작품, 캡스톤작품, 아두이노 예제코드|description=아두이노로 RTC 모듈(DS1302)을 제어하는 방법(기본정보, 회로, 예제 코드)을 소개합니다. 정보과학과 메이커수업에 활용가능합니다.}} File:Rtc모듈대표이미지.jpg|center|clas...")
 
잔글편집 요약 없음
 
1번째 줄: 1번째 줄:
{{#seo:|title=아두위키 : 아두이노 RTC 모듈(DS1302) 가이드|title_mode=append|keywords=아두이노, 정보과학, 메이커학습, 수행평가, RTC 모듈(DS1302), 아두이노 작품, 캡스톤작품, 아두이노 예제코드|description=아두이노로 RTC 모듈(DS1302)을 제어하는 방법(기본정보, 회로, 예제 코드)을 소개합니다. 정보과학과 메이커수업에 활용가능합니다.}}
{{#seo:|title=ArduWiki: Arduino RTC Module (DS1302) Guide|title_mode=append|keywords=Arduino, Information Science, Maker Learning, Performance Evaluation, RTC Module (DS1302), Arduino Projects, Capstone Projects, Arduino Example Code|description=Introduces how to control the RTC Module (DS1302) with Arduino (basic information, circuit, example code). Can be used in Information Science and Maker classes.}}
[[File:Rtc모듈대표이미지.jpg|center|class=coders100]]
[[파일:Rtc모듈대표이미지.jpg|가운데|class=coders100]]
This is a module that can remember the time even when it is not connected to a board.
This is a module that can remember the time even when it is not connected to a board.



2025년 3월 20일 (목) 20:44 기준 최신판

가운데|class=coders100 This is a module that can remember the time even when it is not connected to a board.

It uses a battery (CR2032).

Specifications

  • Operating Voltage: 3.3V ~ 5V
  • Operating Current: 300nA at 2V

Required Hardware

  • RTC Module
  • Arduino

Connections

RTC module Arduino
VCC 5V
GND GND
CLK D5
DAT D4
RST D3

Library

This document uses the Rtc by Makuna library for Arduino. Arduino Libraries

Example Code

The code stores the time at the moment of compilation. There will be a slight difference when uploaded to the board due to the time taken for the upload (since the board is uploaded after compiling, there is a time discrepancy).

#include <ThreeWire.h>  
#include <RtcDS1302.h>

//--------------------Modified Section-------------------------------
#define CLK 5     //Specify CLK pin number
#define DAT 4     //Specify DAT pin number
#define RST 3     //Specify RST pin number

ThreeWire myWire(DAT,CLK,RST);
//--------------------------------------------------------------
RtcDS1302<ThreeWire> Rtc(myWire);

void setup () 
{
    Serial.begin(57600);

    Serial.print("compiled: ");
    Serial.print(__DATE__);
    Serial.println(__TIME__);

    Rtc.Begin();

    RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
    printDateTime(compiled);
    Serial.println();

    if (!Rtc.IsDateTimeValid()) 
    {
        // Common Causes:
        //    1) first time you ran and the device wasn't running yet
        //    2) the battery on the device is low or even missing

        Serial.println("RTC lost confidence in the DateTime!");
        Rtc.SetDateTime(compiled);
    }

    if (Rtc.GetIsWriteProtected())
    {
        Serial.println("RTC was write protected, enabling writing now");
        Rtc.SetIsWriteProtected(false);
    }

    if (!Rtc.GetIsRunning())
    {
        Serial.println("RTC was not actively running, starting now");
        Rtc.SetIsRunning(true);
    }

    RtcDateTime now = Rtc.GetDateTime();
    if (now < compiled) 
    {
        Serial.println("RTC is older than compile time!  (Updating DateTime)");
        Rtc.SetDateTime(compiled);
    }
    else if (now > compiled) 
    {
        Serial.println("RTC is newer than compile time. (this is expected)");
    }
    else if (now == compiled) 
    {
        Serial.println("RTC is the same as compile time! (not expected but all is fine)");
    }
}

void loop () 
{
    RtcDateTime now = Rtc.GetDateTime();

    printDateTime(now);
    Serial.println();

    if (!now.IsValid())
    {
        // Common Causes:
        //    1) the battery on the device is low or even missing and the power line was disconnected
        Serial.println("RTC lost confidence in the DateTime!");
    }

    delay(10000); // ten seconds
}

#define countof(a) (sizeof(a) / sizeof(a[0]))

void printDateTime(const RtcDateTime& dt)
{
    char datestring[20];

    snprintf_P(datestring, 
            countof(datestring),
            PSTR("%02u/%02u/%04u %02u:%02u:%02u"),
            dt.Month(),
            dt.Day(),
            dt.Year(),
            dt.Hour(),
            dt.Minute(),
            dt.Second() );
    Serial.print(datestring);
}

Execution Result