Rabu, 14 Mei 2014

INPUT / OUTPUT DIGITAL PADA PIC16F628A


PIC16F628A memiliki 2 buah port input output yaitu PORTA dan PORTB. Beberapa pin pada kedua PORT ini ter-multiplex dengan fungsi alternatifnya.

Fungsi-fungsi alternatif pada PORTA dan PORTB akan dibahas pada bab selanjutnya. 

PORTA


PORTA merupakan latch 8-bit. Tiap bit pada PORTA kemudian disimbolkan dengan RA. Misalnya bit ke-7 dari PORTA disebut RA7. POTA memiliki register pengendali arah data yang disebut TRISA.

Fungsi alternatif yang ter-multiplex pada PORTA adalah sebagai berikut.

1. Analog komparator input (AN) pada pada PORTA 3:0.

2. Vreff output pada RA2.
3. Komparator output 1 (CMP1) pada RA3, komparator output 2 (CMP2) pada RA4.
4. Timer 0 clock input (T0CKI) pada RA4.
5. Master Clear (MCLR) pada RA5.
6. Programming voltage input (Vpp) pada RA5.
7. Crystal Oscillator input (OSC1) pada RA7.
8. Crystal Oscillator output (OSC2) pada RA6.
9. External clock input (CLKIN) pada RA7.
10. Clock output (CLKOUT) pada RA6.

Untuk membuat pin-pin pada PORTA sebagai input maka nilai register TRISA pada bit yang sesuai diberi logika ‘1’. Semua pin pada PORTA dapat dijadikan input dengan catatan sebagai berikut.

1. MCLR pada RA5 di disable.

2. Menggunakan oscillator internal.
3. Fungsi alternatif dari tiap pin dimatikan.

Untuk membuat pin-pin pada PORTA sebagai output maka nilai register TRISA pada bit yang sesuai diberi logika ‘0’. Tidak semua pin pada PORTA dapat dijadikan output yaitu RA5 karena tidak memiliki driver output. Sedangkan untuk membuat RA7:RA6 harus menggunakan oscillator internal. Khusus untuk RA4, driver outputnya berupa open drain sehingga apabila akan membuat RA4 sebagai output harus dihubungkan dengan rangkaian perantara yang aktif low. 


PORTB


digunakan sPORTB mempunyai register pengendali arah aliran data yang bernama TRISB. PORTB mempunyai lebar 8-bit dan dapat ebagai input ataupun output.

Fungsi alternatif yang ter-multiplex pada PORTB adalah sebagai berikut.


1. External Interrupt (INT) pada pin RB0.


2. Rx Tx USART pin pada RB1 dan RB2.


3. Synchronous data IO (DT) pada RB1.


4. Synchronous Clock IO (CK) pada RB2.


5. Pulse Width Modulation pin (PWM) pada RB3.


6. Low voltage programming (PGM) pada RB4.


7. Oscillator output timer 1 (T1OSO) pada pin RB6.


8. Clock input timer 1 (T1CKI) pada RB6.


9. ICSPTM Programming Clock (PGC) pada RB6.


10. Oscillator input timer 1 (T1 OSI) pada RB7.


11. ICSPTM Programming Data (PGD) pada RB7.


Semua pin pada PORTB memiliki resistor pull-up internal yang dapat dimanfaatkan untuk menghilangkan tegamgan ambang pada inputanya. Adanya internal pull-up, menjadikan fungsi input PORTB dapat dibuat aktif low dan aktif high. Fungsi internal pull-up ini akan otomatis disable apabila PORTB di setting sebagai output.

Untuk pin RB4, apabila bit PGM pada word CONFIG set, maka RB4 tidak dapat digunakan sebagai digital input/output. 



Percobaan digital I/O PIC16F628A 

 


PORTA sebagai Digital output



a. Rangkaian aktif low
b. Rangkaian aktif high
Gambar 1. Rangkaian percobaan PORTA sebagai output.

Pada rangkaian percobaan diatas, RA5 tidak terhubung dengan LED Karena RA5 tidak memiliki driver output. Kalaupun dipaksakan terhubung dengan rangkaian output, RA5 tidak akan memberikan respon apapun.

Agar jumlah pin pada PORTA dapat digunakan sebagai output secara maksimal maka pada percobaan ini kita menggunakan oscillator internal yaitu dengan memberi centang pada INTRC_OSC_NOCLKOUT pada proect wizard. Proses ini dapat dilakukan juga pada listing program dengan member nilai bit FOSC2:0 pada register CONFIG dengan nilai b100


Gambar 2. Pemilihan oscilator internal menggunakan project wizard


Listing program untuk pengujian PORTA sebagai output adalah sebagai berikut.




program dig_IO_1;

begin
  TRISA := $00;
  repeat
        begin
        PORTA := $FF;
        delay_ms(1000);
        PORTA := $00;
        delay_ms(1000);
        end;
  until 0 = 1;
end.


Kompilasi program dan downloadkan ke mikrokontroler kemudian amati hasilnya.


Program diatas adalah program LED flip - flop dengan jeda waktu antara LED padam dengan LED menyala masing – masing adalah 1 detik (delay_ms(1000)).


Jika mikrokontroler terhubung dengan rangkaian aktif low pada gambar diatas. Maka LED akan menyala ketika pin – pin pada PORTA bernilai ‘0’. Sedangkan jika terhubung rangkaian aktif high maka LED akan menyala ketika pin – pin pada mikrokontroler bernilai ‘1’.


Syntax PORTA := $FF akan menyebabkan semua pin di PORTA bernilai ‘1’. Kondisi ini akan bertahan selama 1000 ms atau 1 detik karena adanya syntax delay_ms(1000). Kemudian program akan mengeksekusi perintah PORTA := $00 yang menyebabkan semua pin pada PORTA bernilai ‘0’ dan kemudian mengeksekusi delay_ms(1000). Program akan dijalankan berulang karena terdapat dalam kalang repeat {statement} until {expression} dengan ekspresi 0 = 1 (tidak mungkin terjadi).


Catatan:



Ketika pin output mikrokontroler dihubungkan dengan peripheral yang aktif high, mikrokontroler akan mengkonsumsi arus yang lebih besar. Hal ini dapat menyebabkan temperature mikrokontroler meningkat.



PORB Sebagai digital Output 

 

a. Rangkaian aktif low
b. Rangkaian aktif high
Gambar 3. Rangkaian percobaan PORTB sebagai output.

Listing program untuk percobaan PORTB sebagai output identik dengan program PORTA sebagai output hanya saja dirubah untuk baris TRISA menjadi TRISB, dan PORTA menjadi PORTB. 



program dig_IO_2;

begin
  TRISB := $00;
  repeat
  begin
  PORTB := $FF;
  delay_ms(1000);
  PORTB := $00;
  delay_ms(1000);
  end;
  until 0 = 1;
end.

Jalankan program. Agar semua pin pada PORTB dapat bekerja normal, matikan fungsi LVP (Low Voltage Programming) pada CONFIG word atau melalui Project Wizard. 

PORTA sebagai digital input dan digital output


Sebagai digital input, PORTA tidak memiliki pull-up internal sehingga rangkaian perantaranya harus di pull-up atau pull-down. Tanpa adanya rangkaian pull-up atau pull-down maka logika ‘1’ dan ‘0’ pada input pin tidak dapat bekerja dengan baik.


Pada percobaan kali ini, input rangkaian berasal dari push button yang dihubunkan dengan pin RA4:RA7 dan outputnya pada pin RA0:RA3 dihubungkan dengan LED sebagai indicator. Rangkaian pull-down berfungsi untuk menjaga pin input dalam keadaan normal berada pada level logika ‘0’. Ketika ada penekanan push button maka pin input akan membaca logika ‘1’ dan ketika push button dilepaskan logika input akan kembali ke ‘0’. Sedangkan untuk input yang terhubung dengan rangkaian pull-up akan berlaku kebalikanya. Rangkaian pull-up berfungsi untuk menjaga input berada pada level logika ‘1’. Ketika push button ditekan maka pin akan membaca logika ‘0’ dan kembali ke logika ‘1’ ketika dilepaskan.


Pada percobaan kali ini juga dapat diamati bahwa pin RA5 dapat dimanfaatkan sebagai jalur input digital ketika fungsi MCLR dinonaktifkan.



a. Pull-down input

b. Pull-up input
Gambar 4. Rangkaian percobaan PORTA sebagai digital input dan digital output.

Program yang digunakan untuk percobaan ini adalah sebagai berikut.




program dig_IO_3;

begin
  TRISA := $F0;
  while true do
       begin
        If TestBit(PORTA,4)=0 then ClearBit(PORTA,0)
else SetBit(PORTA,0);
        If TestBit(PORTA,5)=0 then ClearBit(PORTA,1)
else SetBit(PORTA,1);
        If TestBit(PORTA,6)=0 then ClearBit(PORTA,2)
else SetBit(PORTA,2);
        If TestBit(PORTA,7)=0 then ClearBit(PORTA,3)
else SetBit(PORTA,3);
       end;
end.

Pada program kali ini, perulangan menggunakan statement while {expression} do {statement}. Fungsinya hampir sama dengan repeat {statement} until {expression}. Program ini juga menggunakan statement percabangan if {expression} then {statemen TRUE} else {statement FALSE}.
Pada program ini kita juga memanfaatkan fungsi yang disediakan oleh mikropascal yaitu:


1. Function Testbit(register:byte ; position:byte):byte


2. Procedure SetBit(register:byte ; position:byte)


3. Procedure Clearbit(register:byte ; position:byte)


TestBit(PORTA,4) merupakan fungsi yang akan memberikan nilai keluaran ‘1’ jika bit ke-4 pada PORTA atau bit RA4 bernilai ‘1’ dan memberi nilai keluaran ‘0’ jika pin RA4 bernilai ‘0’. Jadi nilai TRUE pada statement if … yang pertama akan terpenuhi jika nilai pin RA4 adalah ‘0’.


ClearBit(PORTA,0) merupakan prosedur yang akan meng-clear-kan nilai bit ke-0 pada PORTA. Procedure ini merupakan aksi yang dilakukan ketika kondisi TRUE terpenuhi pada percabangan if… then … else … .


SetBit(PORTA,0) merupakan procedure yang akan men-set nilai bit ke-0 pada PORTA. Procedure ini akan dilaksanakan jika kondisi TRUE dari statemen if … tidak terpenuhi. 



PORTB sebagai digital input dan digital output


Untuk menguji PORTB sebagai digital input serta digital output sebenarnya dapat menggunakan rangkaian push button dan LED seperti percobaan sebelumnya.


Akan tetapi kita akan memanfaatkan fitur internal pull-up yang dimiliki oleh PORTB. Sehingga kita tidak perlu menggunakan resistor pull-up pada push button. Skema rangkaian percobaanya adalah sebagai berikut.


Gambar 54. Rangkaian push button dan LED pada PORTB


Listing program yang digunakan identik dengan program dig_I/O_3 hanya terdapat modifikasi pada register TRISA menjadi TRISB, PORTA menjadi PORTB dan penambahan procedure ClearBit(OPTION_REG,7).




program dig_IO_4;

begin
  TRISB := $F0;
  ClearBit(OPTION_REG,7);
  while true do
        begin
        If TestBit(PORTB,4)=0 then ClearBit(PORTB,0)
else SetBit(PORTB,0);
        If TestBit(PORTB,5)=0 then ClearBit(PORTB,1)
else SetBit(PORTB,1);
        If TestBit(PORTB,6)=0 then ClearBit(PORTB,2)
else SetBit(PORTB,2);
        If TestBit(PORTB,7)=0 then ClearBit(PORTB,3)
else SetBit(PORTB,3);
  end;
end.

Procedure ClearBit(OPTION_REG,7) adalah procedure yang akan meng-clear-kan bit ke-7 dari register OPTION. Bit ini merupakan bit RBPU (RB Pull-Up) yang aktif low sehingga ketika diberi nilai ‘0’ atau di-clear-kan, maka fungsi pull-up pada PORTB akan aktif. Fungsi internal pull-up hanya akan aktif ketika pin diset sebagai input (TRISB pada bit yang bersesuian bernilai ‘1’).

Apabila program dijalankan, ketika push button yang terhubung pada pin RB4 ditekan maka pin RB0 akan memberikan logika ‘0’ dan LED akan menyala dan akan set (memberikan logika ‘1’) kembali ketika push button dilepas. Begitu juga dengan push button yang terhubung dengan pin RB5, RB6, dan RB7.


Dapat diamati bahwa penggunaan internal pull-up akan menyederhanakan rangkaian perantara seperti push button dan yang lainya. Akan tetapi penggunaan internal pull-up memiliki keterbatasan ketika membaca inputan yang aktif rendah. 


Source code pada pembahasain ini dapat didownload disini 
Download postingan ini dalam bentuk pdf disini

Tidak ada komentar:

Posting Komentar