
راهاندازی ماژول ساعت دقیق PCF8563T با آردوینو و مقایسه با DS1307
در پروژههای الکترونیک و سیستمهای تعبیهشده، نیاز به ثبت زمان دقیق و پیگیری تاریخ یکی از الزامات رایج است. ماژولهای RTC (Real-Time Clock) این امکان را فراهم میکنند که سیستم شما بتواند زمان را حتی در زمان قطع برق اصلی حفظ کرده و پیگیری کند. در این مقاله، به بررسی کامل ماژول PCF8563T و نحوه راهاندازی آن با آردوینو میپردازیم و سپس آن را با محبوبترین ماژول RTC یعنی DS1307 مقایسه خواهیم کرد.
ویژگیهای کلیدی PCF8563T
PCF8563T یک تراشه ساعت زمان واقعی با مصرف بسیار کم است که توسط شرکت NXP طراحی شده است. این تراشه از پروتکل I2C برای ارتباط استفاده میکند و ویژگیهای زیر را ارائه میدهد:
مشخصات فنی:
- ولتاژ کاری:1.0 تا 5.5 ولت
- مصرف جریان در حالت فعال: حدود 0.25 میکروآمپر
- دقت زمانی: معمولاً در حدود pm 20 در دمای اتاق
- رابط ارتباطی: I2C با آدرس 0x51 (هگزادسیمال)
- قابلیت تنظیم آلارم و تایمر
- خروجی پالس با فرکانس قابل تنظیم
- بافر باتری برای حفظ زمان در قطع برق
- محدوده دمایی: -40 تا +85 درجه سانتیگراد
کاربردهای PCF8563T
این ماژول در پروژههای زیر کاربرد گسترده دارد:
- دستگاههای ثبت داده (Data Logger)
- سیستمهای اتوماسیون خانگی و صنعتی
- ساعتهای دیجیتال و تقویم الکترونیکی
- سیستمهای کنترل دسترسی
- دستگاههای پزشکی و اندازهگیری
- سیستمهای IoT با نیاز به مصرف کم
پینهای ماژول PCF8563T
ماژول PCF8563T معمولاً با پینهای زیر ارائه میشود:
- VCC: تغذیه مثبت ($1.0$ تا $5.5$ ولت)
- GND: زمین
- SDA: خط داده I2C
- SCL: خط کلاک I2C
- INT: خروجی وقفه (اختیاری در برخی ماژولها)
برخی ماژولها همچنین دارای یک باتری سکهای CR2032 برای نگهداری زمان در قطع برق هستند.
اتصال سختافزاری PCF8563T به آردوینو
قطعات مورد نیاز
- آردوینو (Uno، Nano، Mega یا هر مدل دیگر)
- ماژول PCF8563T
- سیم جامپر
- برد بردبورد (اختیاری)
- باتری CR2032 (برای نگهداری زمان)
شماتیک اتصال
Arduino UNO PCF8563T Module
|
1 2 3 4 5 |
5V --------> VCC GND --------> GND A4(SDA) --------> SDA A5(SCL) --------> SCL |
- در آردوینو Uno و Nano، پینهای I2C به صورت پیشفرض A4 (SDA) و A5 (SCL) هستند.
- در آردوینو Mega، پینهای I2C عبارتند از: پین 20 (SDA) و پین 21 (SCL).
- مقاومتهای Pull-up معمولاً روی ماژول نصب شدهاند، اما در صورت نیاز میتوان مقاومتهای $4.7k\Omega$ تا $10k\Omega$ بین SDA/SCL و VCC اضافه کرد.
برنامهنویسی PCF8563T با آردوینو
نصب کتابخانه
برای کار با PCF8563T، چندین کتابخانه در دسترس است. یکی از محبوبترین کتابخانهها Rtc_Pcf8563 است که میتوانید آن را از طریق Library Manager آردوینو نصب کنید:
- Arduino IDE را باز کنید
- به
Sketch > Include Library > Manage Librariesبروید - عبارت “PCF8563” را جستجو کنید
- کتابخانه
Rtc_Pcf8563را نصب کنید
کد اولیه: خواندن زمان
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#include <Wire.h> #include <Rtc_Pcf8563.h> // ایجاد یک شی از کلاس RTC Rtc_Pcf8563 rtc; void setup() { Serial.begin(9600); // راهاندازی ارتباط I2C Wire.begin(); // بررسی اتصال ماژول Serial.println("PCF8563 RTC Test"); // پاک کردن فلگهای وضعیت rtc.initClock(); delay(1000); } void loop() { // خواندن زمان از RTC rtc.getDateTime(); // نمایش تاریخ Serial.print("Date: "); Serial.print(rtc.getDay()); Serial.print("/"); Serial.print(rtc.getMonth()); Serial.print("/"); Serial.println(rtc.getYear()); // نمایش زمان Serial.print("Time: "); Serial.print(rtc.getHour()); Serial.print(":"); Serial.print(rtc.getMinute()); Serial.print(":"); Serial.println(rtc.getSecond()); Serial.println("-------------------"); delay(1000); // یک ثانیه تاخیر } |
تنظیم زمان اولیه
برای تنظیم زمان در ماژول، از کد زیر استفاده کنید:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <Wire.h> #include <Rtc_Pcf8563.h> Rtc_Pcf8563 rtc; void setup() { Serial.begin(9600); Wire.begin(); // پاک کردن و راهاندازی ساعت rtc.initClock(); // تنظیم تاریخ و زمان // setDate(روز, روز هفته, ماه, قرن, سال) rtc.setDate(19, 5, 6, 0, 26); // 19 ژوئن 2026، جمعه // setTime(ساعت, دقیقه, ثانیه) rtc.setTime(14, 30, 0); // 14:30:00 Serial.println("Time has been set!"); Serial.println("Upload the read example now."); } void loop() { // خالی - فقط یک بار تنظیم میشود } |
نکته مهم: بعد از یک بار اجرای کد تنظیم زمان، باید کد خواندن زمان را آپلود کنید تا از تنظیم مکرر زمان جلوگیری شود.
استفاده از آلارم
PCF8563T دارای قابلیت آلارم است که میتواند در زمانهای مشخص وقفه ایجاد کند:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
#include <Wire.h> #include <Rtc_Pcf8563.h> Rtc_Pcf8563 rtc; const int interruptPin = 2; // پین وقفه آردوینو volatile bool alarmTriggered = false; void alarmISR() { alarmTriggered = true; } void setup() { Serial.begin(9600); Wire.begin(); rtc.initClock(); // تنظیم آلارم برای ساعت 15:45 rtc.setAlarm(45, 15, 99, 99); // دقیقه، ساعت، روز، روز هفته // 99 به معنی "نادیده گرفتن" است // فعالسازی آلارم rtc.enableAlarm(); // تنظیم پین وقفه pinMode(interruptPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin), alarmISR, FALLING); Serial.println("Alarm set for 15:45"); } void loop() { if (alarmTriggered) { Serial.println("ALARM! Time reached!"); // پاک کردن فلگ آلارم rtc.clearAlarm(); alarmTriggered = false; } // نمایش زمان فعلی rtc.getDateTime(); Serial.print(rtc.getHour()); Serial.print(":"); Serial.print(rtc.getMinute()); Serial.print(":"); Serial.println(rtc.getSecond()); delay(1000); } |
تایمر و خروجی کلاک
PCF8563T میتواند سیگنال کلاک با فرکانسهای مختلف تولید کند:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <Wire.h> #include <Rtc_Pcf8563.h> Rtc_Pcf8563 rtc; void setup() { Serial.begin(9600); Wire.begin(); rtc.initClock(); // تنظیم خروجی کلاک // گزینهها: 32768 Hz, 1024 Hz, 32 Hz, 1 Hz rtc.setSquareWave(Rtc_Pcf8563::SQWAVE_1HZ); rtc.enableSquareWave(); Serial.println("Square wave output enabled at 1 Hz"); } void loop() { // کد اصلی } |
مقایسه PCF8563T با DS1307
حال که با PCF8563T آشنا شدیم، بیایید آن را با DS1307 که یکی از محبوبترین ماژولهای RTC است، مقایسه کنیم.
DS1307 چیست؟
DS1307 یک تراشه RTC ساخت شرکت Maxim Integrated است که به طور گسترده در پروژههای آماتوری و حرفهای استفاده میشود. این تراشه نیز از پروتکل I2C استفاده میکند و دارای یک حافظه EEPROM داخلی است.
جدول مقایسه جامع
| ویژگی | PCF8563T | DS1307 |
|---|---|---|
| مصرف جریان فعال | 0.25 \mu A | 200 \mu A |
| مصرف جریان باتری | 0.25 \mu A | 300 nA |
| ولتاژ کاری | 1.0 – 5.5 V | 4.5 – 5.5 V |
| دقت زمانی | \pm 20 ppm | \pm 60 ppm |
| دمای کاری | -40°C تا +85°C | 0°C تا +70°C |
| حافظه EEPROM | خیر | 56 \times 8 بایت |
| آلارم | بله (یک آلارم) | خیر |
| تایمر | بله | خیر |
| خروجی کلاک | بله (قابل تنظیم) | بله (1 Hz – 32768 Hz) |
| آدرس I2C | 0x51 | 0x68 |
| قیمت تقریبی | متوسط تا بالا | پایین تا متوسط |
| دسترسی | کمتر رایج | بسیار رایج |
مزایای PCF8563T
1. مصرف انرژی بسیار پایین:
مصرف جریان PCF8563T تقریباً $800$ برابر کمتر از DS1307 است ($0.25 \mu A$ در مقابل $200 \mu A$). این ویژگی آن را برای سیستمهای باتریدار و IoT بسیار مناسب میکند.
2. دقت بالاتر:
PCF8563T با دقت $\pm 20$ ppm نسبت به DS1307 با $\pm 60$ ppm دقیقتر است. این به معنی انحراف کمتر در طولانی مدت است:
- PCF8563T: حدود $\pm 1$ دقیقه در سال
- DS1307: حدود $\pm 3$ دقیقه در سال
3. محدوده ولتاژی وسیعتر:
PCF8563T با ولتاژ $1.0V$ تا $5.5V$ کار میکند، در حالی که DS1307 نیاز به حداقل $4.5V$ دارد. این انعطاف بیشتری در طراحی سیستمهای کم مصرف فراهم میکند.
4. قابلیت آلارم و تایمر:
PCF8563T دارای آلارم و تایمر داخلی است که امکان ایجاد وقفه و برنامهریزی رویدادها را فراهم میکند.
5. محدوده دمایی بهتر:
PCF8563T در دماهای پایینتر تا $-40°C$ کار میکند، مناسب برای کاربردهای صنعتی و محیطهای سخت.
مزایای DS1307
1. حافظه EEPROM داخلی:
DS1307 دارای $56$ بایت حافظه غیر فرار است که میتوان تنظیمات و دادههای کوچک را در آن ذخیره کرد. PCF8563T این قابلیت را ندارد.
2. قیمت پایینتر:
DS1307 معمولاً ارزانتر و در دسترستر است، به ویژه در بازارهای محلی و پروژههای آماتوری.
3. پشتیبانی کتابخانهای عالی:
کتابخانههای متعدد و مستندات گستردهتری برای DS1307 وجود دارد (مانند RTClib توسط Adafruit).
4. محبوبیت و جامعه بزرگ:
به دلیل استفاده گسترده، حل مشکلات و یافتن مثالها برای DS1307 آسانتر است.
کد مقایسه عملی
برای درک بهتر تفاوتها، کد خواندن زمان از هر دو ماژول را مقایسه میکنیم:
PCF8563T:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <Wire.h> #include <Rtc_Pcf8563.h> Rtc_Pcf8563 rtc; void setup() { Serial.begin(9600); Wire.begin(); rtc.initClock(); } void loop() { rtc.getDateTime(); Serial.print(rtc.getDay()); Serial.print("/"); Serial.print(rtc.getMonth()); Serial.print("/"); Serial.print(rtc.getYear()); Serial.print(" "); Serial.print(rtc.getHour()); Serial.print(":"); Serial.print(rtc.getMinute()); Serial.print(":"); Serial.println(rtc.getSecond()); delay(1000); } |
DS1307:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <Wire.h> #include <RTClib.h> RTC_DS1307 rtc; void setup() { Serial.begin(9600); Wire.begin(); rtc.begin(); } void loop() { DateTime now = rtc.now(); Serial.print(now.day()); Serial.print("/"); Serial.print(now.month()); Serial.print("/"); Serial.print(now.year()); Serial.print(" "); Serial.print(now.hour()); Serial.print(":"); Serial.print(now.minute()); Serial.print(":"); Serial.println(now.second()); delay(1000); } |
همانطور که مشاهده میکنید، هر دو ماژول رابط برنامهنویسی مشابهی دارند، اما کتابخانه DS1307 (RTClib) کمی سادهتر و شهودیتر است.
کاربردهای پیشنهادی
استفاده از PCF8563T در:
- سیستمهای باتریدار با نیاز به عمر طولانی
- دستگاههای IoT و سنسورها
- سیستمهای خواب عمیق و Wake-up
- محیطهای صنعتی با دمای پایین
- پروژههای حساس به دقت زمان
- سیستمهایی که نیاز به آلارم دارند
استفاده از DS1307 در:
- پروژههای آموزشی و آماتوری
- سیستمهایی که نیاز به ذخیرهسازی تنظیمات دارند
- پروژههای با بودجه محدود
- کاربردهایی که همیشه تغذیه اصلی دارند
- محیطهایی با دمای اتاق
نکات عیبیابی
مشکلات رایج PCF8563T
1. ماژول شناسایی نمیشود:
- آدرس I2C را بررسی کنید (باید $0x51$ باشد)
- اتصالات SDA و SCL را چک کنید
- از I2C Scanner استفاده کنید:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <Wire.h> void setup() { Serial.begin(9600); Wire.begin(); Serial.println("I2C Scanner"); } void loop() { byte error, address; int devices = 0; for(address = 1; address < 127; address++) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("Device found at 0x"); if (address < 16) Serial.print("0"); Serial.println(address, HEX); devices++; } } if (devices == 0) Serial.println("No I2C devices found"); delay(5000); } |
- باتری CR2032 را تعویض کنید
- اتصال باتری به ماژول را بررسی کنید
- ولتاژ باتری باید بالای $2.5V$ باشد
3. زمان نادرست:
- مطمئن شوید که کد تنظیم زمان فقط یک بار اجرا شده است
- فرمت تاریخ و زمان را بررسی کنید
- از کد صحیح برای تنظیم استفاده کنید
4. آلارم کار نمیکند:
- اطمینان حاصل کنید که آلارم فعال شده است (
enableAlarm()) - پین INT را به درستی متصل کرده باشید
- فلگ آلارم را پس از هر بار فعال شدن پاک کنید
پروژه عملی: ساعت دیجیتال با نمایشگر LCD
در اینجا یک پروژه کامل با PCF8563T و نمایشگر LCD $16 \times 2$ ارائه میشود:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
#include <Wire.h> #include <Rtc_Pcf8563.h> #include <LiquidCrystal_I2C.h> Rtc_Pcf8563 rtc; LiquidCrystal_I2C lcd(0x27, 16, 2); // آدرس LCD معمولاً 0x27 یا 0x3F است void setup() { Wire.begin(); // راهاندازی RTC rtc.initClock(); // راهاندازی LCD lcd.init(); lcd.backlight(); lcd.clear(); // نمایش پیام خوشآمدگویی lcd.setCursor(0, 0); lcd.print("PCF8563 Clock"); delay(2000); lcd.clear(); } void loop() { rtc.getDateTime(); // خط اول: تاریخ lcd.setCursor(0, 0); lcd.print("Date: "); if (rtc.getDay() < 10) lcd.print("0"); lcd.print(rtc.getDay()); lcd.print("/"); if (rtc.getMonth() < 10) lcd.print("0"); lcd.print(rtc.getMonth()); lcd.print("/"); lcd.print("20"); lcd.print(rtc.getYear()); // خط دوم: زمان lcd.setCursor(0, 1); lcd.print("Time: "); if (rtc.getHour() < 10) lcd.print("0"); lcd.print(rtc.getHour()); lcd.print(":"); if (rtc.getMinute() < 10) lcd.print("0"); lcd.print(rtc.getMinute()); lcd.print(":"); if (rtc.getSecond() < 10) lcd.print("0"); lcd.print(rtc.getSecond()); delay(500); } |
نتیجهگیری
PCF8563T یک ماژول RTC قدرتمند و کممصرف است که برای پروژههای حرفهای و سیستمهای باتریدار بسیار مناسب است. با وجود اینکه ممکن است کمی گرانتر و کمتر در دسترس باشد، اما مزایای قابل توجهی مانند مصرف بسیار پایین، دقت بالا، و قابلیتهای پیشرفته مانند آلارم و تایمر را ارائه میدهد.
در مقابل، DS1307 همچنان یک انتخاب عالی برای پروژههای آماتوری، آموزشی، و کاربردهایی است که نیاز به حافظه اضافی دارند. قیمت پایین و دسترسی آسان آن را به یک استاندارد در جامعه سازندگان تبدیل کرده است.
انتخاب بین این دو بستگی به نیازهای خاص پروژه شما دارد:
- برای مصرف کم و عمر باتری بالا: PCF8563T
- برای قیمت پایین و حافظه داخلی: DS1307
- برای دقت بالا و محیطهای سخت: PCF8563T
- برای پروژههای آموزشی و آماتوری: DS1307
با درک کامل هر دو ماژول و نحوه کار با آنها، اکنون میتوانید بهترین تصمیم را برای پروژه خود بگیرید و ساعت دقیق و قابل اعتماد خود را پیادهسازی کنید.






