Sunday, 4 September 2016

Serial Bootloader for PIC18F45K22

Selamat Sejahtera, entry pada kali ini akan membincangkan tentang penggunaan Serial Bootloader bagi PIC18F45K22.

Bahasa mesin yang terjana daripada MPLAP X IDE akan dimasukkan ke dalam PIC18F45K22 dengan menggunakan kaedah serial bootloader. Untuk tujuan itu, kita akan menggunakan sebuah perisian yang bernama Tiny Multi Bootloader+ sebagai GUI bagi memasukkan bahasa mesin ke dalam PIC18F45K22. Perisian ini adalah open source dan telah dikongsi ke umum melalui https://sourceforge.net/projects/tinypicbootload/files/

Berikut adalah keperluan untuk entry ini.

1. Firmware dan GUI, download 
2. Panduan untuk kendalian A-Z, download

Catatan: Firmware ini ambil dari web https://sourceforge.net/projects/tinypicbootload/files/ jika anda berminat untuk mendapatkannya, boleh click disini untuk muat turun file tersebut

Wednesday, 16 September 2015

Teori - Universal asynchronous receive transmit (UART)

Post ini akan membincangkan dengan ringkas berkenaan dengan UART protocol.

UART - Universal Asynchronous Receiver and Transmitter merupakan serial protocol yang sangat berguna. Ia dilihat menjadi pilihan yang common untuk berkomunikasi dengan sistem komputer / Microcontroller.

Untuk kupasan lanjut berkenaan dengan teori UART, sila klik disini.

Cara guna printf() dalam XC8

The printf() function performs two main tasks: formatting of text, and printing this formatted text to stdout. The exact location of stdout is determined by a second function called putch(), which is called by printf() to output each character.
The printf() function performs the formatting and then calls a helper function, called putch, to send each byte of the formatted text. By default the putch() function is empty. It should be customised to suit the project at hand. By customizing the putch function you can have printf send data to any peripheral or location. The printf() function is used to print to USART, but it could define stdout to output to an LCD screen or SPI. Code to initialize the intended destination must be executed before printf() is called. [1]

Mengikut wikidot.com, kita boleh guna function printf() bagi menghantar mesej melalui UART.
Berikut adalah caranya:

1.    Masukkan header file berikut ke dalam program:


2.    Initialize UART dengan setting berikut:
Baud Rate = 9600bps
Data bit = 8
Dll
Contoh:

3.    Tambah function dibawah ini tanpa perlu prototype function.


4.    Seterusnya function printf() sudah tersedia untuk digunakan bersama dengan UART. Contoh aturcara klik disini


References

[1]
Microchip, "Wikidot.com," 17 April 2014. [Online]. Available: http://microchip.wikidot.com/faq:29. [Accessed 16 September 2015].
[2]
Microchip, "Microchip Technology Inc," 5 Aug 2012. [Online]. Available: ww1.microchip.com/downloads/en/DeviceDoc/52053B.pdf. [Accessed 19 Sep 2015].




Tuesday, 25 August 2015

Cara guna ADC modul di dalam PIC8F4550

Post ini akan membincangkan ciri - ciri ADC modul yang terdapat di dalam PIC8F4550 serta menerangkan langkah - langkah untuk menggunakannya.

1) Teori ADC Modul di dalam PIC18F4550

Sila rujuk Rajah 1 dibawah bagi memudahkan pemahaman terhadap ADC modul.

Rajah 1: Gambarajah blok ADC

Daripada rajah 1, boleh diperhatikan terdapat beberapa parameter yang perlu diberi perhatian, antaranya ialah:
  • Voltage Input yang datang daripada Analog Channel (AN0 - AN12).
  • Reference Voltage iaitu Vref(+) dan Vref(-)
  • Resolution 10bit (0 - 1023)
Ketiga-tiga parameter ini boleh dihubungkan melalui graf dibawah:

Rajah 2: Graf Digital vs Analog

Rajah 2 diatas menunjukkan hubung kait diantara digital dan analog adalah linear. Maka ia boleh diterjemahkan dalam persamaan matematik seperti berikut:

------------------------------- (1)

Justeru, kita boleh mengira hasil ADC (Dout) jika diberi Voltage input (Vin) dengan menggunakan persamaan (1) diatas.

Note: 3V <=Vref <= 5V


Dengan menggunakan PIC18F4550, keluaran daripada ADC modul (Dout) ini akan disimpan di dalam SATU(1) register, iaitu ADRES.

Selain daripada itu, terdapat parameter lain yang mempengaruhi hasil ADC, antaranya ialah:
  • A/D conversion time per bit, Tad. 
Bagi mendapat hasil conversion 10-bit yang lengkap, masa yang diperlukan adalah 12Tad.

Note: Nilai Tad mesti melebihi 1.6us


Nilai Tad boleh dikira berdasarkan pilihan ADCS seperti dibawah:


Berikut adalah contoh kiraan bagi menentukan ADCS yang paling sesuai:

Diberi nilai Fosc = 48MHz

Maka,

Case 1: Fosc/2
48MHz / 2 = 24MHz
Tad = 1/24MHz = 0.0041 us. Pilihan ini tidak sah, kerana kurang dari 1.6us

Case 2: Fosc/4
48MHz / 4 = 12MHz
Tad = 1/12MHz = 0.0083 us. Pilihan ini tidak sah, kerana kurang dari 1.6us

Case 3: Fosc/8
48MHz / 8 = 6MHz
Tad = 1/6MHz = 0.1667 us. Pilihan ini tidak sah, kerana kurang dari 1.6 us

Case 4: Fosc/16
48MHz /16 = 3MHz
Tad = 1/3MHz = 0.333 us. Pilihan ini tidak sah, kerana kurang dari 1.6 us

Case 5: Fosc / 32
48MHz / 32 = 1.5MHz
Tad = 1/1.5MHz = 0.666us. Pilihan ini tidak sah, kerana kurang dari 1.6us

Case 6: Fosc/ 64
48MHz / 64 = 0.75MHz
Tad = 1/0.75MHz = 1.333us. Pilihan ini diterima walaupun kurang dari 1.6us sebab tiada pilihan lain.

Justeru,  convertion time = 12 x 1.333us = 16.996 us


Daripada contoh ini dapati bahawa dengan menggunakan Fosc = 48MHz, tiada ADCS yang sesuai kerana kesemuanya adalah kurang dari 1.6us. Tetapi ADCS yang paling hampir iaitu Fosc/64 boleh digunakan. Walaupun hasil conversion tidak lengkap 100% tetapi masalah ini boleh diatasi dengan membuat purata hasil conversion.

2) Menulis aturcara C18 

Langkah seterusnya adalah menulis aturcara menggunakan C18 untuk manipulasi kandungan register:
  • ADCON0
  • ADCON1
  • ADCON2

Bagi memudahkan, penerangkan seterusnya akan berdasarkan kepada contoh dibawah.

1. Contoh simple ADC program. 


Rajah 3
Penyata Masalah:

Tulis aturcara C18 supaya Pin RA0 pada PIC18F4550 boleh digunakan untuk melakukan proses ADC secara berterusan. Dimana configurasi ADC yang diperlukan adalah seperti berikut:

i) Vref(+) = Vdd (5V)
ii) Vref (-) = Vss (0V)
iii) Resolution = 10 bit
iv) A/D Acquisition Time = 12Tad
v) A/D Conversion Clock = Fosc/64

Penyelesaian:
Rajah 4: aturcara bagi contoh 1.

Untuk mendapat aturcara penuh, Klik Disini

2. Aturcara yang ditunjukkan dalam Rajah 4 boleh di naik taraf supaya lebih flexible. Dimana ia boleh guna untuk mana-mana channel (AN0-AN12).

Untuk mendapat aturcara yang telah di naik taraf, Klik Disini


Penutup:

Diharapkan post yang ringkas ini akan memberi manfaat kepada pembaca. Jika terdapat masalah atau kekeliruan, sila komen di ruang yang disediakan.

Sekian


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

Monday, 22 September 2014

PIC8F4550 + PINGUINO

Pinguino merupakan perisian kategori open source. Baru - baru ini penguino telah mencipta firmware dan library untuk mendukung PIC18F4550. Selain daripada itu, penguino juga menyediakan rujukan dan panduan pengguna yang sangat terperinci. Segala software dan firmware boleh dimuat turun di www.pinguino.cc

Setelah firmware dimasukkan ke dalam PIC18F4550. Proses load program boleh dilakukan melalui USB bootloader. Kaedah ini dapati lebih mudah berbanding dengan USB bootloader yang disediakan oleh Microchip. Ini kerana untuk memasuki bootloader mode:

Guna pinguino USB bootloader:-
untuk masuk ke bootloader mode: pengguna perlu sambungkan cable USB ke USB host pada PC dan tekan butang reset.

Guna Microchip USB bootloader:-
Untuk masuk ke bootloader mode:
Pengguna perlu sambung cable USB dan tekan butang RESET+SW1. Di mana SW1 ini telah ditetapkan di dalam firmware.

Tambahan lagi, library yang disediakan oleh pinguino sangat berguna. Terutamanya CDC yang membolehkan UART to USB conversation dilakukan secara software. Dalam kata lain pengguna boleh jimat kos kerana tidak perlu beli UART to USB converter. Selain daripada itu, function yang disediakan oleh pinguino untuk CDC adalah mirip kepada standard C program. Contoh

CDC.printf ("hello world");

ini memudahkan pengguna untuk debugging program.