عکس پیش‌فرض نوشته

یکی از آی سی های ساعت موجود در بازار که  به صورت ماژول عرضه می شود آی سی DS1302 است.

برای برقراری ارتباط با این آی سی ، به سه پایه نیاز داریم.

DS1302-Arduino

این پایه ها عبارت اند از:

CLK : کلاک

DAT : دیتا

RST : ریست

در این پروژه ما این ماژول را به ماژول Arduino UNO متصل می کنیم و با استفاده از پورت سریال، اطلاعات ساعت را برای آن ارسال می کنیم تا ذخیره گردد سپس به صورت خودکار ، برنامه هر ثانیه ساعت را روی پورت سریال ارسال می کند و می توان ساعت را مشاهده کرد.

همانطور که می دانید اگر باتری پشتیبان به آی سی DS1302 وصل باشد، زمانی که تغذیه نیز قطع شود ، آی سی DS1302 به کار خود ادامه می دهد و ما زمان را ازدست نخواهید داد.

حال درصورتی که تغذیه به ماژول Arduino  وصل شود ، این برنامه ابتدا ساعت را از آی سی DS1302 فراخوانی می کند و بعد از آن خود برنامه زمان را حرکت می دهد. به عبارت دیگر اگر در حین کار، ما ارتباط بین آی سی DS1302 و ماژول Arduino  را قطع کنیم ، زمان همچنان به کار خود ادامه می دهد.

برنامه ای که باید در ماژول پروگرام کنید به صورت زیر است:

/************************************************************************
 ************************************************************************
 *************************  www.SabzElco.ir   ***************************
 ************************************************************************
 *                                                                      *
 * Set the date and time by entering the following on the Arduino       *
 * serial monitor:                                                      *
 *    year,month,day,hour,minute,second,                                *
 *                                                                      *
 *    year can be two or four digits,                                   *
 *    month is 1-12,                                                    *
 *    day is 1-31,                                                      *
 *    hour is 0-23, and                                                 *
 *    minute and second are 0-59.                                       *
 ************************************************************************/
 
#include <DS1302RTC.h>
#include <Streaming.h>
#include <Time.h>

//Set pins: RST,DAT,CLK
DS1302RTC RTC(5, 6, 7);

void setup(void)
{
  Serial.begin(9600);
    
  Serial.println("RTC module activated");
  delay(500);
  
  if (RTC.haltRTC()) {
    Serial.println("The DS1302 is stopped.  Please set time");
    Serial.println("to initialize the time and begin running.");
    }
  if (!RTC.writeEN()) {
    Serial.println("The DS1302 is write protected. This normal.");
  }
  
  delay(1000);
    
  setSyncProvider(RTC.get);
  Serial << F("RTC Sync");
  if (timeStatus() == timeSet)
    Serial.println(" Ok!");
    else{
    Fall:
    Serial.println(" FAIL!");
    delay(1000);
    goto Fall;
  }
}

void loop(void)
{
    static time_t tLast;
    time_t t;
    tmElements_t tm;

    if (Serial.available() >= 12) {
        int y = Serial.parseInt();
        Serial.println(y);
        delay(2000);
        if (y >= 100 && y < 1000)
            Serial << F("Error: Year must be two digits or four digits!") << endl;
        else {
            if (y >= 1000)
                tm.Year = CalendarYrToTm(y);
            else    //(y < 100)
                tm.Year = y2kYearToTm(y);
            tm.Month = Serial.parseInt();
            tm.Day = Serial.parseInt();
            tm.Hour = Serial.parseInt();
            tm.Minute = Serial.parseInt();
            tm.Second = Serial.parseInt();
            t = makeTime(tm);
            if(RTC.set(t) == 0) { // Success
               setTime(t);
               Serial.println("RTC set to: ");
               printDateTime(t);
            }
            else
               Serial.println("RTC set failed!");
               while (Serial.available() > 0) Serial.read();
            }
      }

    t = now();
    if (t != tLast) {
        tLast = t;
        printDateTime(t);
        Serial << endl;
    }
}

void printDateTime(time_t t)
{
    printDate(t);
    Serial << ' ';
    printTime(t);
}

void printTime(time_t t)
{
    printI00(hour(t), ':');
    printI00(minute(t), ':');
    printI00(second(t), ' ');
}

void printDate(time_t t)
{
    printI00(day(t), 0);
    Serial << monthShortStr(month(t)) << _DEC(year(t));
}

void printI00(int val, char delim)
{
    if (val < 10) Serial << '0';
    Serial << _DEC(val);
    if (delim > 0) Serial << delim;
    return;
}

نحوه ارتباط پایه ها:

CLK : به پایه 7 میکرو

DAT : به پایه 6 میکرو

RST : به پایه 5 میکرو

 

نحوه تنظیم کردن ساعت:

برای نتظیم کردن ساعت و تاریخ باید به ترتیب : سال ،ماه، روز، ساعت، دقیقه،ثانیه را وارد کنید.

دقت داشته باشید که می توانید سال را به دو صورت 20XX و یا XX وارد کنید.

درضمن بعد از وارد کردن هر عدد باید ویرگول قرار دهید و در نهایت بعد از وارد کردن ثانیه ، Enter بزنید.

نمونه تنظیم تاریخ و ساعت:

2015,08,13,17,30,00

و یا

15,08,13,17,30,00

درنهایت مقادیر تاریخ و ساعت از طریق پورت سریال در ماژول Arduino ارسال می گردد.

 

در صورت داشتن هرگونه سوال و یا دریافت کتابخانه های این برنامه می توانید در قسمت نظرات اعلام نمایید.