Dalam projek ini kita akan merancang jam Penggera yang ringkas menggunakan pemasa ATMEGA32. Mikrokontroler ATmega32A mempunyai pemasa 16 bit, dan kita akan menggunakan pemasa itu untuk mengira detik dan mengembangkan jam digital.
Semua jam digital mempunyai kristal di dalamnya yang menjadi nadi jam. Kristal ini tidak hanya terdapat dalam jam tetapi terdapat di semua sistem pengkomputeran masa nyata. Kristal ini menghasilkan denyutan jam, yang diperlukan untuk pengiraan masa. Walaupun ada beberapa cara lain untuk mendapatkan denyutan jam tetapi untuk ketepatan dan frekuensi yang lebih tinggi kebanyakannya memilih jam berdasarkan kristal. Kami akan menghubungkan kristal ke ATMEGA32 untuk mendapatkan jam yang tepat.
Komponen Diperlukan
Perkakasan: Pengawal mikro ATmega32, kristal 11.0592MHz, Kapasitor 22pF (2 keping), Bekalan kuasa (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2 LCD), kapasitor 100uF (disambungkan di seluruh bekalan kuasa), butang (empat keping), perintang 10KΩ (enam keping), kapasitor 100nF (empat keping), Suis tiga pin (2 keping), transistor 2N2222, Buzzer, perintang 200Ω.
Perisian: Atmel studio 6.1, progisp atau flash magic.
Diagram Litar dan Penjelasan Kerja
Untuk masa yang tepat, kami telah menghubungkan kristal 11.0592MHz untuk jam. Sekarang untuk melumpuhkan jam dalaman ATMEGA kita harus menukar BIT FUSE yang RENDAH. Ingatlah bahawa kita tidak menyentuh bit fius tinggi sehingga komunikasi JTAG akan tetap diaktifkan.
Untuk memberitahu ATMEGA untuk mematikan jam dalaman dan untuk bekerja di luar, kita perlu menetapkan:
BYTE PENGGUNAAN RENDAH = 0xFF atau 0b11111111.
Dalam litar PORTB ATMEGA32 disambungkan ke LCD port data. Di sini kita harus ingat untuk mematikan komunikasi JTAG di PORTC ATMEGA dengan menukar byte fius tinggi, jika seseorang ingin menggunakan PORTC sebagai port komunikasi biasa. Dalam LCD 16x2 terdapat 16 pin di atas semua jika ada lampu hitam, jika tidak ada lampu belakang akan ada 14 pin. Seseorang boleh menghidupkan atau meninggalkan pin lampu belakang. Sekarang dalam 14 pin terdapat 8 data pin (7-14 atau D0-D7), 2 pin bekalan kuasa (1 & 2 atau VSS & VDD atau GND & + 5V), 3 rd pin untuk kawalan kontras (VEE-kawalan berapa tebal watak-watak perlu ditunjukkan), dan 3 pin kawalan (RS & RW & E)
Di litar, anda dapat melihat bahawa saya hanya mengambil dua pin kawalan. Ini memberikan fleksibiliti pemahaman yang lebih baik, bit kontras dan BACA / MENULIS tidak sering digunakan sehingga dapat dipendekkan ke tanah. Ini meletakkan LCD dalam mod kontras dan baca tertinggi. Kita hanya perlu mengawal pin ENABLE dan RS untuk menghantar watak dan data yang sesuai.
Sambungan yang dilakukan untuk LCD diberikan di bawah:
PIN1 atau VSS ke pembumian
PIN2 atau VDD atau VCC untuk +5v kuasa
PIN3 atau VEE ke ground (memberikan kontras maksimum terbaik untuk pemula)
PIN4 atau RS (Daftar Pilihan) ke PD6 uC
PIN5 atau RW (Baca / Tulis) ke tanah (meletakkan LCD dalam mod baca memudahkan komunikasi untuk pengguna)
PIN6 atau E (Aktifkan) ke PD5 uC
PIN7 atau D0 hingga PB0 dari uC
PIN8 atau D1 hingga PB1 dari uC
PIN9 atau D2 ke PB2 dari uC
PIN10 atau D3 hingga PB3 dari uC
PIN11 atau D4 ke PB4 dari uC
PIN12 atau D5 hingga PB5 dari uC
PIN13 atau D6 hingga PB6 dari uC
PIN14 atau D7 hingga PB7 dari uC
Di litar anda dapat melihat kami telah menggunakan komunikasi 8bit (D0-D7) namun ini bukan suatu yang wajib, kami dapat menggunakan komunikasi 4bit (D4-D7) tetapi dengan program komunikasi 4 bit menjadi sedikit rumit. Oleh itu, seperti yang ditunjukkan dalam jadual di atas, kami menghubungkan 10 pin LCD ke pengawal di mana 8 pin adalah pin data dan 2 pin untuk kawalan.
Tukar satu adalah untuk membolehkan menyesuaikan ciri antara penggera dan waktu. Sekiranya pin rendah, kita dapat menyesuaikan waktu penggera dengan menekan butang. Sekiranya butang tinggi untuk menyesuaikan hanya MASA. Terdapat EMPAT butang di sini, pertama adalah untuk kenaikan MINIT dalam penggera atau waktu. Yang kedua adalah untuk penurunan MINIT dalam penggera atau waktu. Ketiga adalah untuk kenaikan jam dalam penggera atau waktu. KEEMPAT adalah untuk penurunan JAM dalam penggera atau waktu.
Kapasitor yang ada di sini adalah untuk membatalkan kesan butang yang memantul. Sekiranya mereka dikeluarkan, pengawal mungkin mengira lebih dari satu setiap kali butang ditekan. Perintang yang disambungkan untuk pin adalah untuk menghadkan arus, apabila butang ditekan untuk menarik pin ke tanah.
Setiap kali butang ditekan, pin pengawal yang sesuai ditarik ke bawah dan dengan demikian pengawal menyedari bahawa butang tertentu ditekan dan tindakan yang sesuai diambil.
Pertama sekali, jam yang kita pilih di sini adalah 11059200 Hz, membahagikannya dengan 1024 memberikan 10800. Jadi untuk setiap saat kita mendapat 10800 denyutan. Oleh itu, kita akan memulakan kaunter dengan 1024 prescaler untuk mendapatkan jam kaunter sebagai 10800 Hz. Kedua kita akan menggunakan mod CTC (Clear Timer Counter) ATMEGA. Akan ada daftar 16 bit di mana kita dapat menyimpan nilai (membandingkan nilai), apabila pembilang menghitung hingga nilai perbandingan yang akan dihasilkan oleh gangguan.
Kami akan menetapkan nilai perbandingan ke 10800, jadi pada dasarnya kami akan mempunyai ISR (Interrupt Service Routine pada setiap perbandingan) untuk setiap detik. Oleh itu, kita akan menggunakan rutin tepat pada masanya untuk mendapatkan jam yang kita perlukan.
BROWN (WGM10-WGM13): Bit ini adalah untuk memilih mod operasi untuk pemasa.
Sekarang kerana kita menginginkan mod CTC dengan nilai perbandingan dalam bait OCR1A, kita hanya perlu menetapkan WGM12 menjadi satu, baki yang tersisa kerana nol secara lalai.
MERAH (CS10, CS11, CS12): Ketiga-tiga bit ini adalah untuk memilih preskalar dan dengan itu mendapatkan jam kaunter yang sesuai.
Oleh kerana kita mahukan 1024 sebagai prescaling, kita harus menetapkan CS12 dan CS10.
Sekarang ada daftar lain yang harus kita pertimbangkan:
HIJAU (OCIE1A): Bit ini mesti ditetapkan untuk mendapatkan gangguan pada membandingkan perbandingan antara nilai kaunter dan nilai OCR1A (10800) yang kami tetapkan.
Nilai OCR1A (nilai membandingkan nilai), ditulis dalam daftar di atas.
Penjelasan Pengaturcaraan
Cara jam penggera dijelaskan langkah demi langkah dalam kod di bawah:
#include // header untuk membolehkan kawalan aliran data ke atas pin #define F_CPU 1000000 // memberitahu frekuensi kristal pengawal yang dilampirkan #masuk