Modul RTC DS3231

Daftar Isi

DS3231 RTC Module

Modul jam adalah modul elektronik yang umumnya digunakan untuk mengukur waktu dan tanggal. Modul ini biasanya dilengkapi dengan osilator kristal untuk menghasilkan referensi waktu yang akurat, serta memiliki rangkaian pengendali untuk mengatur dan menyesuaikan waktu.

Pada aplikasi yang membutuhkan akurasi waktu tinggi, modul jam DS1302 dan DS3231 dapat memenuhi kebutuhan dasar. Di bawah ini, saya akan memperkenalkan definisi, diagram pin, parameter, fungsi, dan pemrograman modul jam DS3231.

Apa itu Modul RTC DS3231?

Modul RTC DS3231 adalah modul Real-Time Clock (RTC) yang populer dan sering digunakan dalam proyek-proyek elektronik. Modul ini merupakan perangkat berukuran kecil dan berbiaya rendah yang menyediakan fungsi pencatatan waktu dan kalender yang akurat. Modul RTC DS3231 didasarkan pada chip DS3231, yang merupakan RTC yang sangat akurat dengan osilator kristal yang dikompensasi suhu terintegrasi. Modul ini mampu menyediakan informasi waktu dan tanggal dengan akurasi hingga ±2 ppm.

Modul RTC DS3231 banyak digunakan dalam aplikasi seperti pencatatan data, penandaan waktu, dan sistem alarm. Modul ini juga sering digunakan pada perangkat elektronik yang memerlukan pencatatan waktu yang presisi, seperti kamera, perekam audio, dan pengontrol industri. Modul ini mudah digunakan dan dapat diintegrasikan dengan mikrokontroler seperti Arduino dan Raspberry Pi.

Secara keseluruhan, Modul RTC DS3231 adalah modul jam yang andal dan akurat yang banyak digunakan dalam berbagai proyek elektronik.

Parameter Modul RTC DS3231

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

Struktur Chip Jam DS3231

Chip jam DS3231 terdiri dari delapan modul, yang dibagi menjadi empat kelompok fungsi: TCXO, pengatur daya, tombol reset, dan RTC.

DS3231 RTC Chip Schematic Diagram
DS3231 RTC Chip Schematic Diagram

DS3231 TCXO

TCXO dilengkapi dengan sensor suhu, osilator, dan logika pengendali. Pengendali membaca keluaran sensor suhu pada chip, menggunakan tabel pencarian untuk menentukan kapasitansi yang diperlukan, menambahkan koreksi penuaan dari register AGE, dan kemudian mengatur register pemilihan kapasitansi. Nilai-nilai baru, termasuk perubahan pada register AGE, hanya dimuat ketika suhu berubah atau ketika konversi suhu yang diinisiasi pengguna selesai. Nilai suhu dibaca saat daya VCC dinyalakan dan kemudian setiap 64 detik.

Pengaturan Daya DS3231

Fungsi pengendalian daya disediakan oleh referensi tegangan yang dikompensasi suhu (VPF) dan rangkaian komparator yang memantau tingkat tegangan VCC. Ketika VCC lebih tinggi dari VPF, DS3231 disuplai daya oleh VCC. Ketika VCC lebih rendah dari VPF tetapi lebih tinggi dari VBAT, DS3231 tetap disuplai daya oleh VCC. Ketika VCC lebih rendah dari VPF dan lebih rendah dari VBAT, DS3231 disuplai daya oleh VBAT. Untuk melindungi baterai, osilator tidak akan mulai beroperasi ketika VBAT pertama kali diterapkan ke perangkat kecuali VCC telah terisi atau alamat I2C yang valid ditulis ke perangkat. Waktu startup osilator tipikal kurang dari 1 detik. Setelah VCC dinyalakan atau alamat I2C yang valid ditulis, perangkat mengukur suhu sekali dan mengkalibrasi osilator menggunakan nilai koreksi yang dihitung setelah sekitar 2 detik. Setelah osilator berjalan, osilator akan tetap beroperasi selama daya (VCC atau VBAT) masih valid. Perangkat mengukur suhu dan mengkalibrasi frekuensi osilator setiap 64 detik.

Tombol Reset DS3231

DS3231 memiliki fungsi sakelar tombol yang terhubung ke pin keluaran RST. Jika DS3231 tidak sedang dalam siklus reset, perangkat ini terus memantau tepi turun sinyal RST. Jika terdeteksi adanya transisi tepi, DS3231 menyelesaikan proses debounce sakelar dengan menarik RST ke level rendah. Setelah timer internal habis, DS3231 terus memantau sinyal RST. Jika sinyal tetap pada level rendah, DS3231 terus memantau jalur sinyal untuk mendeteksi tepi naik. Setelah tombol dilepaskan, DS3231 memaksa RST ke level rendah dan mempertahankan tRST. RST juga dapat digunakan untuk menandakan alarm kegagalan daya. Ketika VCC lebih rendah dari VPF, sinyal alarm kegagalan daya internal dihasilkan, dan RST ditarik ke level rendah. Jika osilator tidak berfungsi saat VCC terbebani, tREC dilewati, dan RST segera menjadi tinggi.

DS3231 Jam dan Kalender RTC

Informasi jam dan kalender dapat diperoleh dengan membaca byte register yang sesuai. Data jam dan kalender dapat diatur atau diinisialisasi dengan menulis byte register yang sesuai. Isi register jam dan kalender disajikan dalam format bilangan desimal yang dikodekan secara biner (BCD). DS3231 beroperasi dalam mode 12 jam atau 24 jam. Bit keenam dari register jam menentukan pemilihan mode 12 jam atau 24 jam. Ketika bit ini bernilai tinggi, mode 12 jam dipilih. Dalam mode 12 jam, bit kelima adalah bit penunjuk AM/PM, yang bernilai logika tinggi untuk PM.

Register dan Fungsi Internal DS3231

Alamat register DS3231 adalah 00h–12h, yang masing-masing digunakan untuk menyimpan informasi detik, menit, jam, minggu, tanggal, dan pengaturan alarm. Selama akses multi-byte, jika alamat mencapai 12h di ujung ruang RAM, akan terjadi perputaran. Pada saat ini, posisikan kembali ke posisi awal yaitu unit 00h.

Informasi waktu dan kalender DS3231 diatur dan diinisialisasi dengan membaca register yang sesuai. Buffer bantu pengguna digunakan untuk mencegah kemungkinan kesalahan saat register internal diperbarui. Saat membaca register waktu dan kalender, buffer pengguna berada dalam kondisi START apa pun. Atau disinkronkan dengan register internal saat penunjuk register kembali ke nol.

Informasi waktu dibaca dari register bantu ini, dan jam terus berjalan pada saat ini, sehingga pembacaan ulang register dapat dihindari saat pembaruan register utama terjadi selama operasi pembacaan. Mengambil register kontrol (alamat 0EH) sebagai contoh, register ini dapat mengontrol jam waktu nyata, alarm, dan keluaran gelombang persegi.

DS3231 Pin Diagram

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

Diagram Blok DS3231

DS3231 Block Diagram
DS3231 Block Diagram

Memprogram Modul RTC DS3231 dengan Arduino Uno

Alat yang Dibutuhkan:

  • Arduino Uno x1
  • Modul RTC DS3231 x1
  • Jumper (kabel DuPont)

Petunjuk Pemasangan Kabel

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

Menginstal Pustaka RTClib

Pustaka yang digunakan dalam contoh ini adalah RTClib yang dibuat oleh Adafruit; silakan instal pustaka ini terlebih dahulu.

Proyek – Muat Perpustakaan – Kelola Perpustakaan – Masukkan "RTClib" di kotak pencarian

Mengonfigurasi DS3231

Pertama, Anda perlu memuat pustaka RTClib yang baru saja Anda instal.

				
					#include "RTClib.h"
				
			

Setelah itu, Anda dapat membuat sebuah instance DS3231 bernama rtc, dan Anda dapat memanggil fungsi RTC_DS3231

				
					RTC_DS3231 rtc;
				
			

Fungsi yang digunakan untuk mengatur waktu adalah rtc.adjust, misalnya:

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

Fungsi ini digunakan untuk mendapatkan waktu dari DS3231 melalui rtc.now(), dan data yang dikembalikan berjenis DateTime, yang berisi informasi tahun, bulan, hari, jam, menit, dan detik, misalnya:

				
					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();
				
			

Kode program lengkap

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

Aplikasi DS3231

  • Sistem akuisisi data
  • Sistem kontrol industri
  • Cadangan baterai
  • Pemantauan suhu
  • Sistem kontrol akses
  • Perangkat medis

Berlangganan

Daftar ke milis kami untuk mendapatkan pembaruan blog bulanan, berita teknologi, dan studi kasus. Kami tidak akan pernah mengirimkan spam, dan Anda dapat berhenti berlangganan kapan saja.

Scroll to Top

Instant Quote