- Penyiapan dan Persyaratan Perangkat Keras
- Diagram Sirkuit untuk Antarmuka LED dengan Nuvoton N76E003
- Pin Timer pada Nuvoton N76E003
- Timer Register di Nuvoton N76E003
- Jenis Waktu di Nuvoton N76E003
- Pemrograman Mikrokontroler Nuvoton N76E003 untuk Pengatur Waktu
- Kode Berkedip dan Memverifikasi Output untuk Fungsi Pengatur Waktu
Dalam tutorial Mikrokontroler Nuvoton kami sebelumnya, kami menggunakan program kedipan LED dasar sebagai panduan memulai dan juga menghubungkan GPIO sebagai input untuk menghubungkan sakelar taktil. Dengan tutorial itu, kami sepenuhnya mengetahui cara mengkonfigurasi proyek Keil dan mengatur lingkungan untuk pemrograman mikrokontroler N76E003 Nuvoton. Saatnya untuk menggunakan periferal internal dari unit mikrokontroler dan bergerak sedikit lebih jauh dengan menggunakan Timer bawaan dari N76E003.
Dalam tutorial kami sebelumnya, kami hanya menggunakan penundaan perangkat lunak untuk mengedipkan LED, jadi dalam tutorial ini, kami akan belajar cara menggunakan fungsi penundaan Timer serta Timer ISR (Interrupt Service Routine) dan mengedipkan dua LED individual. Anda juga dapat melihat Tutorial Timer Arduino dan tutorial PIC Timer untuk memeriksa cara menggunakan timer dengan mikrokontroler lain. Tanpa membuang banyak waktu mari kita evaluasi jenis pengaturan perangkat keras yang kita butuhkan.
Penyiapan dan Persyaratan Perangkat Keras
Karena persyaratan dari proyek ini adalah untuk mempelajari Timer ISR dan fungsi timer delay, kita akan menggunakan dua LED, yang satu akan berkedip menggunakan timer delay di loop sementara dan satu lagi akan berkedip di dalam fungsi ISR.
Karena LED tersedia di papan pengembangan N76E003, proyek ini memerlukan satu LED tambahan dan resistor pembatas arus untuk membatasi arus LED. Komponen yang kami butuhkan -
- Warna apapun dari LED
- Resistor 100R
Belum lagi selain komponen di atas, kita membutuhkan development board berbasis mikrokontroler N76E003 serta Nu-Link Programmer. Selain itu, kabel papan tempat memotong roti dan kabel pengait juga diperlukan untuk menghubungkan semua komponen.
Diagram Sirkuit untuk Antarmuka LED dengan Nuvoton N76E003
Seperti yang dapat kita lihat pada skema di bawah ini, LED Tes tersedia di dalam papan pengembangan dan terhubung pada port 1.4. LED tambahan terhubung ke port 1.5. Resistor R3 digunakan untuk membatasi arus LED. Di sisi paling kiri, koneksi antarmuka pemrograman ditampilkan.
Pin Timer pada Nuvoton N76E003
The diagram pin dari N76E003 dapat dilihat di bawah ini Image-
Seperti yang bisa kita lihat, setiap pin memiliki spesifikasi yang berbeda dan setiap pin dapat digunakan untuk berbagai keperluan. Namun, pin 1.5 yang digunakan sebagai pin keluaran LED akan kehilangan PWM dan fungsionalitas lainnya. Tapi, itu bukan masalah karena fungsionalitas lain tidak diperlukan untuk proyek ini.
Alasan di balik pemilihan pin 1.5 sebagai keluaran dan pin 1.6 sebagai masukan adalah karena ketersediaan pin GND dan VDD terdekat untuk kemudahan koneksi. Namun, dalam mikrokontroler ini dari 20 pin, 18 pin dapat digunakan sebagai pin GPIO dan pin GPIO lainnya dapat digunakan untuk output dan tujuan terkait Input, kecuali pin 2.0 yang khusus digunakan untuk input Reset dan tidak dapat digunakan sebagai keluaran. Semua pin GPIO dapat dikonfigurasi dalam mode yang dijelaskan di bawah ini.
Sesuai lembar data, PxM1.n, dan PxM2.n adalah dua register yang digunakan untuk menentukan operasi kendali port I / O. Karena kami menggunakan LED dan kami memerlukan pin sebagai pin keluaran umum, oleh karena itu kami akan menggunakan mode Quasi-bidirectional untuk pin.
Timer Register di Nuvoton N76E003
Pengatur waktu merupakan hal penting untuk setiap unit mikrokontroler. Mikrokontroler dilengkapi dengan perangkat pengatur waktu built-in. Nuvoton N76E003 juga dilengkapi dengan perangkat pengatur waktu 16-bit. Namun, setiap pengatur waktu digunakan untuk tujuan yang berbeda, dan sebelum menggunakan antarmuka pengatur waktu, penting untuk mengetahui tentang pengatur waktu.
Jenis Waktu di Nuvoton N76E003
Timer 0 dan 1:
Kedua timer: timer0 dan timer1 ini identik dengan 8.051 timer. Kedua timer ini dapat digunakan sebagai timer umum atau sebagai penghitung. Kedua pengatur waktu ini beroperasi dalam empat mode. Dalam Mode 0, timer tersebut akan beroperasi dalam mode Timer / Penghitung 13-bit. Dalam Mode 1, bit resolusi dari kedua timer tersebut akan menjadi 16-bit. Dalam Mode 2, pengatur waktu dikonfigurasi sebagai mode muat ulang otomatis dengan resolusi 8-bit. Dalam Mode 3, timer 1 dihentikan dan timer 0 dapat digunakan sebagai penghitung dan timer pada saat yang bersamaan.
Dari empat mode ini, Mode 1 digunakan dalam banyak kasus. Kedua timer ini dapat menggunakan Fsys (Frekuensi Sistem) dalam mode tetap atau prescaled (Fys / 12). Itu juga dapat dicatat dari sumber jam eksternal.
Timer 2:
Timer 2 juga merupakan timer 16-Bit yang terutama digunakan untuk menangkap bentuk gelombang. Ia juga menggunakan jam sistem dan dapat digunakan dalam aplikasi yang berbeda dengan membagi frekuensi jam menggunakan 8 skala yang berbeda. Ini juga dapat digunakan dalam mode perbandingan atau untuk menghasilkan PWM.
Sama seperti Timer 0 dan Timer 1, Timer 2 dapat digunakan dalam mode reload otomatis.
Timer 3:
Timer 3 juga digunakan sebagai timer 16-bit dan digunakan untuk sumber clock baud rate untuk UART. Ini juga memiliki fitur muat ulang otomatis. Penting untuk menggunakan timer ini hanya untuk komunikasi Serial (UART) jika aplikasi memerlukan komunikasi UART. Dianjurkan untuk tidak menggunakan pengatur waktu ini untuk tujuan lain dalam kasus seperti itu karena proses yang bertentangan dalam pengaturan pengatur waktu.
Timer Pengawas:
Watchdog Timer dapat digunakan sebagai timer 6-bit standar tetapi tidak digunakan untuk tujuan ini. Penggunaan pengatur waktu Watchdog sebagai pengatur waktu tujuan umum berlaku untuk aplikasi konsumsi daya rendah di mana sebagian besar mikrokontroler tetap dalam mode siaga.
Watchdog Timer, seperti namanya, selalu mengecek apakah mikrokontroler berfungsi dengan baik atau tidak. Dalam kasus mikrokontroler hang atau terhenti, WDT (Watchdog Timer) mengatur ulang mikrokontroler secara otomatis yang memastikan bahwa mikrokontroler berjalan dalam aliran kode berkelanjutan tanpa macet, hang atau dalam situasi terhenti.
Pengatur Waktu Bangun Sendiri:
Ini adalah perangkat pengatur waktu lain yang melayani proses waktu khusus yang sama seperti pengatur waktu pengawas. Timer ini, membangunkan sistem secara berkala saat mikrokontroler berjalan dalam mode daya rendah.
Perangkat pengatur waktu ini dapat digunakan secara internal atau menggunakan periferal eksternal untuk membangunkan mikrokontroler dari mode tidur. Untuk proyek ini, kami akan menggunakan Timer 1 dan Timer 2.
Pemrograman Mikrokontroler Nuvoton N76E003 untuk Pengatur Waktu
Mengatur Pin sebagai Output:
Mari kita mulai dengan bagian keluaran terlebih dahulu. Kami menggunakan dua LED, satu adalah LED onboard, bernama Test, dan terhubung dengan port P1.4 dan LED eksternal yang terhubung dengan pin P1.5.
Oleh karena itu, kedua pin ini dikonfigurasi sebagai pin keluaran untuk menghubungkan kedua LED tersebut dengan menggunakan potongan kode di bawah ini.
# Tentukan Test_LED P14 # Tentukan LED1 P15
Kedua pin ini ditetapkan sebagai pin Quasi-dua arah dalam fungsi pengaturan.
batal penyiapan (batal) {P14_Quasi_Mode; P15_Quasi_Mode; }
Mengatur Fungsi Timer:
Dalam fungsi pengaturan, Timer 2 perlu dikonfigurasi untuk mendapatkan hasil yang diinginkan. Untuk ini, kami akan mengatur register T2MOD dengan faktor pembagi jam 1/128 dan menggunakannya dalam mode penundaan reload otomatis. Berikut adalah gambaran umum register T2MOD-
4,5, dan 6-bit dari register T2MOD mengatur pembagi waktu 2 jam dan bit ke-7 mengatur mode reload otomatis. Ini dilakukan dengan menggunakan baris di bawah ini -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Kedua baris ini didefinisikan dalam file Function_define.h sebagai
# Tentukan TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #tentukan TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Sekarang, garis-garis ini mengatur nilai waktu yang diperlukan untuk Timer 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Yang selanjutnya didefinisikan dalam file Function_define.h sebagai-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
Jadi, 16000000 adalah frekuensi kristal 16 Mhz yang mengatur waktu tunda 100 ms.
Di bawah dua baris akan mengosongkan Timer 2 Low dan High byte.
TL2 = 0; TH2 = 0;
Akhirnya kode di bawah ini akan mengaktifkan interupsi timer 2 dan memulai Timer 2.
set_ET2; // Aktifkan Timer2 interrupt set_EA; set_TR2; // Timer2 dijalankan
Fungsi pengaturan lengkap dapat dilihat pada kode di bawah ini-
batal penyiapan (batal) { P14_Quasi_Mode; P15_Quasi_Mode; TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode; RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8; TL2 = 0; TH2 = 0; set_ET2; // Aktifkan Timer2 interrupt set_EA; set_TR2; // Timer2 run }
Fungsi ISR Timer 2:
Fungsi Timer 2 ISR dapat dilihat pada kode di bawah ini.
batal Timer2_ISR (void) interupsi 5 { clr_TF2; // Hapus Timer2 Bendera Interupsi LED1 = ~ LED1; // Sakelar LED1, terhubung di P1.5; }
Kode Berkedip dan Memverifikasi Output untuk Fungsi Pengatur Waktu
Kode (diberikan di bawah) ketika dikompilasi mengembalikan 0 peringatan dan 0 Kesalahan dan saya mem-flash-nya menggunakan metode flashing default di Keil. Setelah berkedip, LED berkedip dalam penundaan pengatur waktu yang ditentukan seperti yang diprogram.
Lihat video yang diberikan di bawah ini untuk demonstrasi lengkap tentang cara kerja papan untuk kode ini. Semoga Anda menikmati tutorial ini dan mempelajari sesuatu yang berguna jika Anda memiliki pertanyaan, tinggalkan di bagian komentar di bawah. Anda juga dapat menggunakan forum kami untuk memposting pertanyaan teknis lainnya.