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

 

در تصویر زیر پین های ماژول نشان داده شده اند :

ماژول DS3231 علاوه بر چیپ DS3231 شامل یک چیپ EEPROM با ظرفیت 4KByte نیز می باشد . پین های این ماژول به شرح زیر هستند :

1- 33k خروجی 3.3 ولت

2-SQW خروجی پالس با فرکانس دقیق که می توانید مقدار آن را در حالت های 1Hz و یا 4 ، 8 و 32 کیلو هرتز تنظیم کنید .

3-پین های SDA و SCL برای ارتباط I2C می باشند .

4- VCC و GND به ترتیپ پین های تغذیه و زمین هستند .

 

 

راه اندازی توسط آردوینو :

 

 

#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);
}

 

Tags:
About Author: USER_4