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.

Thursday 8 May 2014

Digital I/O Port PIC18F4550

Sebelum teruskan dengan perbincangan topik ini, ingin saya ajukan satu soalan kepada anda; "Apakah I/O Port dalam skop PIC18F?", cuba renung dan fikirkan sekejap. Jika sudah ada jawapan, mari kita teruskan.

Secara fizikalnya I/O port merujuk kepada kaki-kaki PIC18F,
 
Soalan seterusnya, " Adakah kesemua kaki adalah I/O Port?". Jawapnya, "Tidak". Merujuk kepada Rajah 1 dibawah, hanya kaki-kaki yang ada label RAx, RBx, RCx, RDx & REx sahaja yang boleh digunakan sebagai I/O Port. Setiap I/O Port yang ada boleh digunakan sebagai Digital Input / Output (alternate function yang lain akan dibincangkan pada post yang akan datang).

Rajah 1: Pin Diagram PIC18F4550

Digital Input / Output Port

Secara umum PIC boleh membaca isyarat digital dan boleh mengeluarkan isyarat digital (5V - Logic '1' & 0V - Logic '0') melalui kakinya. Persoalannya " Dalam banyak-banyak Port PIC18F, Port mana yang digunakan sebagai INPUT port? dan Port mana untuk OUTPUT port? ". Jawapanya, sila rujuk Rajah 1 diatas, perhatikan anak panah pada kaki PIC:-
  • Anak panah yang menghala masuk ke kaki PIC - Pin berkenaan berfungsi sebagai INPUT sahaja.
  • Anak panah yang menghala keluar dari kaki PIC - Pin berkenaan berfungsi sebagai OUTPUT sahaja.
  • Anak panah yang menghala Dwi-arah - Pin berkenaan boleh berfungsi sebagai INPUT atau OUTPUT.

Maka, setiap port boleh digunakan untuk baca isyarat dari luar atau mengeluarkan isyarat keluar dari PIC. Persoalan seterusnya " Bagaimana untuk jadikan Port itu sebagai INPUT atau OUTPUT? " Jawapanya " Manipulasi bit didalam Register yang bernama TRISx ".

Setiap Port akan ada tiga (3) register untuk mengawal operasinya. Registers itu adalah:
  1. TRIS register (data direction register)
  2. Port register (reads the levels on the pins of the device)
  3. LAT register (output latch)
Nota Tambahan: Secara Fizikalnya Port register merujuk register yang bernama PORT yang berada dalam data memory. 

Wednesday 7 May 2014

Cara Guna Comparator Dalam PIC18F4550

Dalam PIC18F4550 telah dilengkapkan dengan pelbagai features tambahan antaranya ialah Comparator, untuk bacaan lanjut berkenaan dengan comparator boleh klik disini.

Terdapat dua (2) comparator di dalam PIC, dimana input dan output comparator ini berada pada PORTA seperti yang ditunjukkan dalam Rajah 1 dibawah.

Rajah 1: Dua (2) Comparator dalam PIC18F4550 (rujuk datasheet m/s:264)

Comparator yang ada ini boleh digunakan dalam pelbagai MODE. Walaubagaimanapun, untuk tujuan perbincangan dalam post ini, hanya mode "One Independent Comparator with Output" sahaja yang akan dibincangkan. Dengan memahami mode ini, maka tidak susah untuk anda menguasai mode-mode yang lain.

Berbalik kepada konsep asas kendalian comparator, dua (2) nilai input voltage (analog) iaitu pada Vin- dan Vin+ akan dibandingkan, dan keluarannya adalah seperti berikut:

C1OUT = 1, jika Vin+ > Vin-
C1OUT = 0, jika Vin- > Vin+
C2OUT = 1, jika Vin+ > Vin-
C2OUT = 0, jika Vin- > Vin+

dengan bit C1INV=0 dan C2INV=0.

Perlu diingatkan bahawa Vin- dan Vin+ adalah analog voltage, maka PORT yang berkenaan mesti di setup supaya berfungsi sebagai analog pin.

Untuk memahami post ini dengan lebih jelas, mari kita belajar daripada contoh senario ini.

Problem statement:
Ali seorang pelajar semester akhir diploma kejuruteraan elektrik di sebuah politeknik yang sedang berusaha menyiapkan final projeknya. Ali ingin menggunakan IR sensor untuk mengesan kewujudan objek 5cm di sekeliling kemudian menyalakan LED. Maka Ali mengambil keputusan untuk sambungkan litar IR sensor (Rajah 2) kepada PIC18F4550 dan akan menggunakan comparator C1. Ali dikehendaki untuk menulis C program supaya PIC18F4550 berfungsi seperti mana yang dia mahukan.  

Rajah 2: Litar IR sensor

Berikut adalah nilai voltage keluar daripada IR sensor versus jarak detection.


Jarak (cm)   Sensor Output (V)
1                         0.3
2                         0.8
3                         1.3
4                         1.8
5                         2.3
6                         2.8
7                         3.5
8                         4.0
9                         4.5
10                       5.0

Solution:
Step 1:- Analisis masalah (Tetapkan nilai Threshold)

Berdasarkan kepada Figure 22-2, Threshold ialah nilai voltage yang constant. Dalam kes ini ialah Vin-. Jadi, bagaimana untuk menentukan nilai Vin- ini? Caranya begini:-
  • Perhatikan data Jarak(cm) Vs Voltage di atas. Ali ingin mengesan jarak objek pada 5cm atau lebih dekat (1cm, 2cm, 3cm, 4cm & 5cm sahaja). Oleh itu, nilai Threshold adalah diantara 2.3V(5cm) hingga 2.8V(6cm) supaya comparator boleh bezakan jarak antara 5cm dan 6cm. Maka nilai Threshold ialah 2.5V sebagai contoh. Seterusnya laras RV2 supaya voltage pada RA0 jadi 2.5V.



Step2:- Buat flowchart program atau Pseudo Code.

Pseudo Code
  1. Initialize Input/Output; 
  2. Setup ADC Module supaya RA0 dan RA3 sebagai Analog
  3. Setup Comparator Module; Tetapkan mode kepada CM2:CM0=001 
Expected Result:
Jika Jarak objek <=5cm maka LED on
Jika Jarak objek >5 maka LED off.

Step3: Tulis Program

Download Full Program Klik Disini

Perlu diingatkan LED akan menyala secara automatik, tidak perlu menulis program untuk access LED lagi. Ini adalah kerana, sekali aktifkan comparator, ia akan berfungsi secara Independence.

Sekian, Harap post ini berguna kepada seseorang.

Wednesday 22 January 2014

Example Basic Input and Output Circuit


Post ini akan bincangkan beberapa jenis litar asas input dan output.

Binary Input

Litar binary input adalah litar yang hanya mengesan input dalam DUA (2) keadaan sahaja. Sebagai contoh:
  • Litar yang mengesan sama ada ditekan atau tidak
  • Litar yang mengesan cahaya cerah atau gelab
  • Litar yang mengesan suhu sejuk atau panas
  • Litar yang mengesan paras air tinggi atau rendah dan lain-lain
disebabkan litar-litar ini hanya boleh membezakan dua keadaan, maka ia digelar sebagai litar binary input.

Post ini akan memberikan beberapa contoh litar binary input. Berikut adalah contoh litar binary input:-

Litar Push Button

kendalian litar adalah seperti berikut:

  • Litar A: Litar active high, litar ini akan memberi normal logic '0', manakala memberi logic '1' apabila push button ditekan.
  • Litar B: Litar active low, litar ini akan memberi normal logic '1', manakala memberi logic '0' apapbile push button ditekan.

Limit Switch SPDT


Kendalian litar ini adalah sama seperti litar push button diatas.

Kedua-dua litar diatas akan mengeluarkan isyarat dalam pada amplitude 0V dan 5V dan masing-masing akan dibaca oleh PIC sebagai logic '0' dan '1'. Bagaimana pula jika amplitude isyarat input bukan 0V dan 5V?


LED Output

Rajah 1: Litar Push Button dan LED

Rajah 1 diatas menunjukkan litar asas input dan output yang boleh disambungkan kepada PIC Microcontroller.

Untuk litar input, ia boleh dibahagikan kepada dua(2) litar iaitu:
  • Pull-Up Network (Active Low) : Litar ini akan memberi normal logic '1', manakala memberi logic '0' apabila push button ditekan.
  • Pull-Down Network (Active High) : Litar ini akan memberi normal logic '0', manakala memberi logic '1' apapbile push button ditekan.
Manakala bagi litar Output, ia juga boleh dikelaskan kepada dua(2) iaitu:
  • Sourcing Mode : LED akan menyala apabila PIC mengeluarkan logic '1'.
  • Sinking Mode: LED akan menyala apabila PIC mengeluarkan logic '0'.
Selain daripada itu Limit Switch juga boleh digunakan sebagai digital input

Thursday 16 January 2014

PENAFIAN

Kandungan Blog ini adalah Ciptaan Admin. Jika terdapat sebarang kesilapan, Saya amat berharap pembaca boleh memberi komen untuk tujuan menambahbaik kandungan Blog ini.

Bahasa Malaysia akan digunakan sebagai medium utama penyampaian maklumat. Walaubagaimanapun sesetengah istilah teknikal akan dikekalkan dalam bahasa english untuk membiasakan pembaca.