תוכן עניינים:

שימוש במודולי שעון בזמן אמת של DS1307 ו- DS3231 עם Arduino: 3 שלבים
שימוש במודולי שעון בזמן אמת של DS1307 ו- DS3231 עם Arduino: 3 שלבים

וִידֵאוֹ: שימוש במודולי שעון בזמן אמת של DS1307 ו- DS3231 עם Arduino: 3 שלבים

וִידֵאוֹ: שימוש במודולי שעון בזמן אמת של DS1307 ו- DS3231 עם Arduino: 3 שלבים
וִידֵאוֹ: FLProg7: שעון וטמפרטורה בזמן אמת | ESP32 NodeMCU | Arduino Visual Embedded Programming 2024, נוֹבֶמבֶּר
Anonim
שימוש במודולי שעון בזמן אמת של DS1307 ו- DS3231 עם Arduino
שימוש במודולי שעון בזמן אמת של DS1307 ו- DS3231 עם Arduino
שימוש במודולי שעון בזמן אמת של DS1307 ו- DS3231 עם Arduino
שימוש במודולי שעון בזמן אמת של DS1307 ו- DS3231 עם Arduino

אנו ממשיכים לקבל בקשות כיצד להשתמש במודולי שעון בזמן אמת של DS1307 ו- DS3231 עם Arduino ממקורות שונים-כך שמדובר במדריך ראשון מתוך שני חלקים כיצד להשתמש בהם. להדרכה זו של Arduino יש לנו שני מודולי שעון בזמן אמת, אחד מבוסס על ה- Maxim DS1307 (המודול המרובע) וה- DS3231 (המודול המלבני).

ישנם שני הבדלים עיקריים בין ה- IC במודולי השעון בזמן אמת, שהם דיוק שמירת הזמן. ה- DS1307 המשמש במודול הראשון פועל טוב מאוד, אולם הטמפרטורה החיצונית יכולה להשפיע על תדירות מעגל המתנדים המניע את המונה הפנימי של DS1307.

זה עשוי להישמע כבעיה, אולם בדרך כלל זה יגרום לכך שהשעון יכבה בערך בחמש דקות בערך בחודש. ה- DS3231 מדויק הרבה יותר, מכיוון שיש לו מתנד פנימי שאינו מושפע מגורמים חיצוניים - ולכן מדויק עד כמה דקות בשנה לכל היותר. אם יש לך מודול DS1307- אל תרגיש רע, זה עדיין לוח בעל ערך רב וישרת אותך היטב. עם שני המודולים, נדרשת סוללת גיבוי.

מומלץ לקנות סוללת CR2032 חדשה ולהתאים אותה למודול. יחד עם מעקב אחר השעה והתאריך, למודולים אלה יש גם EEPROM קטן, פונקציית אזעקה (DS3231 בלבד) והיכולת ליצור גל מרובע של תדרים שונים-כל אלה יהיו נושא הדרכה שנייה.

שלב 1: חיבור המודול שלך לארדואינו

שני המודולים משתמשים באוטובוס I2C, מה שהופך את החיבור לפשוט מאוד.

ראשית יהיה עליך לזהות אילו סיכות בארדואינו או לוחות תואמים שלך משמשים לאוטובוס I2C - אלה יהיו ידועים בשם SDA (או נתונים) ו- SCL (או שעון). בלוחות Arduino Uno או לוחות תואמים, סיכות אלה הן A4 ו- A5 עבור נתונים ושעון; ב- Arduino Mega הפינים הם D20 ו- D21 עבור נתונים ושעון; ואם אתה משתמש ב- Pro Mini תואם הסיכות הן A4 ו- A5 עבור נתונים ושעון, המקבילים לסיכות הראשיות.

מודול DS1307

אם ברשותך מודול DS1307 יהיה עליך להלחם את החוטים ללוח, או להלחם על כמה סיכות כותרת מוטבעות כדי שתוכל להשתמש בחוטי מגשר. לאחר מכן חבר את סיכות SCL ו- SDA ל- Arduino שלך ואת סיכת ה- Vcc לסיכה 5V ו- GND ל- GND.

מודול DS3231

חיבור מודול זה קל מכיוון שסיכות כותרת מותקנות על הלוח במפעל. אתה יכול פשוט להריץ חוטי מגשר שוב מ- SCL ו- SDA אל הארדואינו ושוב מסיכות ה- Vcc וה- GND של המודול ועד 5V או 3.3. V ו- GND של הלוח שלך. עם זאת אלה משוכפלים בצד השני להלחמת החוטים שלך. לשני המודולים הללו יש את נגדי המשיכה הנדרשים, כך שלא תצטרך להוסיף משלך. כמו כל המכשירים המחוברים לאוטובוס I2C, נסה לשמור על אורך חוטי ה- SDA וה- SCL למינימום.

שלב 2: קריאה וכתיבה של הזמן מתוך מודול ה- RTC שלך

לאחר חיבור מודול ה- RTC שלך. היכנס והעלה את המערכון הבא. למרות שההערות והפונקציות בסקיצה מתייחסות רק ל- DS3231, הקוד עובד גם עם ה- DS1307.

#כלול "Wire.h" #define DS3231_I2C_ADDRESS 0x68 // המרת מספרים עשרוניים תקינים לבריטים עשרוניים מקודדים בתים decToBcd (byte val) {return ((val/10*16) + (val%10)); } // המרת עשרוני מקודד בינארי למספרים עשרוניים תקינים בתים bcdToDec (byte val) {return ((val/16*10) + (val%16)); } הגדרת חלל () {Wire.begin (); Serial.begin (9600); // הגדר את השעה הראשונית כאן: // DS3231 שניות, דקות, שעות, יום, תאריך, חודש, שנה // setDS3231time (30, 42, 21, 4, 26, 11, 14); } void setDS3231time (בייט שני, דקה בתים, שעה בתים, בתים dayOfWeek, byte dayOfMonth, חודש בתים, שנה בתים) {// מגדיר נתוני זמן ותאריך ל- DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // הגדר את הקלט הבא כדי להתחיל ברישום השניות Wire.write (decToBcd (השני)); // הגדר שניות Wire.write (decToBcd (דקה)); // הגדר דקות Wire.write (decToBcd (שעה)); // הגדר שעות Wire.write (decToBcd (dayOfWeek)); // קבע יום בשבוע (1 = יום ראשון, 7 = שבת) Wire.write (decToBcd (dayOfMonth)); // הגדר תאריך (1 עד 31) Wire.write (decToBcd (חודש)); // הגדר חודש Wire.write (decToBcd (שנה)); // הגדר שנה (0 עד 99) Wire.endTransmission (); } void readDS3231time (בייט *שנייה, בייט *דקה, בייט *שעה, בייט *dayOfWeek, בייט *dayOfMonth, בת *חודש, בייט *שנה) {Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // הגדר את מצביע הרישום של DS3231 ל- Wh.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // לבקש שבעה בתים של נתונים מ- DS3231 החל מהרישום 00h *second = bcdToDec (Wire.read () & 0x7f); *דקה = bcdToDec (Wire.read ()); *שעה = bcdToDec (Wire.read () & 0x3f); *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *חודש = bcdToDec (Wire.read ()); *year = bcdToDec (Wire.read ()); } void displayTime () {בתים שנייה, דקה, שעה, dayOfWeek, dayOfMonth, חודש, שנה; // אחזר נתונים מ- DS3231 readDS3231time (& second, & minute, & hour, & dayOfWeek, & dayOfMonth, & month, & year); // שלח אותו לצג הטורי Serial.print (שעה, DEC); // להמיר את משתנה הבייט למספר עשרוני כאשר הוא מוצג Serial.print (":"); if (דקה <10) {Serial.print ("0"); } Serial.print (דקה, DEC); Serial.print (":"); if (השני <10) {Serial.print ("0"); } Serial.print (שני, DEC); Serial.print (""); Serial.print (dayOfMonth, DEC); Serial.print ("/"); Serial.print (חודש, DEC); Serial.print ("/"); Serial.print (שנה, DEC); Serial.print ("יום בשבוע:"); switch (dayOfWeek) {מקרה 1: Serial.println ("יום ראשון"); לשבור; מקרה 2: Serial.println ("שני"); לשבור; מקרה 3: Serial.println ("יום שלישי"); לשבור; מקרה 4: Serial.println ("רביעי"); לשבור; מקרה 5: Serial.println ("חמישי"); לשבור; מקרה 6: Serial.println ("יום שישי"); לשבור; מקרה 7: Serial.println ("שבת"); לשבור; }} לולאת חלל () {displayTime (); // להציג את נתוני השעון בזמן אמת על הצג הטורי, עיכוב (1000); // כל שנייה }

יכול להיות שיש הרבה קוד, אולם הוא מתפרק היטב לחלקים הניתנים לניהול.

הוא כולל תחילה את ספריית Wire, המשמשת לתקשורת אוטובוסים I2C, ואחריה הגדרת כתובת האוטובוס עבור ה- RTC כ- 0x68. אחריהן שתי פונקציות הממירות מספרים עשרוניים ל- BCD (עשרוני מקודד בינארי) ולהיפך. אלה נחוצים מכיוון שמעגלי ה- RTC פועלים ב- BCD ולא עשרוני.

הפונקציה setDS3231time () משמשת להגדרת השעון. השימוש בו קל מאוד, פשוט הכנס את הערכים משנה לשנה, ו- RTC יתחיל מאותה תקופה. לדוגמה, אם ברצונך להגדיר את התאריך והשעה הבאים - יום רביעי, 26 בנובמבר, 2014 ושעה 21:42 ו -30 שניות - תשתמש ב:

setDS3231time (30, 42, 21, 4, 26, 11, 14);

שלב 3:

שים לב כי השעה נקבעת באמצעות 24 שעות, והפרמטר הרביעי הוא "יום השבוע". זה נופל בין 1 ל -7 שהם ימים ראשון עד שבת בהתאמה. פרמטרים אלה הם ערכי בתים אם אתה מחליף משתנים משלך.

לאחר שהפעלת את הפונקציה פעם אחת זה חכם להקדים אותה עם // ולהעלות את הקוד שלך שוב, כך שהוא לא יאפס את הזמן ברגע שהספק יופעל או יופעל מחדש. קריאת זמן טופס ה- RTC שלך פשוט לא פחות, למעשה ניתן לעקוב אחר התהליך בצורה מסודרת בתוך הפונקציה displayTime (). יהיה עליך להגדיר שבעה משתני בתים כדי לאחסן את הנתונים מה- RTC, ואז אלה מוכנסים לפונקציה readDS3231time (). לדוגמה אם המשתנים שלך הם:

בייט שני, דקה, שעה, dayOfWeek, dayOfMonth, חודש, שנה;

… היית מרענן אותם עם הנתונים הנוכחיים מה- RTC באמצעות:

readDS3232time (& second, & minute, & hour, & dayOfWeek, & dayOfMonth, & month, & year);

לאחר מכן תוכל להשתמש במשתנים כראות עינייך, החל משליחת השעה והתאריך למסך הטורי כפי שעושה הסקיצה לדוגמא - להמרת הנתונים לצורה מתאימה לכל מיני התקני פלט.

רק כדי לבדוק שהכל עובד, הכנס את שעת התאריך המתאימה למערכון ההדגמה, העלה אותו, הערה על הפונקציה setDS3231time () והעלה אותו שוב. לאחר מכן פתח את הצג הטורי, ותקבל תצוגה פועלת של השעה והתאריך הנוכחיים.

מנקודה זו כעת יש לך את כלי התוכנה להגדרת נתונים ולאחזורם ממודול השעון בזמן אמת, ואנו מקווים שיש לך הבנה כיצד להשתמש במודולים זולים אלה.

אתה יכול ללמוד עוד על ICs השעונים בזמן אמת במיוחד מאתר היצרן-DS1307 ו- DS3231.

את הפוסט הזה הביאה לכם pmdway.com - הכל ליצרנים ולחובבי האלקטרוניקה, עם משלוח חינם לכל רחבי העולם.

מוּמלָץ: