یکی از آی سی های ساعت موجود در بازار که به صورت ماژول عرضه می شود آی سی DS1302 است.
برای برقراری ارتباط با این آی سی ، به سه پایه نیاز داریم.
این پایه ها عبارت اند از:
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 ارسال می گردد.
در صورت داشتن هرگونه سوال و یا دریافت کتابخانه های این برنامه می توانید در قسمت نظرات اعلام نمایید.
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
سلام و ممنون از زحماتتون
من کد فوق را میزنم ارور زیر را دارم
Compilation error: ‘RTC’ was not declared in this scope
سلام
ماژول RTC شما صحیحه؟ چون خطا داره میگه RTC تعریف نشده. حالا یا مشکلی از کتابخونهاش هست یا ناهماهنگیای بین کد و کتابخونه.
سلام اگر بخواهیم از ماژول ds3231 استفاده کنم راهنمایی کنید
سلام
توی دیتاشیت بررسی کنید که هر پایه برای چه کاری هست. پایههای اون رو تطابق بدید با برنامه، عملکرد کلی اکثر ماژولها شبیه به هم هستند.
متأسفانه من اطلاع دقیقی از ماژول DS3231 ندارم!
سلام دوست عزیز ممنون از اینکه جواب دادید
ولی اینگونه جواب ها همانند جواب ندادن است چون افرادی که به سایت شما مراجعه میکنند تقریبا یک چیزهایی از کار میدانند ولی نکات کلیدی چون تجربه ندارند از شما سوال میکنند اینکه من از شما سوال کردم و به شما زحمت دادم خوب دیتا شیت را هم می دانستم ولی شاید تجربه شما را نداشتم و از شما هم که سوال کرد بابت این بود که بدانم در خطوط برنامه چکار باید بکنم وچه تغییری در برنامه انجام دهم یا اینکه در مورد سخت افزار سوال مرا اینگونه جواب دادید که در مورد این ماژول چیزی نمیدانید در حالی که گیر من سر پایه ریست بود به هر جهت باز هم از شما ممنون هستم که برای من وقت گذاشتی
امیر عزیز، کاملاً حق با شماست.
البته کاش در سوالتون پایه ریست رو دقیقاً مطرح میکردین. چون سوالتون کلی بود، من هم کلی پاسخ دادم. 🙂
با این حال عذرخواهی میکنم. مسئول بخش الکترونیک مجموعه مدت زیادی هست همکاریشون رو با ما قطع کردند و ما فرد لایق و مناسبی رو نتونستیم جایگزینشون کنیم. به همین خاطر من تلاش میکنم با دانش بسیار کمم دوستان رو راهنمایی کنم.
در مورد نحوه اتصال ماژول DS3231 چند تصویر براتون ایمیل کردم. امیدوارم راهنمای خوبی باشه.
موفق باشید.
با سلام با تشکر از شما که برنامه رو داخل سایت قرار دادید لطف کنید کتابخانه رو بگذارید ممنون
با سلام
سه عبارت زیر را به صورت جداگانه در اینترنت جستجو کنید پیدا خواهید
DS1302RTC.h
Streaming.h
Time.h