ARDUINOAVRSTM32بسکامکدویژن

راه اندازی ماژول ساعت ds3231 با STM32 – کدویژن – آردوینو – بسکام

پروژه ساعت بسیار دقیق با ماژول DS3231 + قابلیت تنظیم + تقویم شمسی

RTC داخلی میکروکنترلرها

همانطور که می دانیم بیشتر میکروکنترلرهایی که برای پروژه های خود استفاده می کنیم ، دارای پریفرال یا بخش داخلی به نام (RTC(real time clock جهت ایجاد زمان واقعی هستند .

برای ایجاد زمان یک ثانیه واقعی نیاز به فرکانس 32.768KHz می باشد ، در میکروکنترلرهای که دارای RTC داخلی هستند این فرکانس از طریق یک نوسانساز RC داخلی (فقط در برخی از میکروکنترلرها وجود دارد) و یا از طریق کریستال های خارجی با نام کریستال ساعت تامین می شود . برای استفاده از کریستال ساعت خارجی ، دو پایه از میکروکنترلر به همین منظور اختصاص داده شده است .

شما نیز شاید تا کنون از کریستال های ساعت خارجی برای راه اندازی بخش RTC میکروکنترلر ها استفاده کرده باشید . تصویر زیر یک نمونه کریستال با فرکانس ۳۲٫۷۶۸ کیلو هرتز می باشد .

کریستال ساعت 32.768 کیلوهرتز
کریستال ساعت 32.768 کیلوهرتز

چرا ساعت RTC داخلی میکروکنترلر دقیق نیست؟

شاید تا به حال در پروژه های خود برای سنجش زمان واقعی از RTC داخلی میکروکنترلر استفاده کرده اید . اما در سنجش زمان های طولانی متوجه اختلاف و در اصطلاح جا ماندن زمان از ساعت واقعی شده باشید و این سوال برای شما پیش آمده باشد که چرا ساعت با اختلاف مواجه شده است .

همانطور که قبلا اشاره کردیم برای ایجاد زمان یک ثانیه واقعی و دقیق به فرکانس کلاک 32.768 کیلوهرتز نیاز است . کریستال های ساعت خارجی موجود در بازار اکثرا نامرغوب هستند و بطور دقیق فرکانس 32.768 کیلو هرتز تولید نمی کنند . حتی اختلاف چند صدم هرتز در فرکانس تولید شده توسط کریستال ها در زمان های طولانی ایجاد اختلاف خواهد نمود .

دلیل دیگر دقیق نبودن RTC داخلی میکروکنترلر بخاطر اختلاف و تغییرات دمای محیط می باشد . تغییرات دما بر فرکانس کریستال تاثیر گزار بوده و باعث ایجاد اختلاف در زمان ساعت می شود .

دلیل دیگر می تواند به خاطر ضربه و یا لرزش کریستال ایجاد شود ، اگر دستگاه شما سیار است سعی کنید کریستال ساعت را بر روی بورد کاملا به حالت خوابیده و فیکس قرار دهید تا لرزش و ضربه به بورد ، کمترین تاثیر را بر روی فرکانس کریستال و ساعت ایجاد کند .

در اکثر پروژه ها این اختلاف زمانی برای ما مشکل ساز نیست ، مثلا در یک پروژه نیاز است هر نیم ساعت مقدار یک سنسور را ثبت کنیم و اختلاف چند ثانیه ای برای ما مشکل ایجاد نمی کند . اما در برخی از پروژه ها مانند ثبت اطلاعت دقیق بر اساس زمان واقعی ، ساخت ساعت دیجیتال ، ساخت تایمر و آلارم هشدار و یا دستگاه ساعت زنی ورود و خروج ، ایجاد زمان واقعی بسیار اهمیت دارد . به همین منظور بهتر است بجای استفاده از RTC داخلی میکروکنترلرها از آی سی های RTC استفاده شود .

 

معرفی آی سی ساعت RTC بسیار دقیق

ds3231 یک آی سی ساعت  (RTC(real time clock بسیار دقیق است و از یک رابط I2C دو سیمه برخوردار است که به راحتی با هر میکروکنترلر دلخواه شما ارتباط برقرار می کند . اکثر شما شاید با آی سی ساعت DS1307 آشنایی داشته باشید و حتی در کنار پروژه هایی که نیاز به اندازه گیری زمان دقیق و واقعی است از  آی سی DS1307 استفاده کرده باشید .

آی سی DS1307 برای ایجاد زمان یک ثانیه از کریستال خارجی ۳۲٫۷۶۸ Khz استفاده می کند . به دلیل نامرغوب بودن این کریستال ها همیشه فرکانس آن ها برابر ۳۲٫۷۶۸ کیلوهرتز نخواهد بود و چند هرتز با مقدار ایده آل تفاوت دارد . همین اختلاف باعث می شود تا مقدار ساعت قرائت شده از  آی سی DS1307 در مدت زمان طولانی با مقدار ساعت واقعی اختلاف داشته باشد . حتی تغییر دمای محیط نیز باعث تغییر روی فرکانس این کریستال می شود ، و باعث اختلاف در اندازه گیری زمان واقعی می شود .

برای رفع نواقص  آی سی ساعت DS1307 ، نسل جدید این آی سی با نام DS3231 ارائه شد ، که برای جبران سازی تغییر فرکانس کریستال به دلیل تغییر دما از روشی با نام TCXO : Temperature compenstated crystal osillator استفاده شده است .

با اندازه گیری دما و مدارات جبران ساز آنالوگ ، فرکانس خروجی نوسان ساز نسبت به تغییرات دما همواره ثابت و برابر با مقدار ۳۲٫۷۶۸ کیلو هرتز می باشد . به همین منظور کریستال به همراه سنسور دما به صورت داخلی درون آی سی ds3231 استفاده شده و دیگر نیاز به اتصال کریستال خارجی نمی باشد .

پسوند N در تراشه DS3231 می تواند در رنج دمایی بیشتری کار کند .

DS3231S……………………………..0°C to +70°C
DS3231SN………………………. -40°C to +85°C

معرفی ماژول ds3231

اگر برای تهیه  آی سی ساعت ds3231 به بازار مراجعه نمائید ، با ماژول هایی با نام ds3231 مواجه خواهید شد .  ماژول ds3231 ،بورد راه اندازی است که تشکیل شده از یک آی سی ساعت ds3231 به همراه یک باطری بک آپ ۳ ولتی و یک آی سی حافظه EEPROM با ظرفیت ۳۲ کیلو بایت ، با نام AT24C32 می باشد .

آی سی ds3231 اطلاعات ثانیه ، دقیقه ، ساعت ، روز ، تاریخ ، ماه و سال را محاسبه و حفظ می کند.

آی سی DS3231 مجهز به سنسور دمای داخلی ۱۰ بیتی با رزولوشن ۰٫۲۵ درجه سانتیگراد و دو آلارم با قابلیت تنظیم بر اساس سال ، ماه ، روز ، ساعت ، دقیقه و ثانیه می باشد .

تاریخ پایان ماه به طور خودکار برای ماههایی با کمتر از 31 روز تنظیم می شود ، از جمله اصلاحات برای سال کبیسه (تا 2100 معتبر).

فرمت ساعت تراشه ds3231 در دو قالب 24 ساعته یا 12 ساعته با نشانگر AM / PM می تواند کار می کند.

ماژول DS3231
ماژول DS3231

 

معرفی پایه های ماژول ds3231

ماژول ds3231 دارای 6 پایه به شرح زیر می باشد :

ds3231 pinout
ds3231 pinout

32K :  این پایه توسط بیت EN32KHZ در رجیستر Control/Status(0Fh) تعیین وضعیت می شود . اگر بیت  1=EN32KHZ باشد سیگنال موج مربعی با فرکانس 32.768 کیلو هرتز روی این پایه تولید می شود و اگر بیت 0=EN32KHZ باشد این پایه به وضعیت High-impedance در می آید .

SQW : این پایه دو وضعیت دارد . یک وضعیت برای خروجی موج مربعی و یک وضعیت برای وقفه آلارم ها استفاده می شود . توسط بیت INTCN در رجیستر Control(0Eh) تعیین وضعیت می شود . اگر بیت INTCN=0 باشد پایه SQW به عنوان خروجی موج مربعی عمل می کند و اگر بیت INTCN=1 باشد به عنوان اینتراپت آلارم ها عمل می کند . که بصورت ACTIVE LOW می باشد یعنی حالت فعال شدن این پایه با سطح صفر است . خروجی این پایه OPEN-DRAIN است و باید توسط یک مقاومت 10 کیلو اهم ، پول آپ شود .

SCL  : پایه کلاک برای ارتباط با میکروکنترلر با پروتکل I2C

SDA : پایه دیتا برای ارتباط با میکروکنترلر با پروتکل I2C

VCC :  پایه تغذیه ماژول است ، ولتاژ مناسب تغذیه ماژول 3.3 ولت می باشد .

GND : پایه گراند ماژول است و باید به زمین مدار متصل شود.

معرفی رجیسترهای آی سی ds3231

آی سی DS3231  دارای 19 بایت رجیستر داخلی می باشد . که در آدرس 00H تا 12H  قرار دارند .  باید توجه داشت که جهت نوشتن و خواندن در قسمت های زمان ، تقویم و آلارم ، اطلاعات باید به صورت کد BCD باشد .

رجیسترهای آی سی ds3231
رجیسترهای آی سی ds3231

در ادامه به تفصیل به هر کدام از رجیستر ها خواهیم پرداخت .

00H :
در این آدرس عدد ثانیه به صورت کد BCD قرار دارد ، چهاربیت اول نشانگر رقم یکان و سه بیت دوم نشانگر رقم دهگان می باشد . محدوده تغییرات این بایت از 00 تا 59 می باشد .

01H :
در این آدرس عدد دقیقه  به صورت کد BCD قرار دارد ، چهاربیت اول نشانگر رقم یکان و سه  بیت دوم نشانگر رقم دهگان می باشد . محدوده تغییرات این بایت از 00 تا 59 می باشد .

02H :
در این آدرس عدد ساعت  به صورت کد BCD قرار دارد ، بیت 6 از این رجیستر تایین کننده فرمت ساعت به صورت 12/24  است . اگر بیت 6 صفر باشد ساعت در مد 24 ساعته کار می کند ، که چهار بیت اول نشانگر رقم یکان و بیت های 4 و 5 نشانگر رقم دهگان ساعت می باشند و محدوده تغییرات این بایت از 00 تا 23 خواهد بود .

اگر بیت 6 یک باشد ساعت در مد 12 ساعته کار می کند ، که چهار بیت اول نشانگر رقم یکان و بیت 4 نشانگر رقم دهگان ساعت بوده و بیت 5 نشانگر AM/PM ساعت می باشند . اگر بیت 5 صفر باشد نشانگر صبح یا AM و اگر بیت 5 یک باشد نشانگر بعد از ظهر یا PM می باشد  و محدوده تغییرات این بایت از 1 تا 12 می باشد .

03H :
در این آدرس عدد روز هفته به صورت کد BCD قرار دارد ، محدوده تغییرات این بایت از 1 تا 7 می باشد که نشانگر هفت روز هفته است .

04H :
در این آدرس عدد روزهای یک ماه به صورت کد BCD قرار دارد ، محدوده تغییرات این بایت از 1 تا 31 می باشد که نشانگر تعداد روزهای ماه  است .

05H :
در این آدرس عدد تعداد ماه های یک سال به صورت کد BCD قرار دارد ، محدوده تغییرات این بایت از 1 تا 12 می باشد که نشانگر تعداد ماه های یک سال  است . بیت 7 از این رجیستر مربوط به گذشت یک قرن می باشد .

06H :
در این آدرس عدد تعداد سال های یک قرن به صورت کد BCD قرار دارد ، چهاربیت اول نشانگر رقم یکان و چهار بیت دوم نشانگر رقم دهگان می باشد .  محدوده تغییرات این بایت از 00 تا 99 می باشد که نشانگر تعداد سال های یک قرن  است . یعد از گذشت 99  مقدار این بایت 00 می شوند و بیت 7  (Century)از رجیستر 05H یک می شود.

07H – 0AH :
در آدرس های 07H  الی  0AH مقادیر تنظیم آلارم 1 قرار می گیرد ، جهت عملیات نوشتن مقادیر ثانیه و دقیقه و ساعت در آدرس های 07H , 08H , 09H به توضیحات قبل مراجعه شود ، رجیستر 0AH  فقط می تواند به عنوان روز هفته  یا روز ماه تنظیم شود ، اگر بیت 6 از این رجیستر صفر باشد نشانگر روز ماه و اگر بیت 6 یک باشد نشانگر روز هفته می باشد .

بیت 7 هر رجیستربا نامهای A1M1 الی A1M4  نقش فعال کردن هر یک از قسمت های ثانیه ،دقیقه ، ساعت و روز را دارد ، که با مقدار صفر فعال و با یک غیر فعال می شوند .

اگرمقادیر  A1M1 الی A1M4 یک باشد ، هر ثانیه یک بار آلارم رخ می دهد و فلگ (A1F) مربوط به آلارم یک ، فعال می شود  و اگر اینتراپت آلارم یک( A1IE) ،  فعال باشد ، روی پایه SQW وقفه رخ می دهد ، برای پاک کردن فلگ آلارم یک ،  باید مقدار صفر در آن نوشت . با صفر کردن فلگ پایه SQW به حالت قبل باز می گردد.

0BH – 0DH :
در آدرس های 0BH  الی  0DH مقادیر تنظیم آلارم 2 قرار می گیرد ، نحوه تنظیم مقادیر آلارم 2 مانند تنظیم آلارم 1 می باشد با این تفاوت که در آلارم 2 ، رجیستر ثانیه وجود ندارد.
در حالت پیش فرض مقادیر   A2M2 الی A2M4 یک می باشد در این حالت هر دقیقه یک بار آلارم رخ می دهد و فلگ (A2F) مربوط به آلارم دو ، فعال می شود  و اگر اینتراپت آلارم دو( A2IE)  فعال باشد ، روی پایه SQW وقفه رخ می دهد ، برای پاک کردن فلگ آلارم دو ،  باید مقدار صفر در آن نوشت . با صفر کردن فلگ پایه SQW به حالت قبل باز می گردد.

آلارم ماژول ds3231
آلارم ماژول ds3231

معرفی رجیستر Control آی سی ds3231

در این رجیستر قسمت های مختلف آی سی ds3231 تنظیم و کنترل می شود . رجیستر کنترل در آدرس 0EH قرار دارد . در ادامه به شرح کامل بیت های این رجیستر می پردازیم .

رجیستر کنترل ماژول ds3231
رجیستر کنترل ماژول ds3231

Bit 7: Enable Oscillator (EOSC)
زمانی که آی سی DS3231 به طور مستقیم از VCC تغذیه می کند ، بدون در نظر گرفتن وضعیت این بیت ، اسیلاتور دائما روشن است . اما زمانی که VCC قطع است و تغذیه از طریق باطری BACK UP تامین می شود اگر این بیت صفر باشد اسیلاتور شروع به کار می کند و اگر این بیت یک باشد  اسیلاتور خاموش است و همه رجیسترهای دیتا در حالت استاتیک هستند . این بیت در حالت پیش فرض صفر هست.

Bit 6: Battery-Backed Square-Wave Enable (BBSQW)
این بیت وضعیت پایه SQW را تایین می کند برای زمانی که VCC قطع است و تغذیه از طریق باطری BACK UP تامین می شود . اگر این بیت یک باشد پایه SQW فعال است و اگر این بیت صفر باشد پایه SQW به حالت high impedance می رود . این بیت در حالت پیش فرض صفر هست .

Bit 5: Convert Temperature (CONV)
در حالت پیش فرض سیکل عملیات تبدیل دما به کد دیجیتال و قرار دادن مقدار دما در رجیسترهای دما 64 ثانیه طول می کشد ، یعنی ما هر 64 ثانیه یک بار مقدار جدید را می توانیم بخوانیم . اما توسط بیت CONV به اجبار می توان عملیات تبدیل را درخواست کرد . زمانی که این بیت را یک کنیم سنسور دما به اجبار عملیات تبدیل به کد دیجیتال و اجرای الگویتم tcxo را انجام می دهد ،اگر این بیت صفر باشد عملیات تبدیل هر 64 ثانیه یک بار انجام می شود .

Bits 4 and 3: Rate Select (RS2 and RS1)
این دو بیت فرکانس موج مربعی ، روی پایه  SQW را تایین می کنند ، فرکانس ها مطابق جدول زیر انتخاب می شوند، مقدار این دو بیت به صورت پیش فرض یک است .

جدول فرکانس پایه sqw ماژول ds3231
جدول فرکانس پایه sqw ماژول ds3231

Bit 2: Interrupt Control (INTCN)
این بیت مشخص می کند که پایه SQW به عنوان اینتراپت آلارم ها عمل کند یا خروجی موج مربعی باشد ، اگر این بیت صفر باشد فرکانس موج مربعی روی پایه SQW قرار می گیرد و اگر این بیت یک باشد پایه SQW به عنوان اینتراپت آلارم عمل می کند ،مقدار این بیت به صورت پیش فرض یک است .

Bit 1: Alarm 2 Interrupt Enable (A2IE)
این بیت اینتراپت  آلارم 2  را فعال می کند . اگر این بیت به همراه  بیت INTCN یک  باشد ، بعد از هر بار مچ شدن آلارم 2 ، روی پایه SQW وقفه رخ  می دهد .

Bit 0: Alarm 1 Interrupt Enable (A1IE)
این بیت اینتراپت  آلارم 1  را فعال می کند . اگر این بیت به همراه  بیت INTCN یک  باشد ، بعد از هر بار مچ شدن آلارم 1 ، روی پایه SQW وقفه رخ  می دهد .

معرفی رجیستر Status آی سی ds3231

در این رجیستر وضعیت قسمت های مختلف آی سی ds3231 مشاهده و بررسی می شود . رجیستر وضعیت در آدرس 0FH قرار دارد . در ادامه به شرح کامل بیت های این رجیستر می پردازیم .

رجیستر وضعیت ماژول ds3231
رجیستر وضعیت ماژول ds3231

Bit 7: Oscillator Stop Flag (OSF)
اگر این بیت یک باشد نشانگر متوقف بودن اسیلاتور است. یک بودن این بیت ممکن است به دلایل زیر باشد :

وقتی که تغذیه را برای اولین بار وصل می کنیم

مقدار ولتاژ تغذیه بین vcc,vbat باشد و برای تغذیه اسیلاتور ناکافی باشد .

در مد باطری بک اپ بیت EOSC خاموش باشد .

به علت نفوذ نویز و تششعات خارجی روی کریستال باشد.

(Bit 3: Enable 32kHz Output (EN32kHz
این بیت وضعیت پایه 32khz را کنترل می کند .وقتی این بیت یک باشد پایه 32khz فعال است و سیگنال موج مبعی با فرکانس 32.768kHz روی پایه 32khz  داریم. اگر این بیت صفر باشد پایه  32khz  به حالت high-impedance می رود .

Bit 2: Busy BSY
این بیت نشان دهنده این است که آی سی مشغول اجرای توابع tcxo می باشد . این بیت زمانی یک می شود که سنسور دما در حال تبدیل است و بعد از یک دقیقه که آی سی در وضعیت idle باشد این بیت پاک می شود.

(Bit 1: Alarm 2 Flag (A2F
این بیت فلگ آلارم 2 می باشد و زمانی یک می شود که زمان جاری با زمانی که برای آلارم دو تنظیم کرده ایم مچ شود ، اگر بیت INTC=1  و A2IE=1 باشد ، زمانی که این فلگ یک شود یک وقفه نیز روی پایه SQW  رخ می دهد . با صفر نوشتن درون این فلگ پاک میشود و وضعیت پایه SQW به حالت قبل باز می گردد.

(Bit 0: Alarm 1 Flag (A1F
این بیت فلگ آلارم 1 می باشد و زمانی یک می شود که زمان جاری با زمانی که برای آلارم یک تنظیم کرده ایم مچ شود ، اگر بیت INTC=1  و A2IE=1 باشد ، زمانی که این فلگ یک شود یک وقفه نیز روی پایه SQW  رخ می دهد . با صفر نوشتن درون این فلگ پاک میشود و وضعیت پایه SQW به حالت قبل باز می گردد.

معرفی رجیستر Aging Offset ماژول ds3231

آی سی  ds3231 یک rtc  با دقت بسیار بالا می باشد  که در دمای 0 الی 40 درجه سانتی گراد دقت 2ppm برای آن گارانتی شده است . یعنی هر یک میلیون ثانیه حدود یک ثانیه خطا دارد. ما می توانیم توسط رجیستر aging offset این دقت را بالاتر ببریم .

مقدار تنظیم شده در این رجیستر با افزایش و کاهش مقدار خازن اسیلاتور ، فرکانس را تنظیم میکند . رنج قابل تنظیم در این رجیستر از -128 الی 127 به صورت متمم دو می باشد .در دمای 25 درجه سانتی گراد هر یک واحد افزایش یا کاهش در این رجیستر تقریبا برابر تغییر 0.1ppm  در فرکانس اسیلاتور می باشد .

همچنین حداکثر تغییرات  قابل برنامه ریزی در محدوده +و-13ppm می باشد . تغییر هر 0.1 استپ کلاک فرکانس تقریبا حدود 0.002 الی 0.003 هرتز می باشد .

برای بدست آوردن آفست و تنظیم فرکانس اسیلاتور می توان فرکانس  خروجی پایه 32khz را اندازه گرفت و مقدار آن باید 32768 هرتز باشد اگر مقدار فرکانس خروجی بیشتر بود با افزایش پله پله مقدار افست فرکانس را کاهش می دهیم تا به فرکانس مورد نظر برسد.
افزایش مقدار aging offset باعث افزایش مقدار آرایه خازنی شده و در نتیجه باعث کاهش فرکانس اسیلاتور می شود و کاهش مقدار این رجیستر باعث کاهش مقدار ارایه خازن شده و باعث افزایش فرکانس اسیلاتور می شود .

این رجیستر جهت جبران سازی فرکانس کریستال می باشد ،مقدار فرکانس کریستال ساعت با افزایش یا کاهش دما تغییر می کند . مقدار پیش فرض این رجیستر صفر می باشد در عمل چون مقدار آفست خیلی کم می باشد می توان در محاسبات از آن صرف نظر کرد .

معرفی سنسور دمای داخلی ماژول ds3231

سنسور دمای داخلی آی سی ds3231 به منظور استفاده در الگوریتم tcxo و جبرانسازی فرکانس ساعت 32768 هرتز به کار رفته است .

به صورت پیش فرض ، فرکانس هر 64 ثانیه یک بار توسط الگوریتم tcxo  ، بسته به دمای محیط  توسط تغییر آرایه خازن اسیلاتور از طریق جدول look up  داخلی تنظیم میشود و مقدار افست در هر بار عملیات تبدیل دما به مقدار ارایه خازنی اضافه می شود .

بنابراین هر 64 ثانیه که الگوریتم tcxo انجام می شود ، عملیات تبدیل دما نیز صورت می گیرد و مقدار دیجیتال دما درون رجیستر دما قرار می گیرد .

حال اگر بخواهیم فرمان تبدیل و قرائت دما را زودتر از 64 ثانیه انجام دهیم . توسط 1 کردن بیت conv در رجیستر control ، عملیات تبدیل دما انجام شده و مقدار آن در رجیستر دما قرار می گیرد .

آی سی DS3231 دارای سنسور دمای داخلی 10 بیتی با رزولوشن 0.25 درجه  می باشد . در آدرس 11H مقدار 8 بیت با ارزش قرار دارد ، بیت 7 نشانگر علامت +و – می باشد مقدار خوانده شده از این آدرس  به
صورت متمم دو می باشد .

در آدرس 12H مقدار دو بیت کم ارزش قرار دارد ، مقدار خوانده شده از این آدرس  دقت اعشاری دما که مضربی از 0.25  می باشد را نشان می دهد . برای این دو بیت چهار حالت می توان متصور بود ، با توجه رزولوشن 0.25 مقادیر به دست آمده به صورت زیر می باشد.
00*0.25=0      01*0.25=0.25    10*0.25=0.5  11*0.25=0.75

کالیبره کردن ماژول ds3231

اکثر تراشه های ds3231 بسیار دقیق عمل می کنند و نیاز به کالیبره شدن ندارند . زیرا توسط الگوریتمی به نام  TCXO  هر 64 ثانیه توسط سنسور دمای داخلی تراشه DS3231 دما را اندازه گیری می کند و اختلاف فرکانس ایجاد شده در اثر تغییرات دمایی را جبران می کند و فرکانس اسیلاتور را همواره بر روی مقدار 32768 هرتز ثابت نگه می دارد .

اگر به هر دلیل فرکانس اسیلاتور برابر 32768 هرتز نبود ، برای کالیبره کردن فرکانس تراشه ds3231 به این شکل عمل می کنیم . ابتدا توسط فرکانس متر ، فرکانس خروجی بر روی پایه 32k ماژول را اندازه گیری می کنیم ، این فرکانس دقیقا باید برابر 32687 هرتز باشد .

اگر فرکانس قرائت شده با مقدار 32768 هرتز اختلاف داشت با مقدار دهی به رجیستر  aging offset  فرکانس خروجی پایه 32k را بر روی فرکانس 32768 هرتز تنظیم می کنیم .

راه اندازی ماژول ds3231 با آردوینو

در سطح اینترنت کتابخانه های زیادی برای راه اندازی ماژول ds3231 با آردوینو وجود دارد . اکثر این کتابخانه ها کامل و بهینه نیستند و برخی از کاربران برای کار کردن با توابع کتابخانه دچار سردرگمی می شوند .

به همین منظور کتابخانه ای کامل و بهینه توسط سایت میکرونیک تهیه شده که کار کردن با توابع آن بسیار ساده و روان می باشد . این کتابخانه دارای توابع تبدیل تاریخ میلادی به شمسی و تبدیل تاریخ شمسی به میلادی می باشد . کاربر بسته به نیاز خود می تواند تنها با استفاده از یک دستور تاریخ پیشفرض ماژول که تاریخ میلادی هست را به تاریخ شمسی تبدیل کند و بر روی نمایشگر lcd نمایش دهد .

این ماژول دارای دو آلارم داخلی می باشد و با تنظیم کردن هر آلارم بر اساس تاریخ و ساعت مورد دلخواه ، زمانی که با ساعت جاری یکسان شد ، توسط پرچم وقفه در رجیسترهای داخلی آی سی ds3231 و یا ایجاد وقفه بر روی پایه sqw به ما آلارم می دهد . مثال  استفاده از آلارم ها به همراه نحوه کار با توابع آلارم ها آورده شده است .

مهمترین مزایا این کتابخانه نسبت به دیگر کتابخانه های ماژول ds3231 که در اینترنت وجود دارند ، قابلیت تنظیم بخش های ثانیه،دقیقه،ساعت،روز،ماه،سال و ایام هفته به صورت شمسی به وسیله دو عدد کلید توسط کاربر انجام می شود .

راه اندازی ماژول ds3231 با آردوینو
راه اندازی ماژول ds3231 با آردوینو

فیلم زیر به همراه توضیحات داده شده که توسط stm32 انجام شده . برای کدویژن و آردوینو نیز یکسان است و دقیقا عملکرد آنها شبیه به همین فیلم می باشد .

راه اندازی ماژول ds3231
راه اندازی ماژول ds3231

مطلب پیشنهادی >> برای نمایش ساعت توسط ماژول ds3231 بر روی سون سگمنت ، می توانید از ماژول tm1637 استفاده نمایید .

قابلیت های کتابخانه بسکام ds3231


توابع خواندن و ست کردن ساعت و تاریخ
تابع تبدیل تاریخ میلادی به شمسی
توابع خواندن و نوشتن در حافظه EEPROM  به صورت بایت و رشته
تابع خواندن سنسور دمای داخلی ds3231
توابع ست کردن آلارم ها
به همراه مثال و نمونه کد برای هر قسمت

قابلیت های کتابخانه ماژول ds3231 برای آردوینو – کدویژن – stm32

توابع خواندن و ست کردن ساعت و تاریخ
توابع تبدیل تاریخ میلادی به شمسی و بالعکس
تابع خواندن سنسور دمای داخلی ds3231
توابع خواندن و ست کردن آلارم ها
قابلیت نمایش روز هفته به فارسی
فایل شبیه سازی پروتئوس برای آردوینو و کدویژن
به همراه پروژه نمایش ساعت و تقویم شمسی بر روی lcd کاراکتری 2*16 با قابلیت تنظیم تمام بخش های ساعت و تاریخ و روز هفته توسط دو عدد سوئیچ

کتابخانه و مثال stm32 برای هر دو نرم افزارهای keil و cubeide موجود می باشد.
سازگار با نرم افزار cubemx و توابع HAL می باشد .

توابع کتابخانه ماژول ds3231 برای آردوینو – کدویژن – stm32

void DS3231_init(void);
uint8_t alarm_cfg(uint8_t n, uint8_t i);
void RTC_Set(RTC_Time *time_t);
RTC_Time *RTC_Get();
RTC_Time *ShamsiToMiladi(RTC_shamsi *shamsi);
RTC_shamsi *MiladiToShamsi(RTC_Time *miladi);
void Alarm1_Set(RTC_Time *time_t, al1 _config);
RTC_Time *Alarm1_Get();
void Alarm1_Enable();
void Alarm1_Disable();
int8_t Alarm1_IF_Check();
void Alarm1_IF_Reset();
uint8_t Alarm1_Status();
void Alarm2_Set(RTC_Time *time_t, al2 _config);
RTC_Time *Alarm2_Get();
void Alarm2_Enable();
void Alarm2_Disable();
int8_t Alarm2_IF_Check();
void Alarm2_IF_Reset();
uint8_t Alarm2_Status();
void IntSqw_Set(INT_SQW _config);
void Enable_32kHZ();
void Disable_32kHZ();
void OSC_Start();
void OSC_Stop();
float Get_Temperature(void);
void force_temp_conv(void);
void SET_AGING(unsigned char a);
char GET_AGING(void);
uint8_t RTC_Read_Reg(uint8_t reg_address);
void RTC_Write_Reg(uint8_t reg_address, uint8_t reg_value);

نویسنده : حسین غیاثوند
 خرید و دانلود در لحظه :

Admin

در حال حاضر در زمینه طراحی PCB و برنامه نویسی فعالیت می کنم . علاقه مند به یادگیری و اشتراک گذاری آموخته های خود هستم .

نوشته های مشابه

guest
9 دیدگاه
قدیمی ترین
جدیدترین محبوب ترین
بازخورد داخلی
مشاهده همه نظرات