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

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

ـ

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

رقاقة DS1307 RTC

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

DS1307-Module-Chip-Crystal-Oscillator

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

الميزة الرائعة الأخرى لهذه اللوحة تأتي مع دبوس SQW ، والذي يخرج واحدًا من أربعة ترددات موجة مربعة 1 هرتز أو 4 كيلو هرتز أو 8 كيلو هرتز أو 32 كيلو هرتز ويمكن تمكينه برمجيًا .

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

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

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

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

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

DS1307-Module-CR2032-Battery-Holder

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

بافتراض استخدام بطارية CR2032 مشحونة بالكامل بقدرة 47 مللي أمبير في الساعة وتستهلك الشريحة 300nA كحد أدنى ، يمكن أن يحافظ battey على تشغيل RTC لمدة لا تقل عن 17.87 عامًا دون مصدر طاقة خارجي 5V .

47mAh/300nA = 156666.67 hours = 6527.78 days = 17.87 years

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

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

DS1307-Module-24C32-EEPROM-Chip

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

The onboard 24C32 EEPROM has a hardwired I2C address and is set to 0x50HEX

ميزة الوحدة المخفية في DS1307 RTC

يوجد فتحات في وحدة DS1307 RTC الخاصة بنا والتي غالباً ما تمر دون أن يلاحظها أحد . إنها تسمح لنا بتثبيت مستشعر درجة حرارة DS18B20 .

توجد 3 فتحات في الزاوية العلوية بجوار حامل البطارية (تُعرف باسم U1) حيث تم تثبيت DS18B20 .

DS1307-Module-Provision-for-DS18B20

بمجرد تثبيت DS18B20 ، ستتمكن من الحصول على قراءات درجة الحرارة من طرف DS . يمكن أيضًا استخدام هذه القراءات لتعويض الانجراف الزمني المستند إلى درجة الحرارة .  قد تحتاج أيضًا إلى المقاوم 4.7K بين VCC و DS .

أطراف وحدة الوقت DS1307 RTC

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

DS1307-RTC-Module-Pinout
  • SQW يخرج دبوس SQW أحد ترددات الموجة المربعة الأربعة 1 هرتز أو 4 كيلو هرتز أو 8 كيلو هرتز أو 32 كيلو هرتز ويمكن تمكينه برمجيًا .
  • DS pin يفترض DS pin قراءات درجة حرارة الإخراج إذا كان لديك وحدة استشعار DS18B20 درجة الحرارة المثبتة مباشرة بجانب حامل البطارية (labled كما U1) .
  • SCL هي مدخلات الساعة لواجهة I2C وتستخدم لمزامنة حركة البيانات على الواجهة التسلسلية .
  • SDA هو إدخال / إخراج البيانات للواجهة التسلسلية I2C .
  • VCC دبوس إمدادات الطاقة للوحدة . يمكن أن يكون في حدود 3.3V إلى 5.5V .
  • GND هو دبوس الأرضي .
  • BAT عبارة عن مدخل إمداد احتياطي لأي خلية ليثيوم 3V قياسية أو أي مصدر طاقة آخر للحفاظ على ضبط وقت دقيق عند انقطاع التيار الرئيسي للجهاز .

الأسلاك - ربط DS1307 RTC مع لاردوينو UNO

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

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

الآن ما زلنا مع الاطراف التي يتم استخدامها للاتصال I2C . لاحظ أن كل لوحة اردوينو بها دبابيس I2C مختلفة يجب توصيلها وفقًا لذلك . على لوحات Arduino ذات تخطيط 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-DS1307-RTC-module-with-Arduino
تنبيه : في حال لم تكن متأكد من قدرتك على تنفيذ خطوات المشروع يرجى استشارة شخص متخصص في هذا المجال.

كود الاردوينو - قراءة التاريخ والوقت

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

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

RTC_DS1307 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.isrunning()) {
    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);
}

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

DS1307-Output-On-Serial-Monitor

أنتهت !!!

اترك تعليقاً

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