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.