DS3231 RTC Modülü

İçindekiler

DS3231 RTC Module

Saat modülü, genellikle saat ve tarihi ölçmek için kullanılan bir elektronik modüldür; bu modüller genellikle doğru bir zaman referansı oluşturmak için bir kristal osilatör içerir ve saati ayarlamak ve düzeltmek için bazı kontrol devrelerine sahiptir.

Yüksek saat gereksinimleri olan durumlarda, DS1302 ve ds3231 saat modülleri temel ihtiyaçları karşılayabilir. Aşağıda size ds3231 saat modülünün tanımını, pin şemasını, parametrelerini, işlevlerini ve programlamasını tanıtacağım.

DS3231 RTC Modülü nedir?

DS3231 RTC Modülü, elektronik projelerde yaygın olarak kullanılan popüler bir Gerçek Zamanlı Saat (RTC) modülüdür. Doğru zaman tutma ve takvim işlevleri sunan küçük, düşük maliyetli bir cihazdır. DS3231 RTC Modülü, entegre sıcaklık dengelemeli kristal osilatöre sahip son derece hassas bir RTC olan DS3231 yongasına dayanmaktadır. ±2 ppm'ye kadar hassasiyetle saat ve tarih bilgisi sağlayabilir.

DS3231 RTC Modülü, veri kaydı, zaman damgası ve alarm sistemleri gibi uygulamalarda yaygın olarak kullanılmaktadır. Ayrıca kameralar, ses kayıt cihazları ve endüstriyel kontrolörler gibi hassas zaman tutma gerektiren elektronik cihazlarda da yaygın olarak kullanılmaktadır. Modülün kullanımı kolaydır ve Arduino ve Raspberry Pi gibi mikrodenetleyicilerle arayüzlenebilir.

Genel olarak, DS3231 RTC Modülü, çeşitli elektronik projelerde yaygın olarak kullanılan güvenilir ve hassas bir saat modülüdür.

DS3231 RTC Modülü Parametreleri

ParameterValue
Size38mm (length), 22mm (width), 14mm (height)
Weight8g
Working voltage3.3-5.5V
Clock accuracy±2ppm from 0°C to +40°C; ±3.5ppm from 40°C to +85°C
Calendar alarm clocks2 programmable
Square wave outputYes
Real-time clock outputSeconds, minutes, hours, weekdays, dates, months and years
Leap year compensationUp to 2100
Temperature sensorBuilt-in with ±3°C accuracy
Memory chipAT24C32, 32K storage capacity, IIC bus interface
Memory chip featuresMaximum transmission speed 400KHz, address can be modified
Battery backupYes, for continuous timing
Operating temperatureCommercial: 0°C to +70°C; Industrial: -40°C to +85°C
Power consumptionLow
Other featuresAging correction register, RST output, push button reset input
UL approvedYes

DS3231 Saat Yonga Yapısı

DS3231 saat yongası, dört işlevsel gruba ayrılmış sekiz modülden oluşur: TCXO, güç kontrolü, sıfırlama düğmesi ve RTC.

DS3231 RTC Chip Schematic Diagram
DS3231 RTC Chip Schematic Diagram

DS3231 TCXO

TCXO, bir sıcaklık sensörü, osilatör ve kontrol mantığı içerir. Denetleyici, yongadaki sıcaklık sensörü çıkışını okur, bir arama tablosu kullanarak gerekli kapasitansı belirler, AGE kaydından yaşlanma düzeltmesini ekler ve ardından kapasitans seçim kaydını ayarlar. AGE kaydındaki değişiklikler dahil olmak üzere yeni değerler, yalnızca sıcaklık değiştiğinde veya kullanıcı tarafından başlatılan sıcaklık dönüşümü tamamlandığında yüklenir. Sıcaklık değeri, VCC güç açıldığında ve ardından her 64 saniyede bir okunur.

DS3231 Güç Kontrolü

Güç kontrol işlevi, sıcaklık dengelemeli voltaj referansı (VPF) ve VCC seviyesini izleyen bir karşılaştırıcı devre tarafından sağlanır. VCC, VPF’den yüksek olduğunda DS3231, VCC ile beslenir. VCC, VPF’den düşük ancak VBAT’tan yüksek olduğunda DS3231 yine VCC ile beslenir. VCC, VPF'den ve VBAT'tan düşük olduğunda, DS3231 VBAT ile beslenir. Pili korumak için, VCC yüklenmedikçe veya cihaza geçerli bir I2C adresi yazılmadıkça, VBAT cihaza ilk uygulandığında osilatör başlamaz. Tipik osilatör başlatma süresi 1 saniyeden azdır. VCC'nin devreye girmesinden veya geçerli bir I2C adresinin yazılmasından sonra, cihaz sıcaklığı bir kez ölçer ve yaklaşık 2 saniye sonra hesaplanan düzeltme değerini kullanarak osilatörü kalibre eder. Osilatör çalışmaya başladığında, güç (VCC veya VBAT) geçerli olduğu sürece çalışmaya devam eder. Cihaz, her 64 saniyede bir sıcaklığı ölçer ve osilatör frekansını kalibre eder.

DS3231 Sıfırlama Düğmesi

DS3231, RST çıkış pinine bağlı bir düğme anahtarı işlevine sahiptir. DS3231 sıfırlama döngüsünde değilse, RST sinyalinin alçalan kenarını sürekli olarak izler. Bir kenar geçişi algılanırsa, DS3231 RST'yi düşük seviyeye çekerek anahtarın sarsıntı giderme işlemini tamamlar. Dahili zamanlayıcının süresi dolduktan sonra, DS3231 RST sinyalini izlemeye devam eder. Sinyal düşük seviyede kalırsa, DS3231 yükselen kenarı algılamak için sinyal hattını izlemeye devam eder. Düğme bırakıldığında, DS3231 RST'yi düşük seviyeye zorlar ve tRST'yi korur. RST, güç kesintisi alarmlarını belirtmek için de kullanılabilir. VCC, VPF'den düşük olduğunda, dahili bir güç kesintisi alarm sinyali üretilir ve RST düşük seviyeye çekilir. VCC yüklendiğinde osilatör çalışmazsa, tREC atlanır ve RST hemen yüksek seviyeye geçer.

DS3231 Saat ve Takvim RTC

Saat ve takvim bilgileri, ilgili kayıt baytları okunarak elde edilebilir. Saat ve takvim verileri, ilgili kayıt baytlarına yazarak ayarlanabilir veya başlatılabilir. Saat ve takvim kayıtlarının içeriği, ikili kodlu ondalık (BCD) biçimindedir. DS3231, 12 saatlik veya 24 saatlik modda çalışır. Saat kaydının altıncı biti, 12 veya 24 saatlik mod seçimini tanımlar. Bu bit yüksek olduğunda, 12 saatlik mod seçilir. 12 saatlik modda, beşinci bit AM/PM gösterge bitidir ve PM için mantıksal yüksek değerdir.

DS3231 Dahili Kayıtlar ve İşlevler

DS3231 kayıt adresleri 00h~12h arasındadır ve sırasıyla saniye, dakika, saat, hafta, tarih ve alarm ayar bilgilerini depolamak için kullanılır. Çok baytlı erişim sırasında, adres RAM alanının sonunda 12h'ye ulaşırsa, döngü oluşur. Bu durumda, 00h birimindeki başlangıç konumuna dönülür.

DS3231'in saat ve takvim bilgileri, ilgili kayıtlar okunarak ayarlanır ve başlatılır. Kullanıcı yardımcı arabelleği, dahili kayıtlar güncellendiğinde olası hataları önlemek için kullanılır. Saat ve takvim kayıtları okunurken, kullanıcı arabelleği herhangi bir BAŞLAT koşulundadır. Veya kayıt işaretçisi sıfıra döndüğünde dahili kayıtla senkronize olur.

Zaman bilgisi bu yardımcı kayıtlardan okunur ve saat bu sırada çalışmaya devam eder, böylece okuma işlemi sırasında ana kayıt güncellemesi gerçekleştiğinde kayıtların yeniden okunması önlenebilir. Kontrol kaydını (adres 0EH) örnek olarak alırsak, bu kayıt gerçek zamanlı saati, alarm saatini ve kare dalga çıkışını kontrol edebilir.

DS3231 Pin Şeması

DS3231 Pin Diagram
DS3231 Pin Diagram
Pin NameFunction
32 kHz32 kHz frequency output
VCCUsed for the DC pin of the main power supply
/INT/SQWLow-level active interrupt or square wave output
RSTReset pin
N.C.Indicates no connection; the external must be grounded
GNDGround
VBATBackup power input
SDASerial data input and output
SCLSerial clock input

DS3231 Blok Şeması

DS3231 Block Diagram
DS3231 Block Diagram

Arduino Uno ile DS3231 RTC Modülünü Programlama

Gerekli araçlar:

  • Arduino Uno x1
  • DS3231 RTC Modülü x1
  • Jumper (DuPont kablosu)

Kablolama Talimatları

Connect DS3231 RTC Module with Arduino Uno
Pin on DS3231 RTC ModulePin on Arduino Uno
SCLA5
SDAA4
VCC5V
GNDGND

RTClib Kütüphanesinin Kurulumu

Bu örnekte kullanılan kütüphane, Adafruit tarafından yazılan RTClib'dir; lütfen önce bu kütüphaneyi yükleyin.

Proje – Kütüphaneleri Yükle – Kütüphaneleri Yönet – Arama kutusuna "RTClib" yazın

DS3231'in Programlanması

Öncelikle, az önce yüklediğiniz RTClib kütüphanesini yüklemeniz gerekiyor.

				
					#include "RTClib.h"
				
			

Bundan sonra, rtc adında bir DS3231 örneği oluşturabilir ve RTC_DS3231 işlevini çağırabilirsiniz

				
					RTC_DS3231 rtc;
				
			

Saati ayarlamak için kullanılan işlevler rtc.adjust'dur; örneğin:

				
					rtc.adjust(DateTime(to_year, to_month, to_day, to_hours, to_minute, to_second));
				
			

Bu, DS3231'in saatini almak için rtc.now() işlevi kullanılır ve döndürülen veri, yıl, ay, gün, saat, dakika ve saniye bilgilerini içeren bir DateTime türüdür; örneğin:

				
					DateTime now = rtc.now();

  // Display the current time of DS3231 through the serial port output
  Serial.print(now.year(), DEC); // display the year in decimal
  Serial. print('/');
  Serial.print(now.month(), DEC);// Display the month in decimal
  Serial. print('/');
  Serial.print(now.day(), DEC);// Display the day in decimal
  Serial. print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial. print(") ");
  Serial.print(now.hour(), DEC);// display in decimal
  Serial. print(':');
  Serial.print(now.minute(), DEC);// Display minutes in decimal
  Serial. print(':');
  Serial.print(now.second(), DEC);// Display seconds in decimal
  Serial. println();
				
			

Program kodunun tamamı

				
					// by lingshunlab.com

// Load the library of DS3231
#include "RTClib.h"

// create rtc instance
RTC_DS3231 rtc;

String input_string; // Declare the variable input_string to store the data input by the serial port

// Declare a two-dimensional array variable daysOfTheWeek, which is used to match the corresponding week name through the index (index) of the array
char daysOfTheWeek[7][12] = {"Sunday",
                              "Monday",
                              "Tuesday",
                              "Wednesday",
                              "Thursday",
                              "Friday",
                              "Saturday"};

// get serial port data function
void GetSerialStuff(String& input_string) {
   String temp_string = ""; // Declare the variable temp_string to temporarily store the data input by the serial port
   while(Serial.available()) { // When the serial port has data, loop execution
     temp_string += (char)Serial.read(); // Combine the read serial data into the inStr variable one by one
     delay(2);
   }
   input_string = temp_string; // Assign the reference pointer variable to tempStr
}

void setup() {
   Serial.begin(9600);

   // Initialize rtc,
   if (! rtc.begin()) { // If initialization fails, then
     Serial.println("Couldn't find RTC");
     Serial. flush();
     abort(); // program stops
   }
}

void loop() {

   GetSerialStuff(input_string); // Get the data of the serial port
   if(input_string != "") { // If the serial port is not empty, then
     int to_year = input_string.substring(0, 4).toInt(); // Intercept year data from string and convert to int data type
     int to_month = input_string.substring(5, 7).toInt(); // Intercept the month data from the string and convert it to int data type
     int to_day = input_string.substring(8, 10).toInt(); // Intercept the day data from the string and convert it to int data type
     int to_hours = input_string.substring(11, 13).toInt(); // Intercept the hour data from the string and convert it to int data type
     int to_minute = input_string.substring(14, 16).toInt(); // Intercept minute data from the string and convert it to int data type
     int to_second = input_string.substring(17, 19).toInt(); // Intercept the second data from the string and convert it to int data type

     // Reset the time of the DS3231 module
     rtc.adjust(DateTime(to_year, to_month, to_day, to_hours, to_minute, to_second));
     delay(100);
   }

   // Get the time of DS3231
   DateTime now = rtc.now();

   // Display the current time of DS3231 through the serial port output
   Serial.print(now.year(), DEC); // display the year in decimal
   Serial. print('/');
   Serial.print(now.month(), DEC);// Display the month in decimal
   Serial. print('/');
   Serial.print(now.day(), DEC);// Display the day in decimal
   Serial. print(" (");
   Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
   Serial. print(") ");
   Serial.print(now.hour(), DEC);// display in decimal
   Serial. print(':');
   Serial.print(now.minute(), DEC);// Display minutes in decimal
   Serial. print(':');
   Serial.print(now.second(), DEC);// Display seconds in decimal
   Serial. println();

   // Display the temperature sensor data of DS3231 through the serial port output
   Serial. print("Temperature: ");
   Serial.print(rtc.getTemperature());
   Serial. println("C");

   delay(1000);
}
				
			

DS3231 Uygulaması

  • Veri toplama sistemleri
  • Endüstriyel kontrol sistemleri
  • Yedek pil
  • Sıcaklık izleme
  • Erişim kontrol sistemleri
  • Tıbbi cihazlar

Abone ol

Aylık blog güncellemeleri, teknoloji haberleri ve vaka analizleri almak için abone listemize katılın. Asla spam göndermeyeceğiz ve istediğiniz zaman aboneliğinizi iptal edebilirsiniz.

Yazar Hakkında

Picture of Aidan Taylor
Aidan Taylor

I am Aidan Taylor and I have over 10 years of experience in the field of PCB Reverse Engineering, PCB design and IC Unlock.

Yardıma mı ihtiyacınız var?

Scroll to Top

Instant Quote