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
| Parameter | Value |
|---|---|
| Size | 38mm (length), 22mm (width), 14mm (height) |
| Weight | 8g |
| Working voltage | 3.3-5.5V |
| Clock accuracy | ±2ppm from 0°C to +40°C; ±3.5ppm from 40°C to +85°C |
| Calendar alarm clocks | 2 programmable |
| Square wave output | Yes |
| Real-time clock output | Seconds, minutes, hours, weekdays, dates, months and years |
| Leap year compensation | Up to 2100 |
| Temperature sensor | Built-in with ±3°C accuracy |
| Memory chip | AT24C32, 32K storage capacity, IIC bus interface |
| Memory chip features | Maximum transmission speed 400KHz, address can be modified |
| Battery backup | Yes, for continuous timing |
| Operating temperature | Commercial: 0°C to +70°C; Industrial: -40°C to +85°C |
| Power consumption | Low |
| Other features | Aging correction register, RST output, push button reset input |
| UL approved | Yes |
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 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ı

| Pin Name | Function |
|---|---|
| 32 kHz | 32 kHz frequency output |
| VCC | Used for the DC pin of the main power supply |
| /INT/SQW | Low-level active interrupt or square wave output |
| RST | Reset pin |
| N.C. | Indicates no connection; the external must be grounded |
| GND | Ground |
| VBAT | Backup power input |
| SDA | Serial data input and output |
| SCL | Serial clock input |
DS3231 Blok Şeması

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ı

| Pin on DS3231 RTC Module | Pin on Arduino Uno |
|---|---|
| SCL | A5 |
| SDA | A4 |
| VCC | 5V |
| GND | GND |
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




