ماهي وحدة الوقت الحقيقي DS3231 RTC و مواجهة مع اردوينو ؟ اكتب تعليقُا

تم نشر هذا المشروع لجميع الأشخاص المهتمين في مجال تصنيع وابتكار المشاريع الإلكترونية والبرمجية، و نود التنويه أن موقع انا الكتروني يخلي مسؤوليته التامة في حال لم يعمل المشروع لدى العميل أو في حال الاستخدام الخاطئ للمكونات الإلكترونية والكهربائية التي قد تؤدي لحدوث الحرائق أو غيرها لا سمح الله.

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

نعلم جميعًا أن معظم وحدات MCU التي نستخدمها في مشاريعنا هي من غير وحدة الوقت ؛ ببساطة من وضعوها أنهم غير مدركين للوقت من حولهم . كل شيء على مايرام بالنسبة لمعظم مشاريعنا ، لكن من حين إلى آخر عندما تصادف فكرة يكون فيها الحفاظ على الوقت من الشواغل الرئيسية ، تعد وحدة DS3231 Precision RTC منقذًا عند ذاك الحين . إنها مثالية للمشاريع التي تحتوي على تسجيل البيانات ، وبناء الساعة ، وختم الوقت ، وأجهزة ضبط الوقت وأجهزة الإنذار .

شريحة أو رقاقة DS3231 RTC عن قرب

يوجد في قلب الوحدة شريحة RTC منخفضة التكلفة ودقيقة للغاية . إنها من يدير جميع وظائف ضبط الوقت وتتميز بواجهة برتكول I2C بسيطة من سلكين والتي يمكن ربطها بسهولة مع أي متحكم من اختيارك .

DS3231-RTC-Module-Chip

تحتفظ الشريحة بمعلومات عن الثواني والدقائق والساعات واليوم والتاريخ والشهر والسنه . يتم ضبط التاريخ في نهاية الشهر تلقائيًا لعدة أشهر مع أقل من 31 يومًا ، بما في ذلك تصحيحات سنه كبيسة (صالحة حتى 2100).

تعمل الساعة إما بتنسيق 24 ساعة أو 12 ساعة مع مؤشر AM / PM  .
الميزة الرائعة الأخرى لهذه اللوحة تأتي مع دبوس SQW ، والذي ينتج موجة مربعة لطيفة إما بسرعة 1Hz أو 4Hz  أو 8Hz أو 32Hz ويمكن معالجتها برمجيًا .

المذبذب الكريستالي التعويضي لدرجة الحرارة (TCXO)

تأتي معظم وحدات RTC مع بلورة 32 كيلو هرتز خارجية لحفظ الوقت . لكن المشكلة في هذه البلورات هي أن درجة الحرارة الخارجية يمكن أن تؤثر على تردد التذبذب . هذا التغيير في التردد يمكن أن يكون ضئيلًا ولكنه بالتأكيد يضيف قيمة .

لتجنب هذه الانجرافات الطفيفة في البلورات ، يتم تشغيل DS3231 بواسطة مذبذب بلوري مكافئ بدرجة حرارة 32 كيلو هرتز (TCXO) . إنه محصن ضد تغيرات درجة الحرارة الخارجية .

TCXO-Crystal-Oscillator-Compensation

يتم حزم TCXO داخل رقاقة RTC ، مما يجعل الحزمة بأكملها ضخمة . بجوار البلورة المدمجة يوجد مستشعر درجة الحرارة .

يعوض هذا المستشعر تغييرات التردد عن طريق إضافة أو إزالة علامات الساعة حتى يظل ضبط الوقت في المسار الصحيح .
هذا هو السبب في أن TCXO توفر ساعة مرجعية مستقرة ودقيقة ، وتحافظ على RTC في حدود ± 2 دقيقة في السنه .

DS3231 Vs DS1307

الفرق الرئيسي بين DS3231 و DS1370 هو دقة حفظ الوقت .

يأتي DS1307 مزودًا بكريستال 32 كيلو هرتز خارجي لحفظ الوقت الذي يتأثر تردد التذبذب به بسهولة بواسطة درجة الحرارة الخارجية . ينتج عن هذا عادةً إيقاف الساعة بحوالي خمس دقائق تقريبًا أو نحو ذلك في الشهر .

ومع ذلك ، فإن DS3231 أكثر دقة بكثير ، لأنه يأتي مع مذبذب بلوري مكافئ لدرجة الحرارة (TCXO) لا يتأثر بدرجة الحرارة ، مما يجعله دقيقًا حتى بضع دقائق في السنه على الأكثر .
لا يزال DS1307 يمثل قيمة كبيرة  لوحدة RTC ويخدمك جيدًا ، ولكن بالنسبة للمشروعات التي تتطلب حفظًا أكثر دقة للوقت ، يوصى DS3231 .

البطارية الاحتياطية

يشتمل DS3231 على مقعد إدخال البطارية ، ويحافظ على ضبط الوقت بدقة عند انقطاع التيار الرئيسي للجهاز .

تراقب الدائرة المضمنة للطاقة بشكل مستمر حالة VCC للكشف عن انقطاع التيار الكهربائي والتحول تلقائيًا إلى وحدة التزويدالاحتياطي . لذلك ، لا داعي للقلق بشأن انقطاع التيار الكهربائي ، فلا يزال بإمكان وحدة MCU تتبع الوقت .

DS3231-RTC-Module-CR2032-Battery-Holder

الجانب السفلي من اللوحة يحمل حامل بطارية لأوراق ليثيوم ليثيوم 20 مم 3 فولت . يمكن لأي بطارية CR2032 أن تناسب بشكل جيد .

بافتراض استخدام بطارية CR2032 مشحونة بالكامل بسعة 220 مللي أمبير في الساعة وتستهلك الرقاقة الحد الأدنى 3µA لها ، يمكن أن يحافظ battey على تشغيل RTC لمدة لا تقل عن 8 سنوات دون مصدر طاقة خارجي 5V .

220mAh/3µA = 73333.34 hours = 3055.56 days = 8.37 years

على متن اللوحة 24C32 EEPROM

وحدة DS3231 RTC تأتي أيضًا مع شريحة EEPROM بسعة 24 بايت من شركة Atmel لها دورات قراءة وكتابة غير محدودة . يمكن استخدامه لحفظ الإعدادات أو أي شيء لاحقًا .

DS3231-RTC-Module-24C32-EEPROM-I2C-Address-Selection-Jumpers

يستخدم 24C32 EEPROM مواجهة برتكول I2C للاتصال ويشارك في نفس ناقل برتكول I2C مثل DS3231 .

يمكن تغيير عنوان برتكول I2C الخاص بـ EEPROM بسهولة مع أطراف اللحام الثلاثة A0 و A1 و A2 في الخلف . كل واحد من هذه تستخدم ل hardcode في العنوان . إذا تم اختزال العبور بسلك ، فهذا يعين العنوان .

I2C-Address-selection-jumpers-on-DS3231-module

وفقًا لورقة البيانات 24C32 ، يتم وضع هذه البتات الثلاثة في نهاية عنوان I2C ذي 7 بت ، قبل وقت القراءة / الكتابة مباشرة .

24C32-EEPROM-I2C-Address-Register

نظرًا لوجود 3 مدخالات عنوان ، والتي يمكن أن تأخذ حالتين ، إما عالية أو منخفضة ، يمكننا بالتالي إنشاء 8 = (23) مجموعات مختلفة (عناوين) .

تلميح :

بشكل افتراضي ، يتم سحب جميع مدخلات العنوان 3 بقيمة عالية باستخدام مقاومات السحب على اللوحة ، مما يمنح 24C32 عنوان I2C افتراضيًا وهو 1010111Binary or 0x57Hex

عن طريق التقليل من اطراف الحام ، يتم إدخال مدخلات العنوان بقيم منخفضة . يسمح لك ذلك بتعيين عنوان I2C وفقًا للجدول أدناه .

DS3231-RTC-module-24C32-EEPROM-I2CAddress-Selection-Jumpers-Tables

اطراف DS3231 RTC Module

تحتوي الوحدة DS3231 RTC على 6 دبابيس تصلها بالعالم الخارجي . الاتصالات كالتالي :

DS3231-RTC-Module-Pinout
  • 32K دبوس بخرج مستقر (درجة الحرارة التعويضي) وإشارة ساعة دقيقة.
  • SQW يخرج موجة مربعة لطيفة إما بسرعة 1Hz أو 4 كيلو هرتز أو 8 كيلو هرتز أو 32 كيلو هرتز ويمكن معالجتها برمجيًا .
  • SCL هو دبوس الساعة التسلسلية لواجهة I2C .
  • SDA هو دبوس البيانات التسلسلية لواجهة I2C .
  • VCC دبوس إمدادات الطاقة للوحدة . يمكن أن يكون في حدود 3.3V إلى 5.5V.
  • GND هو دبوس الأرضي .

الأسلاك - وربط وحدة DS3231 RTC لاردوينو UNO

دعنا نربط RTC مع الاردوينو الان .

الاتصالات بسيطة إلى حد ما . ابدأ بتوصيل دبوس VCC بمخرج 5V على Arduino وقم بتوصيل GND بالأرضي .

الآن ما زلنا مع الاطراف التي يتم استخدامها للاتصال I2C . لاحظ أن كل لوحة اردوينو بها دبابيس I2C مختلفة يجب توصيلها وفقًا لذلك . على لوحات الاردوينو ذات تخطيط R3 ، توجد SDA (خط البيانات) و SCL (خط الساعة) على رؤوس الدبوس القريبة من دبوس AREF . وهي معروفة أيضًا باسم A5 (SCL) و A4 (SDA) .

SCL SDA
Arduino Uno A5 A4
Arduino Nano A5 A4
Arduino Mega 21 20
Leonardo/Micro 3 2

يوضح لك الرسم التوضيحي التالي كيفية توصيل كل شيء .

Wiring-DS3231-RTC-module-with-Arduino
تنبيه : في حال لم تكن متأكد من قدرتك على تنفيذ خطوات المشروع يرجى استشارة شخص متخصص في هذا المجال.

الكود البرمجي - قراءة التاريخ والوقت

سوف يوفر لك الكود التالي فهمًا تامًا لكيفية تعيين / قراءة التاريخ والوقت على وحدة DS3231 RTC ويمكن أن يكون بمثابة أساس لمزيد من التجارب العملية والمشاريع .

لتحميل الكود البرمجي اضغط هنا
#include <Wire.h>
#include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup () 
{
  Serial.begin(9600);
  delay(3000); // wait for console opening

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
  
  // Comment out below lines once you set the date & time.
    // Following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  
    // Following line sets the RTC with an explicit date & time
    // for example to set January 27 2017 at 12:56 you would call:
    // rtc.adjust(DateTime(2017, 1, 27, 12, 56, 0));
  }
}

void loop () 
{
    DateTime now = rtc.now();
    
    Serial.println("Current Date & Time: ");
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    Serial.print(") ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    Serial.println("Unix Time: ");
    Serial.print("elapsed ");
    Serial.print(now.unixtime());
    Serial.print(" seconds/");
    Serial.print(now.unixtime() / 86400L);
    Serial.println(" days since 1/1/1970");
    
    // calculate a date which is 7 days & 30 seconds into the future
    DateTime future (now + TimeSpan(7,0,0,30));
    
    Serial.println("Future Date & Time (Now + 7days & 30s): ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
    
    Serial.println();
    delay(1000);
}

إليك كيفية ظهور الإخراج في الشاشة التسلسلية .

DS3231-Output-On-Serial-Monitor

أنتهت !!!

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *