Dalam proyek ini kita akan merancang jam Alarm sederhana menggunakan timer ATMEGA32. Mikrokontroler ATmega32A memiliki timer 16 bit, dan kita akan menggunakan timer itu untuk menghitung detik dan mengembangkan jam digital.
Semua jam digital memiliki kristal di dalamnya yang merupakan jantung jam. Kristal ini tidak hanya hadir dalam jam tetapi juga hadir di semua sistem komputasi waktu nyata. Kristal ini menghasilkan pulsa jam, yang diperlukan untuk penghitungan waktu. Meskipun ada beberapa cara lain untuk mendapatkan pulsa clock tetapi untuk akurasi dan frekuensi yang lebih tinggi kebanyakan lebih memilih clock berbasis kristal. Kami akan menghubungkan kristal ke ATMEGA32 untuk mendapatkan jam yang akurat.
Komponen Diperlukan
Perangkat keras: Mikrokontroler ATmega32, kristal 11,0592MHz, Kapasitor 22pF (2 buah), Power supply (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2 LCD), kapasitor 100uF (terhubung melintasi catu daya), tombol (empat buah), resistor 10KΩ (enam buah), 100nF capacito r (empat buah), Tiga buah sakelar pin (2 buah), transistor 2N2222, Buzzer, resistor 200Ω.
Perangkat lunak: Atmel studio 6.1, progisp atau flash magic.
Diagram Sirkuit dan Penjelasan Kerja
Untuk waktu yang akurat, kami telah menghubungkan kristal 11,0592MHz untuk jam. Sekarang untuk menonaktifkan jam internal ATMEGA kita harus mengubah LOW FUSE BITS nya. Ingatlah kita tidak menyentuh bit sekering tinggi sehingga komunikasi JTAG akan tetap aktif.
Untuk memberi tahu ATMEGA untuk menonaktifkan jam internal dan untuk bekerja di luar kita perlu mengatur:
LOW USE BYTE = 0xFF atau 0b11111111.
Pada rangkaian PORTB ATMEGA32 terhubung ke port data LCD. Di sini orang harus ingat untuk menonaktifkan komunikasi JTAG di PORTC ATMEGA dengan mengubah byte sekering tinggi, jika seseorang ingin menggunakan PORTC sebagai port komunikasi normal. Pada LCD 16x2 terdapat 16 pin seluruhnya jika ada lampu hitam, jika tidak ada lampu belakang akan ada 14 pin. Satu dapat memberi daya atau meninggalkan pin lampu belakang. Sekarang di 14 pin ada 8 data pin (7-14 atau D0-D7), 2 pin power supply (1 & 2 atau VSS & Vdd atau gnd & + 5V), 3 rd pin untuk kontrol kontras (VEE-kontrol seberapa tebal karakter harus ditampilkan), dan 3 pin kontrol (RS & RW & E)
Di sirkuit, Anda dapat mengamati bahwa saya hanya mengambil dua pin kontrol. Ini memberikan fleksibilitas pemahaman yang lebih baik, bit kontras dan BACA / TULIS tidak sering digunakan sehingga dapat disingkat menjadi ground. Ini menempatkan LCD dalam kontras tertinggi dan mode baca. Kita hanya perlu mengontrol pin ENABLE dan RS untuk mengirim karakter dan data yang sesuai.
Koneksi yang dilakukan untuk LCD diberikan di bawah ini:
PIN1 atau VSS ke ground
PIN2 atau VDD atau VCC ke daya + 5v
PIN3 atau VEE ke ground (memberikan kontras maksimum yang terbaik untuk pemula)
PIN4 atau RS (Daftar Pilihan) ke PD6 dari UC
PIN5 atau RW (Baca / Tulis) ke ground (menempatkan LCD dalam mode baca memudahkan komunikasi untuk pengguna)
PIN6 atau E (Enable) ke PD5 dari UC
PIN7 atau D0 ke PB0 dari UC
PIN8 atau D1 ke PB1 dari UC
PIN9 atau D2 ke PB2 dari UC
PIN10 atau D3 ke PB3 dari UC
PIN11 atau D4 ke PB4 dari UC
PIN12 atau D5 ke PB5 dari UC
PIN13 atau D6 ke PB6 dari UC
PIN14 atau D7 ke PB7 dari UC
Pada rangkaian tersebut kita dapat melihat bahwa kita telah menggunakan komunikasi 8bit (D0-D7) namun hal ini tidak wajib, kita dapat menggunakan komunikasi 4bit (D4-D7) tetapi dengan program komunikasi 4 bit menjadi agak rumit. Jadi seperti yang ditunjukkan pada tabel di atas kami menghubungkan 10 pin LCD ke pengontrol di mana 8 pin adalah pin data dan 2 pin untuk kontrol.
Switch satu untuk mengaktifkan fitur penyesuaian antara alarm dan waktu. Jika pin rendah, kita dapat mengatur waktu alarm dengan menekan tombol. Jika tombol tingginya hanya untuk mengatur TIME. Ada EMPAT tombol di sini, yang pertama adalah untuk kenaikan MINUTES dalam alarm atau waktu. Kedua untuk pengurangan MINUTES dalam alarm atau waktu. Ketiga adalah untuk kenaikan JAM dalam alarm atau waktu. KEEMPAT untuk penurunan JAM dalam alarm atau waktu.
Kapasitor yang ada di sini adalah untuk meniadakan efek pantulan tombol. Jika mereka dilepaskan, pengontrol mungkin menghitung lebih dari satu setiap kali tombol ditekan. Resistor yang dihubungkan ke pin digunakan untuk membatasi arus, ketika tombol ditekan untuk menarik pin ke tanah.
Setiap kali tombol ditekan, pin pengontrol yang sesuai ditarik ke tanah dan dengan demikian pengontrol mengenali bahwa tombol tertentu ditekan dan tindakan yang sesuai diambil.
Pertama-tama, jam yang kita pilih di sini adalah 11059200 Hz, membaginya dengan 1024 menghasilkan 10800. Jadi untuk setiap detik kita mendapatkan 10800 pulsa. Jadi kita akan memulai penghitung dengan 1024 prescaler untuk mendapatkan jam penghitung sebagai 10800 Hz. Kedua kita akan menggunakan mode CTC (Clear Timer Counter) dari ATMEGA. Akan ada register 16 bit di mana kita dapat menyimpan nilai (bandingkan nilai), ketika penghitung menghitung hingga nilai perbandingan yang diset untuk menghasilkan interupsi.
Kami akan menetapkan nilai perbandingan ke 10800, jadi pada dasarnya kami akan memiliki ISR (Interrupt Service Routine pada setiap perbandingan) untuk setiap detik. Jadi kita akan menggunakan rutinitas tepat waktu ini untuk mendapatkan waktu yang kita butuhkan.
BROWN (WGM10-WGM13): Bit ini untuk memilih mode operasi pengatur waktu.
Sekarang karena kita menginginkan mode CTC dengan nilai perbandingan dalam byte OCR1A, kita hanya perlu mengatur WGM12 ke satu, sisanya dibiarkan karena nol secara default.
MERAH (CS10, CS11, CS12): Ketiga bit ini untuk memilih prescalar dan mendapatkan jam penghitung yang sesuai.
Karena kita menginginkan 1024 sebagai prescaling, kita harus mengatur CS12 dan CS10.
Sekarang ada register lain yang harus kita pertimbangkan:
HIJAU (OCIE1A): Bit ini harus diatur untuk mendapatkan interupsi pada pencocokan perbandingan antara nilai counter dan nilai OCR1A (10800) yang kita tetapkan.
Nilai OCR1A (nilai perbandingan counter), tertulis di register di atas.
Penjelasan Pemrograman
Cara kerja jam Alarm dijelaskan selangkah demi selangkah dalam kode di bawah ini:
#include // header untuk mengaktifkan kontrol aliran data melalui pin #define F_CPU 1000000 // memberi tahu pengontrol frekuensi kristal terpasang #include