Daftar Isi:

Menggunakan Modul Jam Real-time DS1307 dan DS3231 Dengan Arduino: 3 Langkah
Menggunakan Modul Jam Real-time DS1307 dan DS3231 Dengan Arduino: 3 Langkah

Video: Menggunakan Modul Jam Real-time DS1307 dan DS3231 Dengan Arduino: 3 Langkah

Video: Menggunakan Modul Jam Real-time DS1307 dan DS3231 Dengan Arduino: 3 Langkah
Video: BELAJAR 22 PEMROGRAMAN ARDUINO - RTC (Real Time Clock) 2024, November
Anonim
Menggunakan Modul Jam Real-time DS1307 dan DS3231 Dengan Arduino
Menggunakan Modul Jam Real-time DS1307 dan DS3231 Dengan Arduino
Menggunakan Modul Jam Real-time DS1307 dan DS3231 Dengan Arduino
Menggunakan Modul Jam Real-time DS1307 dan DS3231 Dengan Arduino

Kami terus mendapatkan permintaan tentang cara menggunakan modul jam real-time DS1307 dan DS3231 dengan Arduino dari berbagai sumber – jadi ini adalah tutorial pertama dari dua bagian tentang cara menggunakannya. Untuk tutorial Arduino ini kami memiliki dua modul jam waktu nyata untuk digunakan, satu berdasarkan Maxim DS1307 (modul persegi) dan DS3231 (modul persegi panjang).

Ada dua perbedaan utama antara IC pada modul jam real-time, yaitu akurasi pencatatan waktu. DS1307 yang digunakan pada modul pertama bekerja dengan sangat baik, namun suhu eksternal dapat mempengaruhi frekuensi rangkaian osilator yang menggerakkan penghitung internal DS1307.

Ini mungkin terdengar seperti masalah, namun biasanya akan mengakibatkan jam mati sekitar lima atau lebih menit per bulan. DS3231 jauh lebih akurat, karena memiliki osilator internal yang tidak terpengaruh oleh faktor eksternal – dan karenanya paling akurat hingga beberapa menit per tahun. Jika Anda memiliki modul DS1307 - jangan merasa buruk, itu masih merupakan papan nilai yang bagus dan akan melayani Anda dengan baik. Dengan kedua modul, baterai cadangan diperlukan.

Sebaiknya beli baterai CR2032 baru dan pasangkan ke modul. Selain melacak waktu dan tanggal, modul ini juga memiliki EEPROM kecil, fungsi alarm (khusus DS3231) dan kemampuan untuk menghasilkan gelombang persegi dari berbagai frekuensi – yang semuanya akan menjadi subjek tutorial kedua.

Langkah 1: Menghubungkan Modul Anda ke Arduino

Kedua modul menggunakan bus I2C, yang membuat koneksi menjadi sangat mudah.

Pertama, Anda perlu mengidentifikasi pin mana pada Arduino atau papan kompatibel yang digunakan untuk bus I2C – ini akan dikenal sebagai SDA (atau data) dan SCL (atau jam). Pada Arduino Uno atau papan yang kompatibel, pin ini adalah A4 dan A5 untuk data dan jam; Pada Arduino Mega, pinnya adalah D20 dan D21 untuk data dan jam; Dan jika Anda menggunakan Pro Mini yang kompatibel, pinnya adalah A4 dan A5 untuk data dan jam, yang sejajar dengan pin utama.

Modul DS1307

Jika Anda memiliki modul DS1307, Anda perlu menyolder kabel ke papan, atau menyolder pada beberapa pin header inline sehingga Anda dapat menggunakan kabel jumper. Kemudian sambungkan pin SCL dan SDA ke Arduino Anda, dan pin Vcc ke pin 5V dan GND ke GND.

Modul DS3231

Menghubungkan modul ini mudah karena pin header dipasang di papan di pabrik. Anda cukup menjalankan kabel jumper lagi dari SCL dan SDA ke Arduino dan lagi dari pin Vcc dan GND modul ke 5V atau 3.3. V dan GND board Anda. Namun ini digandakan di sisi lain untuk menyolder kabel Anda sendiri. Kedua modul ini memiliki resistor pull-up yang diperlukan, jadi Anda tidak perlu menambahkan sendiri. Seperti semua perangkat yang terhubung ke bus I2C, coba dan pertahankan panjang kabel SDA dan SCL seminimal mungkin.

Langkah 2: Membaca dan Menulis Waktu Dari Modul RTC Anda

Setelah Anda memasang modul RTC Anda. masukkan dan unggah sketsa berikut. Meskipun catatan dan fungsi dalam sketsa hanya mengacu pada DS3231, kode ini juga bekerja dengan DS1307.

#include "Wire.h"#define DS3231_I2C_ADDRESS 0x68 // Konversikan bilangan desimal normal ke byte desimal berkode biner decToBcd(byte val) { return((val/10*16) + (val%10)); } // Konversi desimal berkode biner ke bilangan desimal normal byte bcdToDec(byte val) { return((val/16*10) + (val%16)); } void setup() { Wire.begin(); Serial.begin(9600); // atur waktu awal di sini: // DS3231 detik, menit, jam, hari, tanggal, bulan, tahun // setDS3231time(30, 42, 21, 4, 26, 11, 14); } void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year) { // menyetel data waktu dan tanggal ke DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS); Kawat.tulis(0); // set input berikutnya untuk memulai pada detik register Wire.write(decToBcd(second)); // setel detik Wire.write(decToBcd(menit)); // setel menit Wire.write(decToBcd(jam)); // setel jam Wire.write(decToBcd(dayOfWeek)); // atur hari dalam seminggu (1=Minggu, 7=Sabtu) Wire.write(decToBcd(dayOfMonth)); // atur tanggal (1 hingga 31) Wire.write(decToBcd(bulan)); // setel bulan Wire.write(decToBcd(tahun)); // atur tahun (0 hingga 99) Wire.endTransmission(); } void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS3231_I2C_ADDRESS); Kawat.tulis(0); // setel penunjuk register DS3231 ke 00h Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // meminta tujuh byte data dari DS3231 mulai dari register 00h *second = bcdToDec(Wire.read() & 0x7f); *menit = bcdToDec(Wire.read()); *jam = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *bulan = bcdToDec(Wire.read()); *tahun = bcdToDec(Wire.read()); } void displayTime() { byte detik, menit, jam, hariPekan, hariBulan, bulan, tahun; // mengambil data dari DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // kirim ke serial monitor Serial.print(jam, DEC); // mengkonversi variabel byte ke angka desimal saat ditampilkan Serial.print(":"); if (menit<10) { Serial.print("0"); } Serial.print(menit, DES); Serial.print(":"); if (kedua<10) { Serial.print("0"); } Serial.print(kedua, DES); Serial.print(""); Serial.print(hariBulan, DES); Serial.print("/"); Serial.print(bulan, DES); Serial.print("/"); Serial.print(tahun, DES); Serial.print("Hari dalam seminggu: "); switch(dayOfWeek){ kasus 1: Serial.println("Minggu"); merusak; kasus 2: Serial.println("Senin"); merusak; kasus 3: Serial.println("Selasa"); merusak; kasus 4: Serial.println("Rabu"); merusak; kasus 5: Serial.println("Kamis"); merusak; kasus 6: Serial.println("Jumat"); merusak; kasus 7: Serial.println("Sabtu"); merusak; } } void loop() { displayTime(); // menampilkan data jam real-time pada Serial Monitor, delay(1000); // setiap detik }

Mungkin ada banyak kode, tetapi kode tersebut dipecah menjadi bagian-bagian yang dapat dikelola.

Ini pertama termasuk perpustakaan Wire, yang digunakan untuk komunikasi bus I2C, diikuti dengan mendefinisikan alamat bus untuk RTC sebagai 0x68. Ini diikuti oleh dua fungsi yang mengubah angka desimal menjadi BCD (desimal berkode biner) dan sebaliknya. Ini diperlukan karena IC RTC bekerja dalam BCD bukan desimal.

Fungsi setDS3231time() digunakan untuk mengatur jam. Menggunakannya sangat mudah, cukup masukkan nilai dari tahun ke detik, dan RTC akan dimulai dari waktu itu. Misalnya jika Anda ingin mengatur tanggal dan waktu berikut – Rabu 26 November 2014 dan 21:42 dan 30 detik – Anda akan menggunakan:

setDS3231time(30, 42, 21, 4, 26, 11, 14);

Langkah 3:

Perhatikan bahwa waktu diatur menggunakan waktu 24 jam, dan parameter keempat adalah "hari dalam seminggu". Ini jatuh antara 1 dan 7 yang masing-masing adalah Minggu hingga Sabtu. Parameter ini adalah nilai byte jika Anda mengganti variabel Anda sendiri.

Setelah Anda menjalankan fungsi, sebaiknya awali dengan // dan unggah kode Anda lagi, sehingga tidak akan mengatur ulang waktu setelah daya didaur ulang atau diatur ulang mikrokontroler. Membaca waktu dari RTC Anda Sesederhana itu, sebenarnya prosesnya dapat diikuti dengan rapi di dalam fungsi displayTime(). Anda perlu mendefinisikan tujuh variabel byte untuk menyimpan data dari RTC, dan ini kemudian dimasukkan ke dalam fungsi readDS3231time(). Misalnya jika variabel Anda adalah:

byte detik, menit, jam, hari Minggu, hari Bulan, bulan, tahun;

… Anda akan menyegarkan mereka dengan data terkini dari RTC dengan menggunakan:

readDS3232time(&detik, &menit, &jam, &hariSeminggu, &hariBulan, &bulan, &tahun);

Kemudian Anda dapat menggunakan variabel sesuai keinginan Anda, mulai dari mengirim waktu dan tanggal ke monitor serial seperti contoh sketsa – hingga mengonversi data menjadi bentuk yang sesuai untuk semua jenis perangkat keluaran.

Hanya untuk memeriksa semuanya berfungsi, masukkan waktu dan tanggal yang sesuai ke dalam sketsa demonstrasi, unggah, komentari fungsi setDS3231time() dan unggah lagi. Kemudian buka monitor serial, dan Anda akan diberikan tampilan waktu dan tanggal saat ini.

Dari titik ini Anda sekarang memiliki perangkat lunak untuk mengatur data dan mengambilnya dari modul jam waktu nyata Anda, dan kami harap Anda memiliki pemahaman tentang cara menggunakan modul murah ini.

Anda dapat mempelajari lebih lanjut tentang IC jam waktu nyata tertentu dari situs web produsen – DS1307 dan DS3231.

Posting ini dipersembahkan oleh pmdway.com - semuanya untuk pembuat dan penggemar elektronik, dengan pengiriman gratis ke seluruh dunia.

Direkomendasikan: