Wednesday 31 December 2014

Cara Debug Program guna Virtual Terminal

Apabila anda ingin membuat aturcara yang complex dan panjang, sudah tentu banyak kesilapan yang mungkin berlaku. Sekiranya "error" berlaku, anda sebagai programmer perlu fikirkan cara untuk "Debug" (locating and fix the error code). 

Pada post ini saya ingin memperkenalkan satu lagi teknik untuk Debug iaitu menggunakan Virtual Terminal-by software(Rajah 1) manakala hyperTerminal-by hardware(Rajah 2). Untuk maklumat lanjut tentang Vitual Terminal Klik Disini.

Rajah 1: Virtual Terminal dalam ISIS Professional


Rajah 2: HyperTerminal


Untuk tujuan itu, PIC18F akan disambungkan ke Virtual Terminal dan hantar mesej ke Virtual Terminal melalui UART protocol.  Justeru, pada post ini anda akan didedahkan dengan:-


  1. Cara configure PIC18F supaya boleh hantar dan terima data melalui UART protocol.
  2. Redirect arahan printf  ke UART. Teknik ini khas untuk C18 Compiler.
Nota Tambahan tentang UART klik disini.

Untuk perbincangan pada kali ini, protocol UART akan ditetapkan kepada:-

a) Baud Rate 9600 bps
b) Size data 8-bit

Oleh yang demikian, programmer perlu lakukan tetapan ini pada registers yang berkaitan. Berikut adalah contoh C code untuk initialize UART:

Code 1: function uart_initialize()

p/s: Saya beranggapan pembaca sudah tahu cara buat function dalam C program.

Seterusnya, bagi membolehkan C18 compiler Redirect arahanan printf ke UART, programmer perlu include beberapa standard library seperti berikut:

Code 2: #include related header file

Merujuk kepada keratan code 2 diatas, stdio.h membolehkan arahan printf boleh dipanggil manakala usart.h membolehkan keluaran daripada arahan printf dikeluarkan melalui kaki UART PIC18F4550.

Justeru, programmer boleh memaparkan mesej di Virtual Terminal / HyperTerminal untuk tujuan debugging program.

Bersama post ini dilampirkan contoh project. Sila download disini.


Tuesday 30 December 2014

printf menggunakan CDC

Antara ciri-ciri yang terdapat di dalam PIC18F4550 adalah mendukung USB peripheral. Terima kasih kepada Microchip Application Library (MLA) kerana menyediakan contoh applikasi untuk menggunakan PIC18F4550 sebagai USB-to-UART converter melalui Communication Device Classes (CDC).

Contoh applikasi ini boleh diambil dari MLA versi v2013-06-15. Cara guna MLA untuk PIC18F4550 boleh rujuk disini.

tambah
1. stdout = _H_USER
2. Function:-
i)// Private API
void usb_puts(char *buf) {
if ((USBDeviceState >= CONFIGURED_STATE) && (USBSuspendControl != 1)) {
int i;

for(i = 1000; i > 0; --i) {
if(mUSBUSARTIsTxTrfReady()) break;
CDCTxService();
}
if (i > 0) {
  putsUSBUSART(buf);
CDCTxService();
}
}
return;
}

ii)
int _user_putc(char c) {
char buf[2];

buf[0] = c;
buf[1] = '\0';
usb_puts(buf);
return(c);
}

Setelah tambah TIGA (3) item ini ke dalam main.c, maka arahan printf boleh digunakan untuk menghantar mesej melalui USB port ke HyperTerminal.

contoh program boleh download disini