فهرست مطالب:

استفاده از ماژول های ساعت در زمان واقعی DS1307 و DS3231 با آردوینو: 3 مرحله
استفاده از ماژول های ساعت در زمان واقعی DS1307 و DS3231 با آردوینو: 3 مرحله

تصویری: استفاده از ماژول های ساعت در زمان واقعی DS1307 و DS3231 با آردوینو: 3 مرحله

تصویری: استفاده از ماژول های ساعت در زمان واقعی DS1307 و DS3231 با آردوینو: 3 مرحله
تصویری: Lesson 99: Building Arduino Digital Clock using DS3231 LCD and Seven Segment Display 2024, جولای
Anonim
استفاده از ماژول های ساعت در زمان واقعی DS1307 و DS3231 با آردوینو
استفاده از ماژول های ساعت در زمان واقعی DS1307 و DS3231 با آردوینو
استفاده از ماژول های ساعت در زمان واقعی DS1307 و DS3231 با آردوینو
استفاده از ماژول های ساعت در زمان واقعی DS1307 و DS3231 با آردوینو

ما همچنان درخواست هایی در مورد نحوه استفاده از ماژول های ساعت واقعی DS1307 و DS3231 با Arduino از منابع مختلف دریافت می کنیم-بنابراین این اولین آموزش از دو بخش نحوه استفاده از آنها است. برای این آموزش آردوینو ، ما دو ماژول ساعت در زمان واقعی برای استفاده داریم ، یکی بر اساس Maxim DS1307 (ماژول مربع) و DS3231 (ماژول مستطیل شکل).

دو تفاوت عمده بین IC ها در ماژول های ساعت بلادرنگ وجود دارد که دقت زمان بندی است. DS1307 مورد استفاده در ماژول اول بسیار خوب کار می کند ، اما دمای خارجی می تواند بر فرکانس مدار نوسان ساز که شمارنده داخلی DS1307 را هدایت می کند ، تأثیر بگذارد.

این ممکن است یک مشکل به نظر برسد ، اما معمولاً منجر به خاموش شدن ساعت حدود پنج دقیقه در ماه می شود. DS3231 بسیار دقیق تر است ، زیرا دارای یک نوسان ساز داخلی است که تحت تأثیر عوامل خارجی قرار نمی گیرد - و بنابراین حداکثر تا چند دقیقه در سال دقیق است. اگر شما یک ماژول DS1307 دارید- احساس بدی نداشته باشید ، هنوز هم یک صفحه ارزشمند است و به خوبی به شما خدمت می کند. در هر دو ماژول ، یک باتری پشتیبان مورد نیاز است.

ایده خوبی است که یک باتری CR2032 جدید بخرید و آن را روی ماژول قرار دهید. این ماژول ها علاوه بر پیگیری زمان و تاریخ ، دارای EEPROM کوچک ، عملکرد زنگ خطر (فقط DS3231) و توانایی ایجاد موج مربعی از فرکانس های مختلف هستند-که همه آنها موضوع آموزش دوم خواهند بود.

مرحله 1: اتصال ماژول به آردوینو

هر دو ماژول از گذرگاه I2C استفاده می کنند که اتصال را بسیار آسان می کند.

ابتدا باید مشخص کنید کدام پین در Arduino یا بردهای سازگار شما برای گذرگاه I2C استفاده می شود - اینها به عنوان SDA (یا داده) و SCL (یا ساعت) شناخته می شوند. در Arduino Uno یا بردهای سازگار ، این پین ها برای داده ها و ساعت A4 و A5 هستند ؛ در Arduino Mega پین ها D20 و D21 برای داده و ساعت هستند ؛ و اگر از Pro Mini-compatible استفاده می کنید پین ها A4 و A5 هستند برای داده ها و ساعت ، که موازی با پین های اصلی هستند.

ماژول DS1307

اگر ماژول DS1307 دارید ، باید سیم ها را به برد بچسبانید یا روی چند پین هدر داخلی لحیم کنید تا بتوانید از سیم های بلوز استفاده کنید. سپس پین های SCL و SDA را به آردوینو و پین Vcc را به پین 5 ولت و GND را به GND وصل کنید.

ماژول DS3231

اتصال این ماژول آسان است زیرا پین های هدر بر روی برد در کارخانه نصب شده اند. به سادگی می توانید سیم های بلوز را دوباره از SCL و SDA به آردوینو و دوباره از پین های Vcc و GND ماژول به 5V یا 3.3. V و GND برد خود بکشید. با این حال اینها در طرف دیگر برای لحیم کاری سیم های خود تکرار می شوند. هر دوی این ماژول ها دارای مقاومت کشش مورد نیاز هستند ، بنابراین نیازی به افزودن خود ندارید. مانند همه دستگاه های متصل به گذرگاه I2C ، سعی کنید طول سیم های SDA و SCL را به حداقل برسانید.

مرحله 2: خواندن و نوشتن زمان از ماژول RTC شما

هنگامی که ماژول RTC خود را سیم کشی کردید. طرح زیر را وارد کرده و بارگذاری کنید. اگرچه یادداشت ها و توابع موجود در طرح فقط به DS3231 اشاره دارند ، اما کد با DS1307 نیز کار می کند.

#شامل "Wire.h"#تعریف DS3231_I2C_ADDRESS 0x68 // تبدیل اعداد اعشاری معمولی به بایت اعشاری کد شده دوتایی decToBcd (بایت val) {return ((val/10*16) + (val٪ 10)) ؛ } // تبدیل اعشاری کد شده دوتایی به اعداد اعشاری معمولی byte bcdToDec (byte val) {return ((val/16*10) + (val٪ 16))؛ } void setup () {Wire.begin ()؛ Serial.begin (9600)؛ // زمان اولیه را در اینجا تنظیم کنید: // DS3231 ثانیه ، دقیقه ، ساعت ، روز ، تاریخ ، ماه ، سال // setDS3231 زمان (30 ، 42 ، 21 ، 4 ، 26 ، 11 ، 14) ؛ } void setDS3231 زمان (بایت ثانیه ، بایت دقیقه ، بایت ساعت ، بایت dayOfWeek ، بایت 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 readDS3231 زمان (بایت *ثانیه ، بایت *دقیقه ، بایت *ساعت ، بایت *dayOfWeek ، بایت *dayOfMonth ، بایت *ماه ، بایت *سال) {Wire.beginTransmission (DS3231_I2C_ADDRESS) ؛ Wire.write (0) ؛ // اشاره گر ثبت DS3231 را روی 00h Wire.endTransmission () تنظیم کنید؛ سیم. درخواست از (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 ()) ؛ *month = bcdToDec (Wire.read ()) ؛ *سال = bcdToDec (Wire.read ()) ؛ } void displayTime () {بایت ثانیه ، دقیقه ، ساعت ، dayOfWeek ، dayOfMonth ، ماه ، سال ؛ // بازیابی اطلاعات از DS3231 readDS3231 زمان (& دوم ، & دقیقه ، & ساعت ، & 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) {case 1: Serial.println ("Sunday")؛ زنگ تفريح؛ مورد 2: Serial.println ("دوشنبه") ؛ زنگ تفريح؛ مورد 3: Serial.println ("سه شنبه") ؛ زنگ تفريح؛ مورد 4: Serial.println ("چهارشنبه") ؛ زنگ تفريح؛ مورد 5: Serial.println ("پنجشنبه") ؛ زنگ تفريح؛ مورد 6: Serial.println ("جمعه") ؛ زنگ تفريح؛ مورد 7: Serial.println ("شنبه") ؛ زنگ تفريح؛ }} void loop () {displayTime ()؛ // نمایش داده های ساعت در زمان واقعی در مانیتور سریال ، تأخیر (1000) ؛ // در هر ثانیه }

ممکن است کد زیادی وجود داشته باشد ، با این حال به خوبی به قسمت های قابل تجزیه تقسیم می شود.

این کتابخانه ابتدا شامل کتابخانه Wire است که برای ارتباطات گذرگاه I2C استفاده می شود و سپس آدرس گذرگاه RTC را 0x68 تعریف می کند. این دو تابع را دنبال می کند که اعداد اعشاری را به BCD (اعشاری با کد دوتایی) و بالعکس تبدیل می کند. اینها ضروری هستند زیرا IC های RTC در BCD کار می کنند نه اعشاری.

تابع setDS3231time () برای تنظیم ساعت استفاده می شود. استفاده از آن بسیار آسان است ، ساده مقادیر را از سال به ثانیه وارد کنید و RTC از همان زمان شروع می شود. به عنوان مثال ، اگر می خواهید تاریخ و زمان زیر را تنظیم کنید - چهارشنبه 26 نوامبر 2014 و 21:42 بعد از ظهر و 30 ثانیه - از موارد زیر استفاده کنید:

setDS3231 زمان (30 ، 42 ، 21 ، 4 ، 26 ، 11 ، 14) ؛

مرحله 3:

توجه داشته باشید که زمان با استفاده از زمان 24 ساعته تنظیم شده است و چهارمین پارامتر "روز هفته" است. این مقدار بین 1 تا 7 است که به ترتیب یکشنبه تا شنبه است. اگر از متغیرهای خود استفاده می کنید ، این پارامترها مقدار بایت هستند.

هنگامی که عملکرد را یکبار اجرا کردید عاقلانه است که آن را با // پیشوند کنید و کد خود را دوباره بارگذاری کنید ، بنابراین زمانی که برق دوچرخه سواری شده یا ریست کنترل کننده تنظیم مجدد شده است ، زمان را بازنشانی نمی کند. خواندن زمان از RTC شما به همین سادگی است ، در واقع این فرایند را می توان در داخل تابع displayTime () به دقت دنبال کرد. برای ذخیره داده ها از RTC ، باید هفت متغیر بایت تعریف کنید ، و سپس آنها را در تابع readDS3231time () قرار دهید. به عنوان مثال اگر متغیرهای شما عبارتند از:

بایت ثانیه ، دقیقه ، ساعت ، dayOfWeek ، dayOfMthth ، ماه ، سال ؛

… شما می توانید آنها را با داده های فعلی RTC با استفاده از:

readDS3232 زمان (& دوم ، & دقیقه ، & ساعت ، & dayOfWeek ، & dayOfMonth ، & month ، & year) ؛

سپس می توانید از متغیرها به دلخواه خود استفاده کنید ، از ارسال زمان و تاریخ به مانیتور سریال به عنوان نمونه طرح - تا تبدیل داده ها به فرم مناسب برای انواع دستگاه های خروجی.

فقط برای بررسی اینکه همه چیز در حال کار است ، زمان و تاریخ مناسب را در طرح نمایشی وارد کنید ، آن را بارگذاری کنید ، عملکرد () setDS3231time () را کامنت کنید و دوباره بارگذاری کنید. سپس مانیتور سریال را باز کنید ، و باید صفحه نمایش زمان و تاریخ فعلی در اختیار شما قرار گیرد.

از این مرحله شما اکنون ابزارهای نرم افزاری را برای تنظیم و بازیابی داده ها از ماژول ساعت واقعی خود در اختیار دارید و امیدواریم درک درستی از نحوه استفاده از این ماژول های ارزان قیمت داشته باشید.

شما می توانید در مورد IC های ساعت واقعی خاص از وب سایت سازنده-DS1307 و DS3231 بیشتر بیاموزید.

این پست توسط pmdway.com برای شما ارسال شده است - همه چیز برای سازندگان و علاقه مندان به لوازم الکترونیکی ، با ارسال رایگان در سراسر جهان.

توصیه شده: