موضوعاتی که در این مقاله به آنها پرداخته خواهد شد :
RTC داخلی میکروکنترلرها
همانطور که می دانیم بیشتر میکروکنترلرهایی که برای پروژه های خود استفاده می کنیم ، دارای پریفرال یا بخش داخلی به نام (RTC(real time clock جهت ایجاد زمان واقعی هستند .
برای ایجاد زمان یک ثانیه واقعی نیاز به فرکانس 32.768KHz می باشد ، در میکروکنترلرهای که دارای RTC داخلی هستند این فرکانس از طریق یک نوسانساز RC داخلی (فقط در برخی از میکروکنترلرها وجود دارد) و یا از طریق کریستال های خارجی با نام کریستال ساعت تامین می شود . برای استفاده از کریستال ساعت خارجی ، دو پایه از میکروکنترلر به همین منظور اختصاص داده شده است .
شما نیز شاید تا کنون از کریستال های ساعت خارجی برای راه اندازی بخش RTC میکروکنترلر ها استفاده کرده باشید . تصویر زیر یک نمونه کریستال با فرکانس ۳۲٫۷۶۸ کیلو هرتز می باشد .
چرا ساعت 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 دارای 6 پایه به شرح زیر می باشد :
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 با آردوینو وجود دارد . اکثر این کتابخانه ها کامل و بهینه نیستند و برخی از امکانات مثل توابع تبدیل تاریخ میلادی به شمسی و همچنین قابلیت تنظیم ساعت و تاریخ توسط کاربر را ندارند .
به همین منظور کتابخانه ای کامل و بهینه توسط سایت میکرونیک تهیه شده که کار کردن با توابع آن بسیار ساده و روان می باشد . این کتابخانه دارای توابع تبدیل تاریخ میلادی به شمسی و تبدیل تاریخ شمسی به میلادی می باشد . کاربر بسته به نیاز خود می تواند تنها با استفاده از یک دستور تاریخ پیشفرض ماژول که تاریخ میلادی هست را به تاریخ شمسی تبدیل کند و بر روی نمایشگر lcd نمایش دهد .
این ماژول دارای دو آلارم داخلی می باشد و با تنظیم کردن هر آلارم بر اساس تاریخ و ساعت مورد دلخواه ، زمانی که با ساعت جاری یکسان شد ، توسط پرچم وقفه در رجیسترهای داخلی آی سی ds3231 و یا ایجاد وقفه بر روی پایه sqw به ما آلارم می دهد . مثال استفاده از آلارم ها به همراه نحوه کار با توابع آلارم ها آورده شده است .
مهمترین مزایا این کتابخانه ، قابلیت تنظیم بخش های ثانیه،دقیقه،ساعت،روز،ماه،سال و ایام هفته به صورت شمسی به وسیله دو عدد کلید توسط کاربر انجام می شود .
قابلیتهای کتابخانه ماژول ds3231 برای بسکام
توابع خواندن و تنظیم کردن ساعت و تاریخ
تابع تبدیل تاریخ میلادی به شمسی
توابع خواندن و نوشتن در حافظه EEPROM به صورت بایت و رشته
تابع خواندن سنسور دمای داخلی ds3231
توابع تنظیم کردن آلارم ها
به همراه مثال و نمونه کد برای هر قسمت
تشریح کامل رجیسترهای ماژول به زبان فارسی pdf
تشریح کامل استفاده از توابع کتابخانه
قابلیتهای کتابخانه ماژول ds3231 برای آردوینو
توابع خواندن و تنظیم کردن ساعت و تاریخ
توابع تبدیل تاریخ میلادی به شمسی و بالعکس
تابع خواندن سنسور دمای داخلی ds3231
توابع کار با آلارم ها
قابلیت نمایش روز هفته به انگلیسی و فارسی
نمایش ساعت و تقویم شمسی بر روی lcd کاراکتری 2*16
قابلیت تنظیم ساعت و تاریخ با دو عدد سوئیچ
تشریح کامل رجیسترهای ماژول به زبان فارسی pdf
تشریح کامل استفاده از توابع کتابخانه
قابلیتهای کتابخانه ماژول ds3231 برای کدویژن
توابع خواندن و تنظیم کردن ساعت و تاریخ
توابع تبدیل تاریخ میلادی به شمسی و بالعکس
تابع خواندن سنسور دمای داخلی ds3231
توابع خواندن و ست کردن آلارم ها
قابلیت نمایش روز هفته به انگلیسی و فارسی
نمایش ساعت و تقویم شمسی بر روی lcd کاراکتری 2*16
قابلیت تنظیم ساعت و تاریخ با دو عدد سوئیچ
تشریح کامل رجیسترهای ماژول به زبان فارسی pdf
تشریح کامل استفاده از توابع کتابخانه
قابلیتهای کتابخانه ماژول ds3231 برای stm32
توابع خواندن و تنظیم کردن ساعت و تاریخ
توابع تبدیل تاریخ میلادی به شمسی و بالعکس
تابع خواندن سنسور دمای داخلی ds3231
توابع خواندن و ست کردن آلارم ها
قابلیت نمایش روز هفته به انگلیسی و فارسی
نمایش ساعت و تقویم شمسی بر روی lcd کاراکتری 2*16
قابلیت تنظیم ساعت و تاریخ با دو عدد سوئیچ
تشریح کامل رجیسترهای ماژول به زبان فارسی pdf
تشریح کامل استفاده از توابع کتابخانه
سازگار با نرم افزار cubemx و توابع HAL می باشد .
فیلم راه اندازی ماژول ds3231 و تنظیم بخشهای ساعت و تاریخ با دو عدد سوییچ ، توسط میکروکنترلر stm32 . کتابخانه و سورس کدها برای کدویژن و آردوینو نیز همین عملکرد را دارند .