اگر میخواهید ماژول ساعت DS3231 با آردوینو را بهراحتی راه اندازی کنید، این مقاله بهترین نقطه شروع برای شما است.
لحظه ای به ساعت گوشی و کامپیوتر خود فکر کنید. چه چیزی باعث میشود که این دستگاهها بتوانند زمان دقیق را به شما نشان دهند؟ جواب این سوال ماژول RTC است. یکی از انواع ماژولهای RTC، ماژول ساعت DS3231 است. از این ماژول برای رصد کردن زمان استفاده میشود. اگر میخواهید با نحوه کار این ماژول و چگونگی راه اندازی آن با آردوینو آشنا شوید، حتما مقاله را تا انتها بخوانید.
تراشه DS3231
در مرکز ماژول ساعت DS3231، تراشه بسیار دقیق DS3231 وجود دارد. این تراشه که ساخت شرکت Maxin است، همه توابع زمانی را مدیریت میکند و بهوسیله رابط دو سیمه I2C بهراحتی به هر میکروکنترلری وصل میشود.
این تراشه، این قابلیت را دارد که ثانیه، دقیقه، ساعت، روز، تاریخ، ماه و سال را نگهداری کند. به عنوان مثال، در پایان هر ماه، تاریخ را بهطور خودکار برای ماههایی که کمتر از 31 روز دارند، تنظیم میکند. حتی تاریخ سال کبیسه را نیز اصلاح میکند و به این ترتیب، تا سال 2100 معتبر خواهد بود.
در این ماژول، ساعت در دو فرمت 12 ساعت و 24 ساعت کار میکند و دارای علامت AM و PM است. به علاوه، امکان دو آلارم قابل برنامهریزی در روز را فراهم میسازد.
از مشخصههای بسیار جالب این ماژول وجود پایه SQW در آن است. خروجی این پایه، موج مربعی با فرکانسهای مختلف 32Hz, 8kHz, 4kHz ،1kHz است که البته قابلیت برنامهریزی آن هم وجود دارد. از این پایه میتوان به عنوان وقفه ناشی از آلارم نیز در کاربردهای مبتنی بر زمان استفاده کرد.
اسیلاتور کریستال با جبرانساز دما (TCXO)
بیشتر ماژولهای RTC یک کریستال 32kHz خارجی برای محاسبه زمان دارند. اما مشکل این کریستالها این است که دمای خارجی میتواند بر فرکانس نوسان آنها تأثیر بگذارد. این تغییر فرکانس ممکن است در ابتدا کم به نظر برسد، اما مجموعهای از خطاهای ناشی از تغییر فرکانس، دیگر ناچیز نخواهد بود.
برای جلوگیری از این تغییرات جزیی در کریستال، ماژول DS3231 با استفاده از یک اسیلاتور کریستال 32 کیلوهرتز و جبرانساز دما (TCXO) راه اندازی میشود تا نسبت به تغییرات دمای بیرون مصون بماند.
TCXO یا جبران ساز دما، در داخل تراشه RTC بستهبندی میشود و قطعه را حجیم میکند.
درست در کنار کریستال مجتمع، حسگر دما قرار گرفته است. این سنسور، تغییرات فرکانس را با افزودن یا کم کردن پالسهای ساعت جبران میکند تا به این ترتیب زمان به شکل قبل نگهداری شود. دقیقا به همین علت هم، TCXO، ساعت مرجع دقیق و پایداری ایجاد میکند و RTC را با دقت 2± دقیقه در سال حفظ مینماید.
مقایسه ماژول DS3231 با ماژول DS1307
شاید این سوال برایتان پیش آمده باشد که ماژول DS3231 با ماژول DS1307 چه تفاوتی دارد؟ تفاوت اصلی این دو ماژول در دقت نگهداری زمان است.
ماژول DS1307 برای نگهداری زمان، دارای یک کریستال 32kHz خارجی است که فرکانس نوسان آن بهراحتی با دمای خارجی تغییر میکند و این باعث میشود که ساعت 5 دقیقه یا بیشتر در ماه عقب بیافتد. اما، ماژول DS3231 در مقایسه با ماژول DS1307 بسیار دقیقتر است، زیرا دارای یک کریستال داخلی با جبرانساز دما (TCXO) است که تغییر دما بر روی آن اثر نمیگذارد و باعث میشود خطای ماژول حداکثر چند دقیقه در سال باشد.
با این وجود،DS1307 همچنان یک ماژول RTC ارزشمند است که میتواند کاربرد زیادی برای شما داشته باشد. برای کسب اطلاعات بیشتر میتوانید مقاله آموزش راه اندازی ماژول ساعت DS1307 با آردوینو را مطالعه کنید تا هم با نحوه راه اندازی و هم با خود ماژول به خوبی آشنا شوید. با این حال، اگر میخواهید زمان با دقت بیشتر نگهداری شود، بهتر است از ماژول ساعت DS3231 استفاده کنید.
باطری پشتیبان
DS3231 یک ورودی باطری دارد و زمانیکه تغذیه اصلی مدار قطع شود، همچنان نگهداری زمان را با دقت انجام میدهد.
مدار حسگر تغذیه داخلی وضعیت VCC را دائما بررسی میکند تا در صورتیکه تغذیه اصلی قطع شود، بهطور اتوماتیک تغذیه پشتیبان را وارد مدار کند. در نتیجه، لازم نیست نگران قطع برق باشید، زیرا MCU این قابلیت را دارد که باز هم زمان را حفظ کند.
در بخش پایینی برد، یک نگهدارنده باطری برای باطری دکمهای لیتیم 22V – 3V میلیمتری وجود دارد که مناسب باطریهای CR2032 است.
یک باطری CR2032 کاملا شارژ شده با ظرفیت 220mAh با جریان مصرفی 3μA را در نظر بگیرید. این باطری میتواند برای حداقل 8 سال RTC را روشن نگه دارد، بدون اینکه نیاز به تغذیه 5V خارجی داشته باشد.
220mAh/3µA = 73333.34 hours = 3055.56 days = 8.37 years
حافظه روی برد 24C32 EEPROM
ماژول DS3231 RTC یک حافظه 32 بایتی 24C32 EEPROM دارد. این حافظه ساخت شرکت Atmel است و دارای چرخههای خواندن و نوشتن نامحدود میباشد. علاوه بر این، برای ذخیره کردن تنظیمات و هر چیز دیگری نیز میتوان از این حافظه استفاده نمود.
24C32 EEPROM بهمنظور تبادل اطلاعات از واسط I2C استفاده میکند و باس آن همان باس ماژول ساعت DS3231 میباشد.
آدرس I2C حافظه EEPROM را بهراحتی میتوانید با استفاده از 3 جامپر لحیم شده A0,A1,A2 در پشت برد تغییر دهید. هر یک از این پدها برای آدرسدهی در برنامه مورد استفاده قرار میگیرند. پدها را میتوان بهوسیله لحیم اتصال کوتاه کرد و به این ترتیب آدرس را تنظیم نمود.
همانطور که در دیتاشیت 24C32 نیز گفته شده، این 3 بیت در انتهای 7 بیت آدرس I2C و درست قبل از بیت خواندن/نوشتن قرار گرفته است.
از آنجاییکه 3 ورودی آدرس هر کدام دو حالت LOW/HIGH میگیرند، به همین دلیل، شما میتوانید 8 (23) آدرس مختلف ایجاد کنید.
نکته:
3 ورودی آدرس بهطور پیش فرض بهوسیله Pullupهای روی برد در حالت HIGH قرار دارند. بنابراین، آدرس I2C یک 24C32 بهصورت پیش فرض 〖1010111〗_Binary 〖0x57〗_Hex خواهد بود.
با لحیم کردن جامپرها، ورودیهای آدرس LOW میشود. این موضوع به شما این امکان را میدهد تا آدرس I2C را مطابق جدول زیر تغییر دهید:
کد خواندن/ نوشتن حافظه روی برد 24C32 EEPROM را در انتهای آموزش برای شما قرار دادهایم.
پایههای ماژول ساعت DS3231
ماژول ساعت DS3231 برای برقراری ارتباط، دارای 6 پایه است. پایههای این ماژول را میتوانید در تصویر زیر مشاهده کنید:
33K : خروجی این پایه ساعت مرجع دقیق و پایدار (با جبرانساز دما) است.
SQW : خروجی این پایه موج مربعی با فرکانسهای 1، 4، 8 و 32 هرتز است و قابلیت برنامهریزی دارد. علاوه بر این، از خروجی این پایه، میتوان به عنوان وقفه ناشی از آلارم در بسیاری از پروژه های مبتنی بر زمان استفاده کرد.
SCL : پایه کلاک سریال برای ارتباط I2C است.
SDA : پایه داده سریال برای ارتباط I2C است.
VCC : پایه تغذیه ماژول است و ولتاژ آن بین 3.3V تا 5.5V میباشد.
GND : پایه زمین مدار است.
سیم کشی – راه اندازی ماژول ساعت DS3231 با آردوینو
در این قسمت به راه اندازی ماژول ساعت DS3231 با آردوینو میپردازیم. قطعات مورد نیاز در این پروژه عبارتاند از:
- ماژول ساعت DS3231
- ماژول ساعت DS1307
- ماژول آردوینو UNO
- مینی برد بورد 400 سوراخ
- سیم جامپر نری به نری
- کابل USB نری نوع A به نری نوع B
برای شروع پایه VCC را به خروجی 5V آردوینو وصل کنید و پس از آن، GND را به زمین وصل نمایید.
اما پایههایی که برای ارتباط I2C مورد استفاده قرار میگیرند، باقی ماندهاند. نکته ای که شما باید در اینجا به آن دقت داشته باشید این است که هر برد آردوینو پایههای I2C متفاوتی دارد. به همین دلیل زمانیکه در حال انجام این پروژه هستید، حتما به پایهها دقت کنید تا به اشتباه اتصالات را انجام ندهید. روی بردهای آردوینو مدل R3 ، پایههای SDA و SCL بر روی پین هدر نزدیک پایه AREF قرار دارند. این پایهها به عنوان A5(SCL) و A4(SDA) نیز شناخته میشود.
اگر از برد آردوینو Mega استفاده کنید، این پایهها متفاوت خواهند بود. به همین دلیل، باید از پایههای دیجیتال 20(SDA) و 21(SCL) استفاده کنید. برای فهم بهتر میتوانید از جدول زیر کمک بگیرید:
SDA | SCL | |
A4 | A5 | Arduino Uno |
A4 | A5 | Arduino Nano |
20 | 21 | Arduino Mega |
2 | 3 | Leonardo/Micro |
تصویر زیر دقیقا به شما نشان میدهد که چگونه همه چیز را به هم متصل کنید:
نصب کتابخانه RTClib
اکنون زمان برقراری ارتباط آردوینو با ماژول RTC است. خوشبختانه کتابخانه RTClib از قبل تهیه شده است تا همه پیچیدگیهای کار را از بین ببرد و به ما کمک کند تا با دستورات ساده، دادههای این ماژول را بخوانیم. پس بیایید نصب و راه اندازی این کتابخانه را شروع کنیم.
ابتدا این کتابخانه را دانلود کنید:
برای نصب کتابخانه مسیر زیر را در نرم افزار آردوینو دنبال کنید:
Sketch > Include Library > Manage Libraries…
در Library manger کمی منتظر بمانید تا فهرست کتابخانهها دانلود و لیست کتابخانههای نصب شده بروز شوند.
در قدم بعدی، در بخش Library manager، کلمهی rtclib را جست و جو کنید. سپس از بین مواردی که به شما نشان داده میشود، کتابخانه RTClib by Adafruit را انتخاب کرده و نصب کنید.
کد آردوینو – خواندن تاریخ و زمان در ماژول ساعت DS3231
کدهای زیر درک کلی از نحوه تنظیم و خواندن تاریخ و زمان در ماژول DS3231 به شما میدهد که میتوانید در بسیاری از پروژههای خود از ان استفاده کنید.
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 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.lostPower()) {
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);
}
شکل زیر خروجی کد بالا را بر روی سریال مانیتور نشان میدهد:
توضیحات کد:
دستورات با فراخوانی کتابخانههای wire.h و RTClib.h برای ارتباط با ماژول شروع میشود. در مرحله بعد، باید یک شئ از کتابخانه RTClib ایجاد کنید و یک آرایه کاراکتری دو بعدی daysOfTheWeek برای ذخیره اطلاعات مربوط به روزها تعریف نمایید.
در بخشهای Setup و Loop دستورات نیز، باید از توابع زیر برای ارتباط با ماژول استفاده کنید:
()begin : کار این تابع این است که از اتصال RTC مطمئن شود.
()lostPower : این تابع رجیسترهای داخلی I2C ماژول DS3231 را میخواند تا مطمئن شود که آیا تراشه، زمان را دنبال میکند یا نه. اگر این تابع مقدار True برگرداند، شما میتوانید تاریخ و زمان را تنظیم کنید.
()adjust : این تابع تاریخ و ساعت را تنظیم میکند و یک تابع overload میباشد. روشهای فراخوانی این تابع به شکل زیر است:
- استفاده از دستور DateTime(F(__DATE__), F(__TIME__)) که تاریخ و زمان کامپایل شدن را تنظیم میکند.
- استفاده از دستور DateTime(YYYY, M, D, H, M, s) برای تنظیم RTC با تاریخ و زمان تفکیک شده. برای مثال برای تنظیم تاریخ 27 ژانویه 2017 در ساعت 12:56 باید به این شکل عمل کنید: ;rtc.adjust(DateTime(2017, 1, 27, 12, 56, 0))
()now : این تابع تاریخ و زمان جاری را برمیگرداند. مقدار بازگشتی معمولا در یک متغیر از نوع داده DateTime ذخیره میشود.
()year : این تابع سال جاری را برمیگرداند.
()month : این تابع ماه جاری را برمیگرداند.
()day : این تابع روز جاری را برمیگرداند.
()dayOfTheWeek : این تابع روز جاری در هفته را برمیگرداند و معمولا به عنوان ایندکس یک آرایه دو بعدی استفاده میشود که اطلاعات روزها را ذخیره میکند. نمونه آن را میتوانید در برنامه بالا ببینید.
()hour: این تابع ساعت جاری را برمیگرداند.
()minute: این تابع دقیقههای جاری را برمیگرداند.
()second : این تابع ثانیههای جاری را برمیگرداند.
()unixtime : این تابع unix time را بر حسب ثانیه برمیگرداند. Unix time سیستمی برای توصیف نقطهای از زمان است. بهعبارتی مدت زمانی است که از ساعت 00:00:00 در تاریخ 5 شنبه 17 ژانویه 1970 (مبدا ساعت جهانی)، گذشته باشد.
()TimeSpan : از این تابع برای اضافه کردن زمان به زمان جاری یا کم کردن زمان از زمان جاری استفاده میشود. در این تابع میتوانید روز، ساعت، دقیقه و ثانیه را اضافه کنید یا هر کدام از آنها را که مایلید کم کنید. این تابع هم یک تابع overload است.
- now() + TimeSpan(seconds) : این تابع زمان بر حسب ثانیه را به زمان جاری اضافه نموده و زمان آینده را نشان میدهد.
- now() – TimeSpan(days,hours, minutes, seconds) : این تابع، زمان گذشته را نمایش میدهد.
کد آردوینو- خواندن/ نوشتن در 24C32 EEPROM
یکی از مشخصههای بارز ماژول ساعت DS3231، وجود 32 بایت حافظه ROM در آن است. محتویات این حافظه حتی با قطع تغذیه اصلی هم پاک نمیشود.
کد زیر، پیامی را در 24C32 EEPROM مینویسد و سپس آن را میخواند. از این کد، میتوانید برای ذخیره تنظیمات، رمز عبور و هر چیز دیگری استفاده کنید.
#include <Wire.h>
void setup()
{
char somedata[] = "lastminuteengineers.com"; // data to write
Wire.begin(); // initialise the connection
Serial.begin(9600);
Serial.println("Writing into memory...");
// write to EEPROM
i2c_eeprom_write_page(0x57, 0, (byte *)somedata, sizeof(somedata));
delay(100); //add a small delay
Serial.println("Memory written");
}
void loop()
{
Serial.print("Reading memory: ");
int addr=0; //first address
// access the first address from the memory
byte b = i2c_eeprom_read_byte(0x57, 0);
while (b!=0)
{
Serial.print((char)b); //print content to serial port
addr++; //increase address
b = i2c_eeprom_read_byte(0x57, addr); //access an address from the memory
}
Serial.println(" ");
delay(2000);
}
void i2c_eeprom_write_byte( int deviceaddress, unsigned int eeaddress, byte data ) {
int rdata = data;
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.write(rdata);
Wire.endTransmission();
}
// WARNING: address is a page address, 6-bit end will wrap around
// also, data can be maximum of about 30 bytes, because the Wire library has a buffer of 32 bytes
void i2c_eeprom_write_page( int deviceaddress, unsigned int eeaddresspage, byte* data, byte length ) {
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddresspage >> 8)); // MSB
Wire.write((int)(eeaddresspage & 0xFF)); // LSB
byte c;
for ( c = 0; c < length; c++)
Wire.write(data[c]);
Wire.endTransmission();
}
byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress ) {
byte rdata = 0xFF;
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,1);
if (Wire.available()) rdata = Wire.read();
return rdata;
}
// maybe let's not read more than 30 or 32 bytes at a time!
void i2c_eeprom_read_buffer( int deviceaddress, unsigned int eeaddress, byte *buffer, int length ) {
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,length);
int c = 0;
for ( c = 0; c < length; c++ )
if (Wire.available()) buffer[c] = Wire.read();
}
و این هم خروجی کد بالا در سریال مانیتور:
کلام آخر
این مقاله هم به پایان رسید. امیدواریم که این مقاله بتواند شما را در راه اندازی ماژول ساعت DS3231 با آردوینو یاری کند. ما همیشه سعی کردهایم بهترین آموزشها را فراهم کنیم و در اختیار شما علاقهمندان قرار دهیم. اگر پیشنهادی در مورد موضوعات مورد نظر خود دارید یا در رابطه با همین مقاله سوالی ذهن شما را مشغول کرده است، حتما آن را با ما مطرح کنید.
۱۲ دیدگاه. Leave new
با سلام
و سپاس از آموزش های شما
اگر کد ترکیبی دیگه ای همراه این کد داشته باشیم و شامل delay هم باشه ، این تاخیرها مزاحمتی برای کارکرد کد ساعت ایجاد میکنه؟
با سپاس و ارادت
بابک
سلام دوست عزیز، خواهش می کنم، ممنون از شما که مطالعه میکنید.
ببینید ساعت و تاریخ موجود در حافظه ماژول ربطی به کد آردوینو یا تایمر میکروکنترلر نداره و دقیقه. مشکل جایی پیش میاد که
ساعت را از ماژول بخونیم، بعد یک یا چند تاخیر ایجاد بشه و بعدش بخوایم ساعت را نمایش بدیم. اینجا زمان نمایش داده شده، صحیح نیست.
برای اینکه با این مشکل مواجه نشیم، هر جا زمان را خوندیم بلافاصله باید نمایش بدیم.
چرا ساعت موقع نمایش ۳۰ دقیقه تاخیر داره ؟
سلام دانیال عزیز، لطفا سوالتو دقیقتر مطرح کن تا بتونیم راهنماییت کنیم.
جزئیاتی مثل اینکه چه کدی آپلود کردی، باتری به ماژول متصل کردی یا نه، ابتدای کار ساعت رو درست و دقیق تنظیم میکنی؟ و..
سلام و عرض خسته نباشید
سوالی که دارم اینه که با این ماژول میشه تا صدم ثانیه رو هم نمایش داد؟
در واقع میخوام ساعت من ساعت، دقسقه، ثانیه و میلی قانیه را نشان دهد.
سلام و درود به شما،
آی سی DS3231 مقادیر کمتر از ۱ ثانیه را ذخیره نمیکنه اما برای محاسبه میلی ثانیه، میتونی از خروجی موج مربعی ماژول و وقفه آردوینو استفاده کنی. این موج در فرکانسهای ۱ هرتز، ۱.۰۲۴ کیلوهرتز، ۴.۰۹۶ کیلوهرتز و ۸.۱۹۲ کیلوهرتز قابل تنظیمه. برای مثال اگر اون رو در ۱.۰۲۴ کیلو تنظیم کنی هر بار رخ دادن وقفه ۱ میلیثانیه طول میکشه که میتونه برای نمایش میلی ثانیه مورد استفاده قرار بگیره. برای مشاهده نحوه تنظیم فرکانس میتونی به دیتاشیت آی سی مراجعه کنی.
با سلام خانوم منهدس به کمک نیاز دارم ، بنده oled ssd1306 را میخواهم با اردینو راه اندازی کنم کتابخانه را از اردینو نصب میکنم ولی آپلود کردن پیغام wire.h را ارور میدهد که نصب کن یا این فایل وجود ندارد بعد میام دوباره از کتابخانه wire.h را نصب میکنم همچنین کتابخانه وجود ندارد یا مشابهش مثل one wire مثل اینها وجود دارد و اینها را هم نصب میکنم بازم فایده نداره پیغام ارور wire.h را میدهد حالا چکار باید بکنم لینک چیزی نداره از اونجا همین کتابخانه را دانلود کنم ، امیدوارم توضیحات کافی باشد ممنون
سلام مصطفی عزیز،
کتابخانه Wire.h جزو کتابخانههایی است که هنگام نصب IDE آردوینو نصب میشه و نیاز به نصب جداگونه نداره.
به همین دلیل احتمالا نصب دوبارهی برنامه آردوینو مشکل را حل میکنه.
سلام
با تشکر از مطالب داخل سایت
ماژول بنده در یک ماه حدود ۲۰ دقیقه جلو میوفته یعنی صبح ساعت ۸ برام دماهای رو ارسال میکرد ولی الان sms ساعت هفت و چهل دقیقه برام میاد و تاریخ و ساعت ماژول روی sms همون ساعت ۸ .
خانم مهندس باید ماژول رو عوض کنم یا راه داره .
ممنون
سلام مرتضی عزیز،
خواهش میکنم،
ماژولهای DS3232 و DS3231 دارای قابلیتی به اسم agingoffset هستند که با استفاده از اون میتونی بهصورت نرم افزاری خطای ماژول رو جبران کنی.
برای اطلاعات بیشتر هم میتونی به این لینک مراجعه کنی:
http://www.kerrywong.com/2014/07/19/ds3232-clock-frequency-calibration/
سلام
تشکر از مطلب خوبتون و ممنون بخاطر زحمتی که کشیدید .
ی سوال داشتم در مورد این ماژول.ایا امکانش هست که این ماژول رو تنظیم کرد که در ساعات خاصی از روز آلارم بده؟مثلا پایه sqw هر دو ساعت از high به low تغیر وضعیت بده.
سلام و درود برشما وحید عزیز
بله، یکی از کاربردهای پایه SQW، ایجاد وقفه در زمان تعیین شده است.