آموزش راه اندازی ماژول ساعت دقیق DS1302 با آردوینو

فهرست مطالب

ویژگی های ماژول ساعت دقیق DS1302

ماژول ساعت دقیق DS1302 یک ماژول ارزان قیمت با دقت مناسب است که می‌­توان از آن در پروژه­‌های گوناگون استفاده کرد. با استفاده از این ماژول می‌­توان اطلاعات ثانیه، دقیقه، ساعت، روز، روز هفته، ماه، تاریخ ماه و سال را نگهداری کرد. تاریخ در انتهای هر ماه بر اساس 29، 30 یا 31 روزه بودن ماه نیز به طور اتوماتیک تنظیم می‌­شود. همچنین این ماژول در تنظیم تاریخ در پایان هر سال، کبیسه بودن یا نبودن سال را هم در نظر می­‌گیرد که این عمل تا قبل از سال 2100 معتبر است.

نکته

دقت شود که پروتکل ارتباطی ماژول ساعت دقیق DS1302، پروتکل I2C نمی‌­باشد. ارتباط این ماژول با میکروکنترلر از طریق ارتباط سه سیمه سریالی سنکرون انجام می­شود.

معرفی پایه ها (Pinout) ماژول ساعت دقیق DS1302

ماژول ساعت دقیق DS1302 دارای 5 پایه به شرح زیر است:

  • VCC: تغذیه ماژول – 5 ولت
  • GND: زمین
  • CLK: پایه کلاک
  • DAT: پایه دیتا
  • RST: ریست (برای فعال بودن ماژول باید 1 باشد، اصطلاحا Actice High است.)

پین اوت (Pinout) این ماژول را می‌توانید در تصویر زیر مشاهده کنید.

لوازمی که به آن احتیاج دارید

قطعات مورد نیاز

آردوینو UNO R3 × 1
ماژول ساعت دقیق DS1302 × 1
سیم جامپر × 1

نرم افزارهای مورد نیاز

آردوینو IDE

راه اندازی ماژول ساعت دقیق DS1302

گام اول: سیم بندی

مطابق مدار زیر، ماژول را به آردوینو وصل کنید.

گام دوم: نصب کتابخانه

به Library manager رفته و کتابخانه Rtc by Makuna را نصب کنید.

توجه

اگر برای نصب کتابخانه نیاز به راهنمایی بیشتر دارید، به اینجا مراجعه کنید.

گام سوم: کد

کد زیر را روی برد آردوینو آپلود کنید. پس از آپلود کد، پنجره ی Serial Monitor را باز کنید.

    /* 
Modified on Nov 25, 2020
Modified by MehranMaleki from Arduino Examples
Home
*/ // CONNECTIONS: // DS1302 CLK/SCLK --> 5 // DS1302 DAT/IO --> 4 // DS1302 RST/CE --> 2 // DS1302 VCC --> 3.3v - 5v // DS1302 GND --> GND #include <ThreeWire.h> #include <RtcDS1302.h> ThreeWire myWire(4,5,2); // IO, SCLK, CE RtcDS1302<ThreeWire> Rtc(myWire); void setup () { Serial.begin(9600); 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(5000); // five 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); }

در کد بالا ابتدا اطلاعات زمان کنونی به عنوان مبدا زمان به ماژول داده شده و بر روی سپس ماژول شروع به کار کرده و هر 5 ثانیه زمان جدید را بر روی Serial Monitor نمایش می­‌دهد.

خروجی کد به شکل زیر است.

آموزش های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.