Kami menyinkronkan waktu pada modul DS3231 dengan komputer. Diagram koneksi untuk jam real-time DS3231 dan program sederhana
". Mari berkenalan dengan modul jam real-time DS3231. Artikel ini berisi instruksi video, daftar program, tujuan dan metode menghubungkan modul dari keluarga DS ke Arduino.
Modul Jam Waktu Nyata DS3231
Apa itu Modul Jam Waktu Nyata DS3231?
Modul jam waktu nyata- ini adalah sirkuit elektronik yang dirancang untuk merekam data kronometrik (waktu saat ini, tanggal, hari dalam seminggu, dll.), dan merupakan sistem yang terdiri dari sumber daya otonom dan alat perekam.
modul DS3231 Ini pada dasarnya adalah jam tangan biasa. Papan Arduino sudah memiliki sensor waktu bawaan Milis, namun, ini hanya berfungsi jika daya dialirkan ke papan. Jika Anda mematikan lalu menghidupkan Arduino, waktu Millis akan direset ke nol. Dan DS3231 memiliki baterai terpasang, yang, bahkan ketika papan Arduino dilepas, terus “memberi daya” pada modul, memungkinkannya mengukur waktu.
Modul ini dapat digunakan sebagai jam atau jam alarm berbasis papan Arduino. Atau sebagai peringatan untuk berbagai sistem, misalnya di Rumah Pintar.
Spesifikasi DS3231:
- modul menghitung jam, menit, detik, tanggal, bulan, tahun (tahun kabisat diperhitungkan sampai tahun 2100);
- Untuk terhubung ke berbagai perangkat, jam terhubung melalui antarmuka I2C.
32K— Output dirancang untuk memasok daya eksternal >12V.
S.Q.W.— Output sinyal Gelombang Persegi yang dapat diprogram.
SCL– Melalui pin ini, data dipertukarkan dengan jam melalui antarmuka I2C.
SDA– Data dari jam tangan dikirimkan melalui pin ini.
VCC– Catu daya untuk jam waktu nyata, diperlukan 5 volt. Jika tidak ada tegangan yang disuplai ke pin ini, jam tangan akan masuk ke mode tidur.
GND- Bumi.
Diagram koneksi untuk jam waktu nyata DS3231 dan program sederhana
Pin SDA dan SCL pada papan Arduino yang berbeda:
SDA | SCL | |
UNO | A4 | A5 |
Mini | A4 | A5 |
nano | A4 | A5 |
Mega2560 | 20 | 21 |
Leonardo | 2 | 3 |
Mari kita sambungkan modul jam real-time ke Arduino UNO. SDA - pin A4, SCL - pin A5.
Program berikut ini cocok agar model dapat berfungsi (Anda cukup menyalin program ke Arduino IDE):
#termasuk
batalkan pengaturan() (
penundaan(300);
Serial.mulai(9600);
waktu.mulai();
}
lingkaran kosong()
}
}
Dalam sketsa ini, waktu hanya menghitung mundur.
Pertama-tama, di sktech, sambungkan perpustakaan iarduino_RTC.h.
Di sana, tunjukkan nama persis modul Anda agar dapat berfungsi dengan benar.
Hasilnya, kami mendapatkan output waktu dari modul DS3231 ke port monitor. Jam, menit, detik ditampilkan.
Pada sketsa selanjutnya kita akan menambahkan fungsi Atur waktu, yang memungkinkan Anda mengatur waktu hitung mundur awal.
#termasuk
waktu iarduino_RTC(RTC_DS3231);
batalkan pengaturan() (
penundaan(300);
Serial.mulai(9600);
waktu.mulai();
waktu.settime(0,0,18,24,04,17,1); // 0 detik, 0 menit, 18 jam, 24 April 2017, Senin
}
lingkaran kosong()
if(millis()%1000==0)( // jika 1 detik telah berlalu
Serial.println(time.gettime("dm-Y, H:i:s, D")); // waktu tampilan
penundaan(1); // jeda selama 1 ms agar tidak menampilkan waktu beberapa kali dalam 1 ms
}
}
Pada contoh, waktu mulai dihitung dari 0 detik, 0 menit, pukul 18, 24 April 2017, Senin.
Postingan pelajaran:
- Pelajaran pertama: .
- Pelajaran kedua: .
- Pelajaran ketiga: .
- Pelajaran keempat: .
- Pelajaran kelima: .
- Pelajaran keenam: .
- Pelajaran ketujuh: .
- Pelajaran kedelapan: .
- Pelajaran kesembilan:
Keterangan
Modul jam waktu nyata dengan catu daya independen. Pengontrol Arduino/Genuino tidak memiliki jam waktu nyata bawaan. Untuk bekerja dengan waktu, ada fungsi millis(). Namun, untuk proyek yang memerlukan waktu dan tanggal, kemampuan fungsi ini tidak cukup dan jam waktu nyata dapat membantu.
Modul DS3231 adalah jam real-time I2C yang murah dan akurat dengan kompensasi suhu TCXO. Perangkat ini dilengkapi konektor untuk baterai CR2032 dan menjaga ketepatan waktu saat daya perangkat terputus. Jam mendukung informasi tentang detik, menit, jam, hari, bulan dan tahun. Tanggal akhir bulan secara otomatis disesuaikan untuk bulan-bulan yang memiliki hari kurang dari 31, termasuk penyesuaian tahun kabisat. Mereka beroperasi dalam salah satu mode: format 24 atau 12 jam (dengan indikator AM/PM). Mereka memiliki dua alarm yang dapat diprogram.
Karakteristik utama jam tangan:
Jam waktu nyata dengan penghitungan detik, menit, jam, hari, bulan dan tahun (dengan penyesuaian tanggal termasuk tahun kabisat hingga 2100)
Kesalahan perjalanan: ±2 menit per tahun
Sensor suhu dengan kesalahan ±3°С
Dua jam alarm
Spesifikasi
Suhu pengoperasian: -40°С - +85°С
Tegangan suplai: 2,3 - 5,5 V
Tegangan suplai baterai: 2,3 - 5,5 V
Konsumsi arus maksimum: 650 nA
Dimensi Fisik
Modul (P x L x T): 45 x 23 x 15 mm
Kelebihan penggunaan
Akurasi jam tangan yang tinggi
Ada dua jam alarm dengan fungsi interupsi
Kisaran suhu pengoperasian yang luas
Kekurangan penggunaan
Lebih mahal dari beberapa analog
Perpustakaan untuk bekerja dengan modul
Contoh koneksi dan penggunaan
Contoh 1: Contoh ini mengilustrasikan menghubungkan modul jam ke pengontrol, mengatur waktu dan tanggal pada jam, mengeluarkan waktu, tanggal dan hari dalam seminggu ke monitor port Serial, serta menerima suhu dari modul saat ini. (Contoh diuji pada pengontrol Smart UNO)
Diagram koneksi:
Sketsa untuk diunduh:
//Menghubungkan perpustakaan#termasukHari ini kami akan melanjutkan pencarian chip jam waktu nyata (RTC) yang sempurna. Kami akan membuat jam tangan berdasarkan. Tampilan akan lebih nyaman untuk pengembangan - layar LCD, yang akan menampilkan semua informasi sekaligus kecuali pengaturan. Dalam bentuk ini, jam nyaman digunakan sebagai versi desktop.
Jadi, mari kita lihat chip DS3231 itu sendiri. DS3231 adalah jam real-time dengan pergerakan yang sangat presisi (produsen memilih kata tersebut) berkat resonator kuarsa internal dengan kompensasi suhu. Antarmuka transfer data adalah I 2 C. Sirkuit mikro ini juga memiliki input untuk tegangan baterai cadangan; ketika daya utama dimatikan, sirkuit mikro secara otomatis beralih ke pengoperasian dari baterai cadangan, keakuratan pengoperasian dari baterai cadangan tidak. terpengaruh. Sangat menyenangkan bukan? DS3231 mendukung penghitungan detik, menit, jam, hari dalam sebulan (tanggal), hari dalam seminggu, bulan, dan tahun (termasuk tahun kabisat untuk bulan). Mendukung pekerjaan dalam format 12 dan 24 jam. Ada 2 jam alarm dengan kemampuan untuk mengkonfigurasinya dan memantau statusnya. Penyesuaian akurasi kompensasi suhu. Dan juga dua output - pada 32 kHz (outputnya 32,768 kHz) dan output yang dapat diprogram dari 1 Hz hingga 8,192 kHz. Ada juga pin reset - RST. Chip jam waktu nyata tersedia dalam paket SO-16. Kasingnya cukup besar, tetapi mengingat sudah ada kuarsa di dalamnya, dan juga kompensasi suhu, menurut saya semuanya baik-baik saja dengan dimensinya. DS3231 memiliki kembaran berupa DS3232, namun memiliki 2 kaki lebih banyak. Semua ini sangat mengingatkan pada produk NXP - chip jam PCA2129 dan PCF2129. Resonator kuarsa bawaan dengan kompensasi suhu serupa, keduanya merupakan kembaran yang sama hanya dengan jumlah n.c. pin dan fungsi serupa yang berhubungan dengan DS3231 selain ketepatan waktu.
RTC DS3231 tersedia untuk dijual dalam bentuk modul dengan kabel yang diperlukan, serta lengkap dengan chip EEPROM, yang seringkali tidak diperlukan, hanya menambah bobot:
Selain bagian-bagian yang diperlukan, pada papan modul juga terdapat LED yang fungsinya untuk menunjukkan sambungan listrik ke terminal. Mereka mungkin hanya mengirimkannya untuk kecantikan.
Yang penting untuk diketahui saat bekerja dengan chip jam waktu nyata adalah cara mengekstrak data darinya atau menulisnya di sana. Jam memiliki antarmuka I 2 C. Untuk menulis data (dan ini juga diperlukan untuk membaca data), Anda harus melewati kondisi awal (perintah ini dilakukan menggunakan perangkat keras atau perangkat lunak I 2 C untuk mikrokontroler), kemudian meneruskan alamat chip dengan catatan bit, kemudian meneruskan alamat register yang akan kita akses dan kemudian mentransfer satu byte data ke register ini, jika Anda kemudian mentransfer byte data lainnya, itu akan menjadi ditulis ke register berikutnya, dan seterusnya. Setelah selesai, Anda harus melewati kondisi berhenti. Representasi grafis di atas pada gambar:
Perekaman data diperlukan untuk pengaturan awal serta pengaturan waktu saat ini. Selanjutnya, kita perlu terus-menerus menerima data tentang waktu dan tanggal saat ini. Untuk melakukan ini, perlu membaca dari register yang menyimpan informasi ini. Membaca terdiri dari dua prosedur - mengatur penunjuk ke register yang diinginkan dan membacanya. Untuk menyetel penunjuk ke register yang diinginkan, Anda harus meneruskan kondisi awal, kemudian meneruskan alamat chip dengan bit tulis dan satu byte dengan alamat register. Berikutnya adalah kondisi berhenti dan kemudian kondisi mulai, atau hanya memulai kembali. Sekarang prosedur kedua adalah membaca langsung dari register. Awal ditransmisikan, maka Anda perlu mengirim alamat sirkuit mikro dengan bit baca dan kemudian membaca register dalam nomor yang diperlukan, dan setelah selesai, mengirimkan kondisi berhenti. Jika informasi dari register telah dibaca, penunjuk secara otomatis berpindah ke register berikutnya tanpa tindakan yang tidak perlu dari pihak mikrokontroler (master perangkat). Gambar tersebut mengilustrasikan semua hal di atas mengenai pembacaan register menggunakan antarmuka I 2 C:
Alamat chip:
- untuk merekam - 0b11010000
- untuk membaca - 0b11010001
Kode C akan terlihat seperti ini:
// berfungsi dengan jam ================ =============== ===== === ======== // menginisialisasi pengaturan awal void RTC_init(void)( i2c_start_cond(); // memulai i2c i2c_send_byte(RTC_adr_write); // mentransfer alamat perangkat, mode perekaman i2c_send_byte(0x0E); // mentransfer alamat memori i2c_send_byte(0b00100000); // memulai konversi suhu dan output pada 1 Hz i2c_send_byte(0b00001000); // menghentikan i2c ) // mendapatkan waktu dan tanggal void RTC_read_time(void)( i2c_start_cond() ; // memulai i2c_send_byte(RTC_adr_write); // mentransfer alamat perangkat, mode tulis i2c_stop_cond(); // menghentikan i2c i2c_send_byte(RTC_adr_read) ; / mengirimkan alamat perangkat, mode baca detik = bcd(i2c_get_byte(0)); // membaca detik, ACK min = bcd(i2c_get_byte(0)); // membaca menit, ACK jam = bcd(i2c_get_byte(0)); / baca jam, ACK wday = bcd(i2c_get_byte(0)); // membaca hari dalam seminggu, hari ACK = bcd(i2c_get_byte(0)); // membaca nomornya, ACK bulan = bcd(i2c_get_byte(0)); // membaca bulan, tahun ACK = bcd(i2c_get_byte(1)); // membaca tahun, NACK i2c_stop_cond(); // hentikan i2c ) // atur waktu void RTC_write_time(unsigned char hour1, unsigned char min1, unsigned char sec1)( i2c_start_cond(); // mulai i2c i2c_send_byte(RTC_adr_write); // transfer alamat perangkat, mode perekaman i2c_send_byte( 0x00) ; // transfer alamat memori i2c_send_byte(bin(detik1)); // 0x00 detik (apakah sebaiknya juga menentukan detik?) i2c_send_byte(bin(min1)); ; jam i2c_stop_cond(); // hentikan i2c ) // menyetel tanggal batal RTC_write_date(tanggal karakter yang tidak ditandatangani, hari karakter yang tidak ditandatangani, bulan karakter yang tidak ditandatangani, tahun karakter yang tidak ditandatangani)( i2c_start_cond(); // mulai i2c i2c_send_byte(RTC_adr_write); / / mentransfer alamat perangkat, mode perekaman i2c_send_byte(0x03); // transfer alamat memori i2c_send_byte(bin(wday)); // 0x03 hari dalam seminggu (Minggu - 1, Sen 2, Sel 3, Rabu 4, Kam 5, Jum 6, Sabtu 7 ) i2c_send_byte(bin(hari)); // 0x04 hari bulan i2c_send_byte(bin(bulan)); // 0x05 bulan i2c_send_byte(bin(tahun)); // 0x06 tahun i2c_stop_cond(); // hentikan i2c ) // baca suhu void RTC_read_temper(void)( i2c_start_cond(); // mulai i2c i2c_send_byte(RTC_adr_write); // transfer alamat perangkat, mode tulis i2c_send_byte(0x11); // transfer alamat memori i2c_stop_cond (); // menghentikan i2c i2c_start_cond(); // memulai i2c_send_byte(RTC_adr_read); // mengirimkan alamat perangkat, mode baca t1 = i2c_get_byte(0); / stop i2c t2=(t2/128); // bergeser sebanyak 6 - presisi 0,25 (2 bit) // bergeser sebanyak 7 - presisi 0,5 (1 bit) t2=t2*5;
Ini semua kode sumber yang digunakan untuk bekerja dengan sirkuit mikro; penyesuaian kecepatan jam tidak terpengaruh, karena jam tidak kehilangan satu detik pun dalam beberapa hari.
Ya - fitur yang hebat DS3231 adalah chip yang sama menjalankan fungsi termometer (jika tidak, bagaimana lagi melakukan kompensasi suhu) dan kemampuan membaca suhu saat ini. Resolusi suhu maksimum adalah 0,25 derajat Celcius. Selain itu, periode pembaruan suhunya cukup lama - sekitar 1 menit. Ya, kami tidak perlu memperbaruinya dengan cepat.
Diagram seluruh struktur jam terlihat seperti ini:
Mikrokontroler dipilih oleh Atmega8 karena ketersediaannya yang luas dan harganya yang murah. Mikrokontroler ini dapat digunakan baik dalam paket DIP-28 maupun dalam versi SMD dalam paket TQFP-32. Resistor R3 diperlukan untuk mencegah restart spontan mikrokontroler jika terjadi gangguan acak pada pin PC6. Resistor R3 menarik daya plus ke pin ini, menciptakan potensi yang andal di dalamnya. Layar kristal cair (LCD) digunakan untuk tampilan. Saya menggunakan tampilan 2004A - 4 baris 20 karakter lebih untuk kecantikan, jadi Anda bisa menggunakan tampilan yang lebih familiar - 2 baris 16 karakter. Layar LCD dihubungkan ke mikrokontroler menggunakan sistem empat bit. Resistor variabel R2 diperlukan untuk mengatur kontras karakter pada tampilan. Dengan memutar penggeser resistor ini, kami mendapatkan pembacaan paling jelas di layar untuk kami. Lampu latar layar LCD diatur melalui pin “A” dan “K” pada papan display. Lampu latar dinyalakan melalui resistor pembatas arus - R1. Semakin tinggi nilainya, semakin redup tampilannya. Namun resistor ini tidak boleh diabaikan untuk menghindari kerusakan pada lampu latar. Tombol S1 - S4 mengontrol pengaturan jam. LED menunjukkan bahwa alarm telah berbunyi. LED dapat diganti dengan semacam rangkaian suara. Resistor R5 - R8 bersifat pull-up dan diperlukan untuk pembentukan pulsa persegi panjang di terminal chip jam. Ini juga diperlukan agar protokol I2C dapat berfungsi dengan benar. Untuk memberi daya pada rangkaian, digunakan chip penstabil linier L7805; dapat diganti dengan analog domestik dari penstabil linier lima volt KR142EN5A, atau Anda dapat menggunakan chip penstabil tegangan lain sesuai dengan koneksinya di sirkuit (misalnya, LM317 atau switching stabilisator LM2576, LM2596, MC34063, dan seterusnya). Selanjutnya, 5 volt distabilkan oleh sirkuit mikro lain - AMS1117 dalam versi yang memberikan output 3,3 volt. Chip jam tersebut, menurut datasheet, ditenagai oleh tegangan 3,3 volt. Namun tegangan maksimumnya adalah 5,5 volt. Oleh karena itu, stabilizer ini dapat digunakan atau tidak, sesuai kebijaksanaan Anda. Penstabil tegangan AMS1117 juga dapat diganti dengan versi ADJ (AMS1117ADJ) - yaitu, versi yang dapat disesuaikan, Anda perlu mengatur tegangan yang diperlukan dengan pilihan inimenggunakan dua buah resistor yang dihubungkan pada rangkaian mikro sesuai dengan datasheetnya.
Sirkuit dirakit dan di-debug menggunakan papan pengembangan untuk mikrokontroler ATmega8:
Tujuan dari tombol:
- S1 - mematikan sinyal alarm, atau keluar ke menu utama dari menu pengaturan apa pun
- S2- reset mikrokontroler
- S3 - mengubah waktu atau tanggal di menu pengaturan
- S4 - masuk ke menu pengaturan dan gulir menu
Pin 32 kHz dapat digunakan untuk mengontrol frekuensi kristal. Kami menghubungkan pengukur frekuensi atau osiloskop ke pin ini dan mengontrol frekuensi:
Seperti yang dapat dilihat dari tangkapan layar osilogram, frekuensinya kira-kira sama dengan 32,768 kHz (kira-kira karena keterbatasan resolusi pengukuran frekuensi, dan sulit untuk menentukan secara akurat “dengan mata”).
Hasilnya adalah jam tangan dengan ciri-ciri sebagai berikut:
- indikasi waktu
- tampilan tanggal
- indikasi hari dalam seminggu
- indikasi aktivitas jam alarm
- 1 jam alarm dengan keluaran sinyal dari mikrokontroler
- indikasi suhu sekitar (hanya suhu positif yang diterapkan dalam perangkat lunak; suhu negatif, menurut saya, tidak ada gunanya bagi kami)
- pengaturan alarm
- pengaturan waktu
- pengaturan tanggal
- Layar LCD dengan lampu latar
- menyimpan pengaturan dan melanjutkan jam saat daya utama dimatikan
Mari kita rangkum. Chip jam waktu nyata DS3231 adalah solusi terbaik. Akurasinya sebanding dengan beberapa DS1307 atau lebih tinggi, namun PCA/PCF2129 masih dapat bersaing dengannya. Di antara chip jam real-time yang telah saya ulas, instance ini saat ini menempati peringkat pertama dalam hal fungsionalitas dan akurasi.
Untuk memprogram mikrokontroler Atmega8, Anda perlu mengetahui konfigurasi bit sekering (tangkapan layar diambil dalam program):
Artikel ini disertai dengan firmware untuk mikrokontroler Atmega8, desain sirkuit dalam program, serta video jam kerja (di awal alarm akan berbunyi - LED akan menyala).
Daftar elemen radio
Penamaan | Jenis | Denominasi | Kuantitas | Catatan | Toko | Buku catatan saya |
---|---|---|---|---|---|---|
IC1 | MK AVR 8-bit | ATmega8 | 1 | Ke buku catatan | ||
IC2 | Jam Waktu Nyata (RTC) | DS3231 | 1 | Ke buku catatan | ||
VR1 | Pengatur linier | L7805AB | 1 | Ke buku catatan | ||
VR2 | Pengatur linier | AMS1117-3.3 | 1 | Ke buku catatan | ||
VD1 | Dioda penyearah | 1N4148 | 1 | Ke buku catatan | ||
C1 | 470 mikrofarad | 1 | Ke buku catatan | |||
C2, C3, C5, C7 | Kapasitor | 100 nF | 4 | Ke buku catatan | ||
C4 | Kapasitor elektrolitik | 220 uF | 1 | Ke buku catatan | ||
C6, C8 | Kapasitor elektrolitik | 10 mikrofarad | 2 | Ke buku catatan | ||
R1 | Penghambat | 22 ohm | 1 | Ke buku catatan | ||
R2 | Resistor pemangkas | 10 kOhm | 1 | 3296W-1-103LF |
Chip DS3231 adalah jam real-time RTC presisi tinggi yang memiliki osilator kuarsa kompensasi suhu internal, sehingga penyimpangan waktu hanya ±2 menit per tahun. Selain itu, fungsi alarm diterapkan, dan ada juga keluaran interupsi. Jam dapat dibeli sebagai modul Arduino siap pakai dengan elemen pengikat dan tempat baterai.
Saya memesan modul di sini. Diagramnya ditunjukkan pada gambar di bawah ini:
Sirkuit mikro menggunakan yang banyak digunakan. Mendukung kecepatan data standar (100 kHz) dan tinggi (400 kHz). Alamat sirkuit mikro (7 bit) pada bus I2C adalah 1101000. Selain itu, modul ini memiliki memori I2C (24C32), tidak ditampilkan dalam diagram.
Mode Daya
Tegangan suplai rangkaian mikro dapat berkisar antara 2.3...5.5V, terdapat dua saluran listrik, untuk sumber luar (saluran Vcc), dan juga untuk baterai (Vbat). Tegangan sumber eksternal dipantau secara konstan, dan ketika turun di bawah ambang batas Vpf=2.5V, tegangan tersebut beralih ke saluran baterai. Tabel berikut menunjukkan kondisi peralihan antar saluran listrik:
Akurasi jam tangan dijaga dengan memantau suhu sekitar. Sirkuit mikro memulai prosedur internal untuk menyesuaikan frekuensi generator jam; jumlah penyesuaian ditentukan menggunakan grafik khusus frekuensi versus suhu. Prosedur dimulai setelah listrik dialirkan dan kemudian dijalankan setiap 64 detik.
Untuk menghemat daya, ketika baterai terhubung (tegangan diterapkan ke saluran Vbat), generator jam tidak akan hidup sampai tegangan pada saluran Vcc melebihi nilai ambang batas Vpf, atau alamat sirkuit mikro yang benar ditransmisikan melalui antarmuka I2C. Waktu pengaktifan generator jam kurang dari satu detik. Sekitar 2 detik setelah daya dialirkan (Vcc), atau alamat diterima melalui antarmuka I2C, prosedur koreksi frekuensi dimulai. Setelah generator jam dimulai, generator jam akan terus beroperasi selama Vcc atau Vbat ada. Saat dihidupkan untuk pertama kalinya, register tanggal dan waktu direset dan memiliki nilai berikut: 01/01/00 – 01 – 00/00/00 (hari/bulan/tahun/ – hari dalam seminggu – jam/menit /detik).
Konsumsi arus saat ditenagai oleh baterai 3,63V adalah 3 µA, tanpa adanya transmisi data melalui antarmuka I2C. Konsumsi arus maksimum dapat mencapai 300 µA bila menggunakan catu daya eksternal 5.5V dan kecepatan transfer data I2C yang tinggi.
Fungsi reset eksternal
Jalur RST dapat digunakan untuk reset eksternal dan juga memiliki fungsi alarm tegangan rendah. Garis ditarik tinggi melalui resistor internal; tidak diperlukan pull-up eksternal. Untuk menggunakan fungsi reset eksternal, sebuah tombol dapat dihubungkan antara saluran RST dan kabel umum; sirkuit mikro memiliki perlindungan pantulan kontak. Fungsi alarm diaktifkan ketika tegangan suplai Vcc turun di bawah nilai ambang batas Vpf, sedangkan saluran RST diatur ke level logika rendah.
Deskripsi register DS3231
Tabel di bawah ini menunjukkan daftar register jam waktu nyata:
Alamat | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Fungsi | Batasan |
0x00 | 0 | 10 detik | Detik | Detik | 00-59 | |||||
0x01 | 0 | 10 menit | menit | menit | 00-59 | |||||
0x02 | 0 | 12/24 | pagi/sore | 10 jam | Jam | Jam tangan | 1-12 + AM/PM atau 00-23 | |||
10 jam | ||||||||||
0x03 | 0 | 0 | 0 | 0 | 0 | Hari | Hari di minggu ini | 1-7 | ||
0x04 | 0 | 0 | tanggal 10 | Nomor | tanggal | 01-31 | ||||
0x05 | Abad | 0 | 0 | 10 bulan | Bulan | Bulan/abad | 01-12 + Abad | |||
0x06 | 10 tahun | Tahun | Bertahun-tahun | 00-99 | ||||||
0x07 | A1M1 | 10 detik | Detik | Detik, alarm pertama | 00-59 | |||||
0x08 | A1M2 | 10 menit | menit | Menit, alarm pertama | 00-59 | |||||
0x09 | A1M3 | 12/24 | pagi/sore | 10 jam | Jam | Jam, alarm pertama | 1-12 + AM/PM atau 00-23 | |||
10 jam | ||||||||||
0x0A | A1M4 | DY/DT | tanggal 10 | Hari | Hari dalam seminggu, alarm pertama | 1-7 | ||||
Nomor | Tanggal, alarm pertama | 01-31 | ||||||||
0x0B | A2M2 | 10 menit | menit | Menit, alarm ke-2 | 00-59 | |||||
0x0C | A2M3 | 12/24 | pagi/sore | 10 jam | Jam | Jam, alarm ke-2 | 1-12 + AM/PM atau 00-23 | |||
10 jam | ||||||||||
0x0D | A2M4 | DY/DT | tanggal 10 | Hari | Hari dalam seminggu, alarm ke-2 | 1-7 | ||||
Nomor | Tanggal, alarm ke-2 | 01-31 | ||||||||
0x0E | EOSC | BBSQW | KONV | RS2 | RS1 | INTCN | A2IE | A1IE | Daftar pengaturan (Kontrol) | |
0x0F | OSF. | 0 | 0 | 0 | EN32kHz | BSY | A2F | A1F | Daftar Status | |
0x10 | TANDA | DATA | DATA | DATA | DATA | DATA | DATA | DATA | Daftar Offset Penuaan | |
0x11 | TANDA | DATA | DATA | DATA | DATA | DATA | DATA | DATA | Daftar suhu, byte tinggi | |
0x12 | DATA | DATA | 0 | 0 | 0 | 0 | 0 | 0 | Daftar suhu, byte rendah |
Informasi waktu disimpan dalam format desimal biner, yaitu setiap digit angka desimal (dari 0 hingga 9) direpresentasikan sebagai kelompok 4 bit. Dalam kasus satu byte, nibble rendah menghitung satu, nibble tinggi menghitung puluhan, dll. Waktu dihitung dalam register dengan alamat 0x00-0x06; untuk menghitung jam, Anda dapat memilih mode 12 atau 24 jam. Mengatur bit ke-6 dari register jam (alamat 0x02) mengatur mode 12 jam, di mana bit ke-5 menunjukkan waktu, nilai 1 berarti sore (PM), nilai 0 berarti sore (AM). Nilai nol dari bit ke-6 sesuai dengan mode 24 jam, di sini bit ke-5 terlibat dalam penghitungan jam (nilai 20-23).
Register hari dalam seminggu bertambah pada tengah malam, menghitung dari 1 hingga 7, register bulan (alamat 0x05) berisi bit Abad (bit ke-7), yang beralih ketika register penghitungan tahun (alamat 0x06) meluap, dari 99 ke 00 .
Chip DS3231 mengimplementasikan dua jam alarm, jam alarm pertama dikonfigurasi menggunakan register dengan alamat 0x07-0x0A, jam alarm ke-2 dikonfigurasi menggunakan register 0x0B-0x0D. Bit A1Mx dan A2Mx dapat digunakan untuk mengkonfigurasi berbagai mode alarm; pengaturan bit mengecualikan register yang sesuai dari operasi perbandingan. Tabel di bawah menunjukkan kombinasi bit untuk mode alarm yang berbeda:
Kombinasi bit yang tidak ditentukan dalam tabel menyebabkan fungsi alarm tidak tepat. Jika bit DY/DT dihapus, maka kecocokan tanggal (hari dalam sebulan) dimonitor untuk jam alarm; ketika bit DY/DT disetel, kecocokan hari dalam seminggu diperiksa.
Sebagian besar fungsi dikonfigurasikan dalam register Kontrol. Bit EOSC mengontrol permulaan generator jam, menyetel ulang bit akan memulai generator jam. Menyetel bit akan menghentikan generator, hanya untuk mode baterai (Vbat). Ketika diberi daya dari sumber eksternal (Vcc), osilator selalu berjalan terlepas dari status bit EOSC. Saat diaktifkan, nilai bit default adalah 0.
Mengatur bit BBSQW memungkinkan output INT/SQW (pin ke-3) beroperasi dalam mode daya baterai, tanpa adanya daya eksternal. Ketika bit diatur ke nol, keluaran INT/SQW masuk ke keadaan 3 (dinonaktifkan) jika tegangan sumber eksternal Vcc turun di bawah nilai ambang batas Vpf. Setelah daya diterapkan, nilai bit default adalah 0.
Bit CONV bertanggung jawab untuk pengukuran suhu paksa; pengaturan bit memulai proses konversi, di mana frekuensi generator jam juga disesuaikan; hasil pengukuran terletak di register dengan alamat 0x11, 0x12. Memulai hanya mungkin jika konversi sebelumnya telah selesai; sebelum memulai, Anda perlu memeriksa tanda sibuk BSY. Konversi suhu paksa tidak mempengaruhi siklus penyesuaian frekuensi internal 64 detik. Menyetel bit CONV tidak mempengaruhi flag BSY selama 2 ms. Bit CONV dan BSY dihapus secara otomatis setelah konversi selesai.
Bit RS2, RS1 mengatur frekuensi pulsa persegi panjang (gelombang persegi) pada output INT/SQW. Secara default, saat diaktifkan, bit disetel ke 1. Tabel di bawah menunjukkan kemungkinan kombinasi bit:
Bit INTCN mengontrol keluaran INT/SQW. Jika bit direset, pulsa persegi panjang (gelombang persegi) muncul pada output, yang frekuensinya diatur oleh bit RS2, RS1. Ketika bit INTCN disetel, outputnya digunakan untuk menghasilkan interupsi alarm. Secara default, nilai bitnya adalah 1. Tipe outputnya adalah INT/SQW - open drain, oleh karena itu perlu ditarik melalui resistor ke level logika tinggi, level aktifnya rendah.
Mengatur bit A1IE, A2IE mengaktifkan interupsi masing-masing pada sinyal alarm ke-1 dan ke-2. Reset bit, nonaktifkan interupsi. Nilai defaultnya adalah 0.
Register Status berisi tanda peristiwa dan mengontrol output 32 kHz. Flag OSF mencerminkan keadaan generator jam, nilai 1 berarti generator jam dihentikan, peristiwa ini dapat terjadi dalam kasus berikut:
- Untuk pertama kalinya setelah listrik diterapkan
- Baterai atau voltase eksternaltage tidak cukup untuk mengoperasikan generator jam
- Generator dinonaktifkan dengan mengatur bit EOSC dalam mode baterai
- Faktor eksternal yang mempengaruhi osilator kristal (kebisingan, kebocoran, dll.)
Setelah disetel, nilai bit tidak berubah; bit harus diatur ulang secara manual.
Pengaturan bit EN32kHz memungkinkan pembangkitan pulsa persegi panjang (gelombang persegi) pada output 32kHz (pin pertama), frekuensi pulsa tetap dan sama dengan 32,768 kHz. Menyetel ulang bit akan menonaktifkan fungsi ini dan memindahkan keluaran ke keadaan ke-3 (impedansi masukan tinggi). Secara default, nilai bit adalah 1; setelah daya diterapkan, pulsa muncul pada output. Tipe outputnya adalah open drain 32kHz, jadi diperlukan pull-up ke level logika tinggi.
Bendera sibuk BSY diatur selama proses konversi suhu dan penyesuaian jam. Bendera disetel ulang ketika konversi selesai.
Bendera jam alarm A1F, A2F diatur ketika nilai register penghitung waktu dan register jam alarm cocok. Jika interupsi dari alarm A1IE, A2IE diaktifkan, dan output interupsi ditetapkan (bit INTCN diatur), maka sinyal interupsi muncul pada output INT/SQW (transisi dari level logika tinggi ke rendah). Bendera harus direset secara manual dengan menulis nilai 0.
Register Aging Offset dirancang untuk mengatur frekuensi generator jam. Nilai register ditambahkan ke frekuensi osilator selama prosedur penyesuaian internal, jika perubahan suhu terdeteksi, dan juga ketika konversi suhu dipicu oleh bit CONV. Nilai offset ditandatangani, yaitu nilai positif (1-127) mengurangi frekuensi, nilai negatif (128-255) meningkatkannya. Untuk offset yang sama, perubahan frekuensi akan berbeda tergantung suhu. Pada +25°C, perubahan frekuensi akan menjadi 0,1 ppm/LSB.
Nilai suhu saat ini disimpan dalam register dengan alamat 0x11 dan 0x12, masing-masing byte tinggi dan rendah, nilai suhu dalam register diperbarui secara berkala. Perataan kiri diatur, resolusinya adalah 10 bit atau 0,25°C/LSB, yaitu byte tinggi berisi bagian bilangan bulat suhu, dan bit ke-6, ke-7 dalam register rendah membentuk bagian pecahan. Pada byte tinggi, bit ke-7 menunjukkan tanda suhu, misalnya nilai 00011011 01 melambangkan suhu +27.25 °C, nilai 11111110 10 melambangkan suhu -2.5 °C.
Saat membaca register waktu, disarankan untuk menggunakan buffer tambahan, yaitu membaca beberapa register sekaligus, dan tidak secara terpisah, karena antara operasi pembacaan individual, register waktu dapat mengubah nilainya. Aturan ini juga disarankan untuk dipatuhi saat menulis data baru ke register akun. Menulis nilai baru ke register detik akan menjeda jam selama 1 detik, register yang tersisa harus ditulis ulang selama waktu ini.
Menghubungkan DS3231 ke mikrokontroler
Saya menghubungkan jam ke mikrokontroler PIC16F628A dan menggunakan . Diagram koneksi ditunjukkan di bawah ini:
Setelah daya dialirkan, tanda hubung (– – – – – –) ditampilkan pada indikator, kemudian jam diinisialisasi, nilai waktu muncul pada indikator dengan penundaan 1 detik, yang diperlukan untuk menghidupkan generator jam. Indikator menampilkan jam, menit dan detik, dipisahkan dengan titik desimal, dan format waktu adalah 24 jam. Dengan menggunakan tombol “Indikasi” SB1, Anda dapat mengubah format tampilan, di mana indikator akan menampilkan suhu, serta nilai jam dan menit, dipisahkan dengan titik desimal, yang berkedip dengan frekuensi 2 Hz. Suhu ditampilkan tanpa bagian pecahan; program hanya membaca byte tinggi penyimpanan suhu di alamat 0x11.
Nilai waktu dibaca dari jam melalui interupsi pada jalur SQW/INT, yang dikendalikan oleh sinyal alarm pertama; selama inisialisasi jam, jam alarm diatur ke sinyal setiap detik. LED HL1 berfungsi sebagai indikator dan berkedip pada sinyal interupsi setiap detik. LED HL2 menyala jika terjadi kesalahan pengiriman data melalui antarmuka I2C.
Selain itu, saya menambahkan ke program kemampuan untuk mengatur jam menggunakan tombol "Pengaturan" SB2, "Instalasi" SB3. Mode pengaturan dimasukkan dengan menekan tombol SB2; indikator menampilkan 00 jam dan tanda hubung, bukan menit dan detik (00 – – – –). Tombol SB3 mengatur nilai jam (bertambah setiap kali ditekan), lalu menekan tombol SB2 akan mengubah menit, bukan tanda hubung, 00 menit akan ditampilkan. Tombol SB3 juga menetapkan nilai yang diperlukan dan seterusnya. Setelah mengedit detik dan menekan tombol SB2, waktu dalam jam ditulis ulang, dan waktu yang diperbarui ditampilkan pada indikator.
Sebagian kode program diberikan di bawah ini (versi lengkap dapat diunduh di akhir artikel):
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; #termasuk
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; #termasuk CONFIG H"3F10" ;Konfigurasi mikrokontroler errorlevel -302 ;jangan tampilkan pesan kesalahan 302 dalam daftar Detik sama dengan 0020h; register akun tambahan Detik1 sama dengan 0021h ; Detik2 sama dengan 0022h ; scetbit equ 0024h ;menghitung jumlah bit register tambahan perem equ 0025h; register penerimaan/transmisi byte tambahan melalui spi, i2c temp equ 0026h ;register suhu perem_1 equ 0027h ;daftar tambahan konverter biner-desimal. hasilnya sama dengan 0028h; register tambahan BCD dat_ind equ 0029h ;registrasi data untuk transmisi melalui protokol spi adr_ind equ 002Ah ;daftar alamat untuk transmisi melalui protokol spi detik sama dengan 002Bh; register penyimpanan detik untuk mengatur waktu minut equ 002Ch ;daftar penyimpanan menit untuk mengatur waktu jam setara 002Dh ;daftar penyimpanan jam untuk mengatur waktu adr_i2c equ 002Eh ;register subrutin transfer data antarmuka i2c tmp_i2c sama dengan 002Fh slave_adr sama dengan 0030h data_i2c sama dengan 0031h bendera sama dengan 007Fh ;daftar bendera #DEFINE int PORTB,0 ;interupsi jalur INT/SQW DS3231 #DEFINE sda PORTB,1 ;Jalur SDA untuk menghubungkan DS3231 #DEFINE scl PORTB,2 ;SCL line untuk menghubungkan DS3231 #DEFINE datai PORTB,5 ;jalur input data driver MAX7219 #DEFINE cs PORTB,6 ;jalur pemilihan driver MAX7219 #DEFINE clk PORTB,7 ;garis jam driver MAX7219 #DEFINE led PORTB,4 ;LED kesalahan i2c #DEFINE led_sec PORTB,3 ;Indikator kemajuan jam LED 1Hz #DEFINE regim PORTA,2 ;Tombol indikasi - mengubah mode tampilan #DEFINE nast PORTA,3 ;Tombol pengaturan - memasuki mode pengaturan waktu #DEFINE ust PORTA,4 ;Tombol setel - atur nilai jam ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; org 0000h ;mulai eksekusi program dari alamat 0000h goto Mulai; buka label Mulai ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Program utama Mulai movlw b"00000000" ;atur nilai kait keluaran port A movlw b"01000000" ;atur nilai kait keluaran port B movlw b"00000111" ;matikan pembanding bsf STATUS,RP0 ;pilih bank pertama movlw b"00000111" ;mengonfigurasi jalur input/output port B movwf TRISB ;RB0-RB2 - ke input, sisanya ke output movlw b"11111111" ;menyiapkan jalur input/output port A movwf TRISA ;semua baris untuk dimasukkan bcf STATUS,RP0 ;pilih bank 0 bendera clrf ;setel ulang daftar bendera panggil init_lcd ;panggil rutinitas inisialisasi driver (MAX7219) panggil viv_not ;simbol tanda hubung keluaran " ------ " ke indikator ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; movlw b"11010000";alamat perangkat (DS3231) ;Tulis 4 byte ke register penerimaan/pengiriman melalui i2c movlw data_i2c ;mengatur register penerimaan/pengiriman pertama melalui i2c movlw b"10000000" ;data untuk register detik alarm pertama movlw b"10000000" ;data untuk register menit alarm pertama movlw b"10000000" ;data untuk register jam alarm pertama movlw b"10000000" ;data untuk tanggal/hari minggu register alarm pertama movlw .4 ;transfer 4 byte melalui i2c movlw 0x07 ;mengatur alamat register detik jam alarm pertama |
Dalam banyak proyek Arduino, diperlukan pemantauan dan pencatatan waktu terjadinya peristiwa tertentu. Modul jam waktu nyata, dilengkapi dengan baterai tambahan, memungkinkan Anda menyimpan tanggal saat ini tanpa bergantung pada ketersediaan daya pada perangkat itu sendiri. Pada artikel ini kita akan membahas tentang modul RTC paling umum DS1307, DS1302, DS3231 yang dapat digunakan dengan papan Arduino.
Modul jam adalah papan kecil yang biasanya berisi salah satu sirkuit mikro DS1307, DS1302, DS3231. Selain itu, di papan tersebut Anda secara praktis dapat menemukan mekanisme pemasangan baterai. Papan semacam itu sering digunakan untuk melacak waktu, tanggal, hari dalam seminggu, dan parameter kronometrik lainnya. Modul beroperasi dengan daya otonom - baterai, akumulator, dan terus menghitung bahkan jika daya ke Arduino dimatikan. Model jam tangan yang paling umum adalah DS1302, DS1307, DS3231. Mereka didasarkan pada modul RTC (real time clock) yang terhubung ke Arduino.
Jam dihitung dalam satuan yang nyaman bagi kebanyakan orang - menit, jam, hari dalam seminggu, dan lain-lain, berbeda dengan penghitung konvensional dan generator jam yang bertuliskan “detik”. Arduino memiliki fungsi millis() khusus yang juga dapat membaca interval waktu berbeda. Namun kelemahan utama dari fungsi ini adalah ia akan disetel ulang ke nol saat pengatur waktu dihidupkan. Dengan bantuannya Anda hanya dapat membaca waktu; tidak mungkin menentukan tanggal atau hari dalam seminggu. Modul jam waktu nyata digunakan untuk mengatasi masalah ini.
Sirkuit elektronik mencakup sirkuit mikro, catu daya, resonator kuarsa, dan resistor. Resonator kuarsa beroperasi pada frekuensi 32768 Hz, yang sesuai untuk pencacah biner konvensional. Sirkuit DS3231 memiliki kuarsa dan stabilisasi termal bawaan, yang memungkinkan nilai yang sangat akurat.
Perbandingan modul RTC populer DS1302, DS1307, DS3231
Dalam tabel ini kami telah menyediakan daftar modul paling populer dan karakteristik utamanya.
Nama | Frekuensi | Ketepatan | Protokol yang didukung |
DS1307 | 1 Hz, 4,096 kHz, 8,192 kHz, 32,768 kHz | Tergantung pada kuarsa - biasanya nilainya mencapai 2,5 detik per hari, tidak mungkin mencapai akurasi lebih tinggi dari 1 detik per hari. Selain itu, keakuratannya bergantung pada suhu. | I2C |
DS1302 | 32,768 kHz | 5 detik sehari | I2C, SPI |
DS3231 | Dua output - yang pertama pada 32,768 kHz, yang kedua dapat diprogram dari 1 Hz hingga 8,192 kHz | ±2 ppm pada suhu dari 0C hingga 40C. ±3,5 ppm pada suhu -40C hingga 85C. Akurasi pengukuran suhu – ±3С |
I2C |
Modul DS1307
DS1307 adalah modul yang digunakan untuk pengaturan waktu. Itu dirakit berdasarkan chip DS1307ZN, daya disuplai dari baterai lithium untuk memastikan operasi otonom untuk jangka waktu yang lama. Baterai di papan dipasang di sisi sebaliknya. Modul ini memiliki chip AT24C32 - ini adalah memori EEPROM non-volatil 32 KB. Kedua sirkuit mikro dihubungkan oleh bus I2C. DS1307 memiliki konsumsi daya yang rendah dan berisi jam dan kalender untuk tahun 2100.
Modul ini memiliki parameter berikut:
- Catu daya – 5V;
- Kisaran suhu pengoperasian dari -40C hingga 85C;
- memori 56 byte;
- Baterai litium LIR2032;
- Menerapkan mode 12 dan 24 jam;
- Dukungan antarmuka I2C.
Modul ini dibenarkan jika data jarang dibaca, dengan interval seminggu atau lebih. Hal ini memungkinkan Anda menghemat daya, karena penggunaan tanpa gangguan akan memerlukan lebih banyak voltase, bahkan dengan baterai. Kehadiran memori memungkinkan Anda untuk mendaftarkan berbagai parameter (misalnya pengukuran suhu) dan membaca informasi yang diterima dari modul.
Interaksi dengan perangkat lain dan pertukaran informasi dengannya dilakukan menggunakan antarmuka I2C dari pin SCL dan SDA. Sirkuit ini berisi resistor yang memungkinkan Anda memberikan level sinyal yang diperlukan. Papan juga memiliki tempat khusus untuk memasang sensor suhu DS18B20. Kontak dibagi menjadi 2 kelompok, pitch 2,54 mm. Grup kontak pertama berisi pin berikut:
- DS – keluaran untuk sensor DS18B20;
- SCL – garis jam;
- SDA – jalur data;
- VCC – 5V;
Grup kontak kedua berisi:
- meter persegi – 1 MHz;
- BAT – masukan untuk baterai litium.
Untuk terhubung ke papan Arduino, Anda memerlukan papan itu sendiri (dalam hal ini kami mempertimbangkan Arduino Uno), modul jam waktu nyata RTC DS1307, kabel dan kabel USB.
Untuk menghubungkan pengontrol ke Arduino digunakan 4 pin - VCC, ground, SCL, SDA.. VCC dari jam dihubungkan ke 5V di Arduino, ground dari jam dihubungkan ke ground dari Arduino, SDA - A4, SCL - A5.
Untuk mulai bekerja dengan modul jam, Anda perlu menginstal perpustakaan DS1307RTC, TimeLib dan Wire. Anda juga dapat menggunakan RTCLib untuk bekerja.
Memeriksa modul RTC
Saat Anda menjalankan kode pertama, program akan membaca data dari modul satu kali per detik. Pertama, Anda dapat melihat bagaimana program berperilaku jika Anda melepas baterai dari modul dan menggantinya dengan yang lain saat papan Arduino tidak terhubung ke komputer. Anda perlu menunggu beberapa detik dan melepas baterai, pada akhirnya jam tangan akan reboot. Kemudian Anda perlu memilih contoh dari menu Contoh→RTClib→ds1307. Penting untuk mengatur kecepatan transmisi dengan benar ke 57600 bps.
Saat Anda membuka jendela Serial Monitor, baris berikut akan muncul:
Waktu akan menunjukkan 0:0:0. Ini karena jam tangan kehilangan tenaga dan berhenti menghitung waktu. Oleh karena itu, baterai tidak boleh dilepas saat modul sedang beroperasi.
Untuk mengatur waktu pada modul, Anda perlu menemukan garis di sketsa
RTC.menyesuaikan(DateTime(__DATE__, __TIME__));
Baris ini akan berisi data dari komputer yang digunakan untuk mem-flash modul jam waktu nyata. Untuk pengoperasian yang benar, Anda harus terlebih dahulu memeriksa kebenaran tanggal dan waktu di komputer, dan baru kemudian mulai mem-flash modul jam. Setelah pengaturan, monitor akan menampilkan data berikut:
Penyiapan dilakukan dengan benar dan tidak perlu lagi mengkonfigurasi ulang jam waktu nyata.
Waktu membaca. Setelah modul dikonfigurasi, permintaan waktu dapat dikirim. Hal ini dilakukan dengan menggunakan fungsi now(), yang mengembalikan objek DateTime yang berisi informasi waktu dan tanggal. Ada sejumlah perpustakaan yang digunakan untuk membaca waktu. Misalnya, RTC.year() dan RTC.hour() - keduanya memperoleh informasi tentang tahun dan jam secara terpisah. Saat bekerja dengan mereka, masalah mungkin muncul: misalnya, permintaan untuk menampilkan waktu akan dilakukan pada 1:19:59. Sebelum menunjukkan waktu 1:20:00, jam akan menampilkan waktu 1:19:00, artinya satu menit akan hilang. Oleh karena itu, disarankan untuk menggunakan perpustakaan ini jika pembacaan jarang terjadi - setiap beberapa hari sekali. Ada fungsi lain untuk memanggil waktu, tetapi jika Anda perlu mengurangi atau menghindari kesalahan, lebih baik gunakan sekarang() dan ekstrak bacaan yang diperlukan darinya.
Contoh proyek dengan modul dan tampilan jam i2C
Proyek ini adalah jam biasa; waktu yang tepat akan ditampilkan pada indikator, dan titik dua di antara angka-angka tersebut akan berkedip dengan interval sekali setiap detik. Untuk mengimplementasikan proyek ini, Anda memerlukan papan Arduino Uno, indikator digital, jam waktu nyata (dalam hal ini, modul ds1307 yang dijelaskan di atas), pelindung untuk koneksi (dalam hal ini, Troyka Shield digunakan), baterai untuk jam dan kabel.
Proyek ini menggunakan indikator empat digit sederhana pada chip TM1637. Perangkat ini memiliki antarmuka dua kabel dan menyediakan 8 tingkat kecerahan monitor. Hanya digunakan untuk menampilkan waktu dalam format jam:menit. Indikatornya mudah digunakan dan mudah dihubungkan. Ini bermanfaat untuk digunakan pada proyek yang tidak memerlukan verifikasi data setiap menit atau setiap jam. Untuk memperoleh informasi lebih lengkap mengenai waktu dan tanggal digunakan monitor LCD.
Modul jam terhubung ke pin SCL/SDA milik bus I2C. Anda juga perlu menghubungkan ground dan listrik. Terhubung ke Arduino dengan cara yang sama seperti dijelaskan di atas: SDA – A4, SCL – A5, ground dari modul ke ground dari Arduino, VCC -5V.
Indikatornya terhubung secara sederhana - pin CLK dan DIO-nya terhubung ke pin digital mana pun di papan.
Sketsa. Untuk menulis kode, gunakan fungsi pengaturan, yang memungkinkan Anda menginisialisasi jam dan indikator serta mencatat waktu kompilasi. Pencetakan waktu ke layar akan dilakukan menggunakan loop.
#termasuk
Setelah ini, sketsa perlu dimuat dan waktu akan ditampilkan di monitor.
Program ini dapat sedikit dimodernisasi. Saat power dimatikan, sketsa yang tertulis di atas akan menyebabkan tampilan menunjukkan waktu yang telah diatur saat kompilasi setelah dinyalakan. Dalam fungsi setup, setiap waktu yang telah berlalu dari 00:00:00 hingga awal kompilasi akan dihitung. Hash ini akan dibandingkan dengan apa yang disimpan di EEPROM, yang dipertahankan ketika daya dimatikan.
Untuk menulis dan membaca waktu ke atau dari memori non-volatile, Anda perlu menambahkan fungsi EEPROMWriteInt dan EEPROMReadInt. Mereka diperlukan untuk memeriksa apakah hash cocok/tidak cocok dengan hash yang dicatat di EEPROM.
Proyek ini dapat ditingkatkan. Jika Anda menggunakan monitor LCD, Anda dapat membuat proyek yang menampilkan tanggal dan waktu di layar. Koneksi semua elemen ditunjukkan pada gambar.
Akibatnya, kode perlu menentukan perpustakaan baru (untuk layar kristal cair ini adalah LiquidCrystal), dan menambahkan baris ke fungsi loop() untuk mendapatkan tanggal.
Algoritma operasinya adalah sebagai berikut:
- Menghubungkan semua komponen;
- Periksa - waktu dan tanggal pada layar monitor akan berubah setiap detik. Jika waktu di layar salah, Anda perlu menambahkan fungsi RTC.write (tmElements_t tm) ke sketsa. Masalah dengan waktu yang salah disebabkan oleh fakta bahwa modul jam mengatur ulang tanggal dan waktu menjadi 00:00:00 01/01/2000 ketika dimatikan.
- Fungsi tulis memungkinkan Anda mendapatkan tanggal dan waktu dari komputer, setelah itu parameter yang benar akan ditunjukkan di layar.
Kesimpulan
Modul jam digunakan di banyak proyek. Mereka diperlukan untuk sistem pencatatan data, saat membuat pengatur waktu dan perangkat kontrol yang beroperasi sesuai jadwal tertentu, pada peralatan rumah tangga. Dengan modul yang tersedia secara luas dan murah, Anda dapat membuat proyek seperti jam alarm atau pencatat data sensor, merekam informasi ke kartu SD, atau menampilkan waktu di layar tampilan. Dalam artikel ini, kita melihat skenario penggunaan umum dan opsi koneksi untuk jenis modul paling populer.
- Memeriksa dokumen elektronik dalam format xml di portal Rosreestr
- Unduh minecraft untuk android: semua versi
- Timekillers untuk Android Unduh game untuk menghabiskan waktu
- Alkimia Dewa Doodle: Resep Artefak
- Gagal menginisialisasi game Warface: memperbaiki kesalahan Kesalahan “tidak dapat menemukan file yang ditentukan”
- The Elder Scrolls Online - Pencopetan - Panduan: cara menghasilkan uang di teso (Pencurian) Unduh video dan potong mp3 - kami permudah
- Ulasan Warhammer Online, deskripsi, ulasan Warhammer Online Apa yang dikatakan publikasi game, kritikus, dan gamer tentang Warhammer Online: Age of Reckoning