Modul RTC DS3231

Daftar Isi

DS3231 RTC Module

DS3231 adalah IC RTC I²C dengan osilator kristal terkompensasi suhu (TCXO), suplai baterai cadangan, dua alarm, dan keluaran gelombang kotak terprogram. Alamat I²C tetapnya 0x68. IC ditentukan ±2 ppm pada 0…+40 °C dan ±3,5 ppm pada −40…+85 °C; EEPROM, LED, regulator, atau rangkaian pengisi pada papan modul bukan fitur 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

Item IC DS3231Nilai datasheet
Catu utama2,3–5,5 V
Input cadangan2,3–5,5 V
Alamat RTCtetap 0x68
Kecepatan I²Chingga 400 kHz
Akurasi±2 ppm (0…+40 °C); ±3,5 ppm (−40…+85 °C)
Keluaran suhu±3 °C
Fungsidua alarm; gelombang kotak; koreksi tahun kabisat hingga 2100
Tambahan khusus moduldimensi, AT24C32, LED, regulator, dan pengisi daya berbeda

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

Referensi dan komparator memantau VCC. Saat VCC turun di bawah ambang gagal daya, akses dihentikan, pencatatan waktu beralih ke VBAT, dan RST menjadi rendah. Ketika hanya VBAT pertama kali dipasang, osilator menunggu VCC atau penulisan alamat I²C yang valid; periksa Oscillator Stop Flag setelah kejadian daya.

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
Nama PinFungsi
32 kHzOutput frekuensi 32 kHz
VCCCatu daya utama (pin DC)
/INT/SQWInterupsi aktif tingkat rendah atau output gelombang kotak
RSTPin reset
N.C.Indikasi tidak ada koneksi; bagian luar harus dihubungkan ke ground
GNDGround
VBATInput daya cadangan (baterai)
SDAInput dan output data serial
SCLInput clock serial

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 pada Modul RTC DS3231Pin pada 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

Catatan Praktis: Catatan Integrasi Tertanam untuk Modul DS3231 RTC

Modul Pemeriksaan:Pastikan Skema, Pull-Up I²c, Tegangan Logika, Kimia Baterai, dan Keberadaan Pengisi Daya. AT24C32, Dimensi, Led, dan Komponen Pengisi Berbeda Antar Papan dan Bukan Bagian IC DS3231. Gunakan 0x68 untuk RTC; Pindai Eeprom Tambahan Secara Terpisah. Sumber:Perangkat Analog DS3231,Datasheet Rev. 10, DanAdafruit Panduan.

Tentang Penulis

Picture of Aidan Taylor
Aidan Taylor

Saya Aidan Taylor dan saya memiliki lebih dari 10 tahun pengalaman di bidang PCB Reverse Engineering, PCB Design dan IC Unlock.

Bagikan

Postingan yang Direkomendasikan

Butuh Bantuan?

Scroll to Top

Instant Quote

Penawaran Seketika