- Dasar-dasar Komunikasi UART
- Persyaratan dan Penyiapan Perangkat Keras
- Diagram Sirkuit untuk Komunikasi UART Nuvoton N76E003
- Pin UART pada Mikrokontroler Nuvoton N76E003
- UART Register di Mikrokontroler Nuvoton N76E003
- Mode Operasi UART di N76E003
- Pemrograman Nuvoton N76E003 untuk Komunikasi UART
UART adalah singkatan dari Universal Asynchronous Receiver / Transmitter dan ini adalah fitur perangkat keras yang berguna di unit mikrokontroler apa pun. Mikrokontroler perlu menerima data, memprosesnya, dan mengirimkannya ke perangkat lain. Ada berbagai jenis protokol komunikasi yang tersedia di mikrokontroler, namun UART adalah yang paling banyak digunakan di antara protokol komunikasi lain seperti SPI dan I2C. Jika seseorang perlu menerima atau mengirim data secara serial, UART selalu menjadi pilihan yang paling sederhana dan umum. Keuntungan UART adalah hanya membutuhkan dua kabel untuk mengirimkan data antar perangkat. Melanjutkan Tutorial Mikrokontroler Nuvoton, pada artikel ini, kita akan mempelajari cara melakukan komunikasi serial menggunakan mikrokontroler N76E003.
Dasar-dasar Komunikasi UART
Sekarang, seperti yang kita ketahui apa itu UART, penting untuk mengetahui parameter terkait dari UART.
Dua perangkat UART menerima dan mengirimkan data pada frekuensi yang sama. Ketika perangkat UART penerima mendeteksi bit awal, ia mulai membaca bit yang masuk pada frekuensi tertentu yang dikenal sebagai baud rate. Baud rate merupakan hal yang penting untuk komunikasi UART dan digunakan untuk mengukur kecepatan transfer data dalam bits per second (bps). Kecepatan baud rate ini, untuk mengirim dan menerima, harus memiliki baud rate yang sama. Perbedaan kecepatan baud rate antara transmisi dan penerimaan UART hanya bisa sekitar 10% sebelum waktu bit menjadi terlalu jauh. Kecepatan baud rate yang paling populer adalah 4800, 9600, 115200 bps, dll. Sebelumnya kami telah menggunakan komunikasi UART di banyak mikrokontroler lain juga yang tercantum di bawah ini.
- Komunikasi UART antara ATmega8 dan Arduino Uno
- Komunikasi UART antara Dua Mikrokontroler ATmega8
- Komunikasi UART menggunakan Mikrokontroler PIC
- Komunikasi UART pada Mikrokontroler STM8S
N76E003 memiliki dua UART - UART0 dan UART1. Dalam tutorial ini, kita akan menggunakan perangkat UART pada unit mikrokontroler N76E003. Tanpa membuang banyak waktu, mari kita evaluasi pengaturan perangkat keras seperti apa yang kami butuhkan untuk aplikasi ini.
Persyaratan dan Penyiapan Perangkat Keras
Komponen utama yang dibutuhkan untuk proyek ini adalah modul converter USB to UART atau TTL yang akan membuat interface yang dibutuhkan antara PC atau Laptop dengan modul mikrokontroler. Untuk proyek ini, kami akan menggunakan modul USB ke UART berbasis CP2102 seperti yang ditunjukkan di bawah ini.
Belum lagi selain komponen di atas, diperlukan development board berbasis mikrokontroler N76E003 serta Nu-Link Programmer. Unit catu daya 5V tambahan mungkin diperlukan jika pemrogram tidak digunakan sebagai sumber daya.
Diagram Sirkuit untuk Komunikasi UART Nuvoton N76E003
Seperti yang dapat kita lihat pada skema papan pengembangan di bawah ini, pin ke-2 dan ke-3 dari unit mikrokontroler masing-masing digunakan sebagai UART0 Tx dan Rx. Di sisi paling kiri, koneksi antarmuka pemrograman ditampilkan.
Pin UART pada Mikrokontroler Nuvoton N76E003
N76E003 memiliki 20 pin di mana 4 pin dapat digunakan untuk komunikasi UART. Gambar di bawah ini menunjukkan pin UART yang disorot dalam kotak kotak merah (Rx) dan kotak kotak Biru (Tx).
Untuk UART0, pin 2 dan 3 digunakan untuk komunikasi UART, dan untuk UART1, pin 8 dan pin 18 digunakan untuk komunikasi.
UART Register di Mikrokontroler Nuvoton N76E003
N76E003 memiliki dua UART dupleks penuh yang disempurnakan dengan pengenalan alamat otomatis dan deteksi kesalahan pembingkaian - UART0 dan UART1. Kedua UART ini dikendalikan menggunakan register yang dikategorikan menjadi dua UART yang berbeda. Ada dua pasang pin RX dan TX yang tersedia di N76E003 untuk operasi UART. Jadi langkah pertama adalah memilih port UART yang diinginkan untuk operasi.
Dalam tutorial ini, kita akan menggunakan UART0, sehingga konfigurasi hanya akan ditampilkan untuk UART0. UART1 akan memiliki konfigurasi yang sama tetapi register akan berbeda.
Setelah memilih satu UART (UART0 dalam hal ini), pin I / O yang diperlukan untuk digunakan untuk komunikasi RX dan TX perlu dikonfigurasi sebagai input dan output. Pin RX dari UART0 adalah pin 3 dari mikrokontroler yaitu Port 0.7. Karena ini adalah pin penerima port serial, Port 0.7 perlu disetel sebagai input. Sedangkan Port 0.6 yang merupakan pin ke-2 dari mikrokontroler merupakan pin transmisi atau pin keluaran. Ini harus ditetapkan sebagai mode dua arah semu. Ini dapat dipilih dengan menggunakan register PxM1 dan PxM2. Kedua register ini mengatur mode I / O dimana x adalah untuk nomor Port (Misalnya, Port P1.0 register akan menjadi P1M1 dan P1M2, untuk P3.0 akan menjadi P3M1 dan P3M2, dll.) Konfigurasi dapat dilihat pada gambar di bawah ini-
Mode Operasi UART di N76E003
Kemudian, langkah selanjutnya adalah menentukan mode operasi UART. Kedua UART dapat beroperasi dalam 4 mode. Modusnya adalah-
Seperti yang dapat kita lihat, SM0 dan SM1 (bit ke-7 dan ke-6 dari register SCON) memilih mode operasi UART. Mode 0 adalah operasi sinkron dan tiga mode lainnya adalah operasi asinkron. Namun, generator Baud Rate dan bit Frame berbeda untuk setiap mode port serial. Salah satu mode dapat dipilih sesuai kebutuhan aplikasi dan ini juga sama untuk UART1. Untuk tutorial ini, operasi 10 bit dengan laju luapan timer 3 dibagi 32 atau 16 digunakan.
Sekarang, waktunya untuk mendapatkan informasi dan mengkonfigurasi register SCON (SCON_1 for UART1) untuk UART0.
Bit ke-6 dan ke-7 akan mengatur mode UART seperti yang telah dibahas sebelumnya. Bit 5 digunakan untuk mengatur mode komunikasi Multiprosesor untuk mengaktifkan opsi. Namun, prosesnya bergantung pada mode UART mana yang dipilih. Selain ini, bit REN akan disetel ke 1 untuk mengaktifkan penerimaan dan bendera TI akan disetel ke 1 untuk fungsi printf yang akan digunakan sebagai pengganti fungsi pengiriman UART0 kustom.
Register penting berikutnya adalah register Kontrol daya (PCON) (Timer 3 bit 7 dan 6 untuk UART1). Jika Anda baru mengenal pengatur waktu, lihat tutorial Pengatur Waktu Nuvoton N76E003 untuk memahami cara menggunakan pengatur waktu pada Mikrokontroler N76E003.
Bit SMOD penting untuk memilih double baud rate dalam mode UART0 1. Sekarang, karena kita menggunakan timer 3, register kontrol Timer 3 T3CON perlu dikonfigurasi. Namun, bit ke-7 dan ke-6 dicadangkan untuk pengaturan kecepatan data ganda untuk UART1.
Dan nilai pra-skala Timer 3-
BRCK bit ke-5 akan mengatur Timer 3 sebagai sumber clock rate baud untuk UART1. Sekarang, lembar data N76E003 diberi rumus untuk menghitung laju Baud yang diinginkan serta nilai kumpulan sampel untuk register Tinggi dan Rendah Timer 3 (16-bit).
Nilai sampel untuk sumber jam 16 Mhz-
Jadi baud rate perlu dikonfigurasi dalam register Timer 3 menggunakan rumus di atas. Untuk kasus kami, itu adalah Formula 4. Setelah itu, memulai Timer 3 dengan mengatur register TR3 ke 1 akan menyelesaikan Timer Inisialisasi UART0 3. Untuk menerima dan mengirim data UART0 menggunakan register di bawah ini-
The SBUF mendaftar secara otomatis akan dikonfigurasi untuk Menerima dan Transmit. Untuk menerima data dari UART, tunggu sampai bendera RI disetel 1 dan baca register SBUF dan kirim data ke UART0, kirim data ke SBUF dan tunggu sampai bendera TI mendapatkan 1 untuk mengonfirmasi pengiriman data berhasil.
Pemrograman Nuvoton N76E003 untuk Komunikasi UART
Bagian pengkodeannya sederhana dan kode lengkap yang digunakan dalam tutorial ini dapat ditemukan di bagian bawah halaman ini. Penjelasan kode adalah sebagai berikut, UART0 diinisialisasi pada 9600 baud rate menggunakan pernyataan di fungsi utama-
InitialUART0_Timer3 (9600);
Fungsi di atas didefinisikan dalam file common.c dan mengkonfigurasi UART0 dengan Timer 3 sebagai sumber baud rate, dalam mode 1, dan dengan baud rate 9600. Definisi fungsinya adalah sebagai berikut-
batal InitialUART0_Timer3 (UINT32 u32Baudrate) // gunakan timer3 sebagai generator Baudrate { P06_Quasi_Mode; // Mengatur pin UART sebagai mode Quasi untuk mengirimkan P07_Input_Mode; // Mengatur pin UART sebagai mode input untuk menerima SCON = 0x50; // UART0 Mode1, REN = 1, TI = 1 set_SMOD; // UART0 Tingkat Ganda Aktifkan T3CON & = 0xF8; // T3PS2 = 0, T3PS1 = 0, T3PS0 = 0 (Prescale = 1) set_BRCK; // UART0 baud rate clock source = Timer3 #ifdef FOSC_160000 RH3 = HIBYTE (65536 - (1000000 / u32Baudrate) -1); / * 16 MHz * / RL3 = LOBYTE (65536 - (1000000 / u32Baudrate) -1); / * 16 MHz * / #endif #ifdef FOSC_166000 RH3 = HIBYTE (65536 - (1037500 / u32Baudrate)); /*16,6 MHz * / RL3 = LOBYTE (65536 - (1037500 / u32Baudrate)); /*16,6 MHz * / #endif set_TR3; // Picu Timer3 set_TI; // Untuk fungsi printf harus mengatur TI = 1 }
Deklarasi dilakukan selangkah demi selangkah seperti yang didiskusikan sebelumnya dan register dikonfigurasikan dengan tepat. Namun, di perpustakaan BSP N76E003, ada bug yang bukan P07_Input_Mode; ada P07_Quasi_Mode . Karena itu, fungsi UART Receive tidak akan berfungsi.
Tingkat Baud juga dikonfigurasi sesuai input baud rate dan menggunakan rumus yang diberikan oleh lembar data. Sekarang, di fungsi utama atau loop sementara , fungsi printf digunakan. Untuk menggunakan fungsi printf , TI perlu diatur sebagai 1. Selain ini, pada loop sementara , kasus sakelar digunakan dan sesuai data UART yang diterima, nilainya dicetak.
while (1) { printf ("\ r \ nTekan 1 atau Tekan 2 atau Tekan 3 atau Tekan 4"); oper = Receive_Data_From_UART0 (); switch (oper) { case '1': printf ("\ r \ n1 ditekan"); istirahat; case '2': printf ("\ r \ n2 ditekan"); istirahat; case '3': printf ("\ r \ n3 ditekan"); istirahat; case '4': printf ("\ r \ n4 ditekan"); istirahat; default: printf ("\ r \ nTombol salah ditekan"); } Timer0_Delay1ms (300); } }
Nah, untuk UART0 menerima Receive_Data_From_UART0 (); fungsi digunakan. Ini juga didefinisikan di pustaka common.c .
UINT8 Receive_Data_From_UART0 (batal) { UINT8 c; while (! RI); c = SBUF; RI = 0; kembali (c); }
Ini akan menunggu bendera RI mendapatkan 1 dan mengembalikan data terima menggunakan variabel c.
Mem-flash Kode dan Output
Kode mengembalikan 0 peringatan dan 0 Kesalahan dan berkedip menggunakan metode flashing default oleh Keil. Jika Anda tidak yakin bagaimana cara mengkompilasi dan mengunggah kode, lihat artikel memulai dengan nuvoton. Baris di bawah ini mengkonfirmasi bahwa kode kami telah berhasil diunggah.
Rekondisi dimulai: Proyek: printf_UART0 Membangun kembali target 'GPIO' mengkompilasi PUTCHAR.C… mengkompilasi Print_UART0.C… mengkompilasi Delay.c… mengkompilasi Common.c… merakit STARTUP.A51… menghubungkan… Ukuran Program: data = 54.2 xdata = 0 code = 2341 membuat file hex dari ". \ Output \ Printf_UART1"… ". \ Output \ Printf_UART1" - 0 Error, 0 Warning (s). Waktu Pembuatan yang Berlalu: 00:00:02 Muat "G: \\ n76E003 \\ software \\ N76E003_BSP_Keil_C51_V1.0.6 \\ Sample_Code \\ UART0_Printf \\ Output \\ Printf_UART1" Flash Erase Selesai. Flash Write Selesai: 2341 byte diprogram. Verifikasi Flash Selesai: 2341 byte diverifikasi. Pemuatan Flash selesai pada pukul 15:48:08
Papan Pengembangan terhubung ke sumber daya melalui pemrogram dan laptop menggunakan modul USB ke UART. Untuk menampilkan atau mengirim data UART, diperlukan perangkat lunak monitor serial. Saya menggunakan istilah tera untuk proses ini.
Seperti yang Anda lihat pada gambar di bawah, saya dapat menampilkan string yang dikirim dari pengontrol nuvoton kami dan menampilkannya di perangkat lunak monitor serial. Juga bisa membaca nilai dari monitor serial.
Anda dapat melihat video yang ditautkan di bawah ini untuk demonstrasi lengkap dari tutorial ini. Semoga Anda menikmati artikel ini dan mempelajari sesuatu yang bermanfaat. Jika Anda memiliki pertanyaan, Anda dapat meninggalkannya di bagian komentar di bawah ini atau gunakan forum kami untuk memposting pertanyaan teknis lainnya.