• Tidak ada hasil yang ditemukan

APLIKASI INPUT/OUTPUT MIKROKONTROLER

Dalam dokumen Trainer Book ATMega16 (Halaman 22-34)

1. Setting Port I/O

Atmega 16 memiliki 4 buah port I/O yaitu port A, port B, port C, dan port D yang masing masing terdiri dari 8 buah kaki. Sehingga secara keseluruhan Atmega16 memiliki 32 buah kaki bidirectional yang dapat diprogram sebagai input atau output dengan pilihan internal pull-up. Masing port memiliki 3 buah register bit, yaitu DDxn, PORTxn dan PINxn. Huruf x mewakili nama port, sedangkan n mewakili nama bit. Bit DDxn terdapat pada I/O address DDRx, bit PORTxn terdapat pada I/O address PORTx dan bit PINxn terdapat pada I/O addres PINx.

Deskripsi register untuk port A, port B, port C dan port D sama yaitu terdiri dari DDxn, PORTxn dan PINxn berikut adalah deskripsi register untuk port A.

Port A data register - PORTA

Bit 7 6 5 4 3 2 1 0

PORTA7 PORTA6 PORTA5 PORTA4 PORTA3 PORTA2 PORTA1 PORTA0 PORTA

Read/write R/W R/W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Port A data direction register - DDRA

Bit 7 6 5 4 3 2 1 0

DDRA7 DDRA6 DDRA5 DDRA4 DDRA3 DDRA2 DDRA1 DDRA0 DDRA

Read/write R/W R/W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Port A input pin addres - PINA

Bit 7 6 5 4 3 2 1 0

PINA7 PINA6 PINA5 PINA4 PINA3 PINA2 PINA1 PINA0 PINAA

Read/write R R R R R R R R

Initial Value N/A N/A N/A N/A N/A N/A N/A N/A

Port I/O pada mikrokontroler AVR dapat difungsikan sebagai input atau output, dengan cara mengubah isi I/O register Data Direction Register. Bit DDxn dalam register DDRx (Data Direction Register) menentukan arah pin. Berikut adalah tabel pengaturan port I/O :

DDR bit =1 DDR bit = 0 PORT bit = 1 Output high Input pull-up PORT bit = 0 Output low Input floating

Misalnya :

Jika kita ingin Port C dikonfigurasikan sebagai ouput, maka DDRC (data direction register port C) harus diset 0b11111111 atau 0xFF atau 255. Jika port C sebagai output, maka DDRC harus diset 0x00 atau 0b00000000 atau 0.

Contoh:

Setiap pin I/O mikrokontroler AVR memiliki internal pull up. Misalnya port B dikonigurasikan sebagai input dan internal pull up nya diaktifkan, maka DDRB = 0x00 dan PORTB = 0xFF.

Contoh:

Untuk membaca data pada salah satu port, dapat digunakan fungsi PINx, sedangkan untuk membaca data per pin pada suatu port dapat digunakan fungsi PINx.bit

Contoh:

dan arusnya sebesar 20 mA. Port I/O sebagai output hanya memberikan arus (sourcing) sebesar 20 mA, keluaran dari suatu port mikrokontroler hanya dapat mengemudikan perangkat output dengan arus yang kecil, sehingga untk peralatan elektronika dengan arus yang besar perlu diberikan penguat tambahan, oleh karena itu biasanya dipergunakan penguat lagi berupa transistor atau IC penguat.

2. Contoh Program Aplikasi a. Program blink led

Menyalakan dan mematikan led, output berupa 8 buah led aktif low pada port B (PB0 PB7). Berikut adalah cara membuat program menggunakan CodeWizardAVR

- Create new file (klik projrect)

- Konfigurasi port B sebagai output

- Save program

- Tuliskan program Program :

- Build program dengan menekan Ctrl+F9 atau klik project build all

- Download program menggunakan software khazama, caranya: Atur chip AVR yang digunakan

Open program, dengan cara tekan Ctrl+L atau klik file load file flash to buffer. Program yang didownloadkan adalah hasil compile dari CVAVR yang

Lalu klik Auto Program

b. Program nyala berurutan

Menyalakan dan mematikan led secara berurutan, output berupa 8 buah led aktif low pada port B (PB0 PB7). Gunakan CodeWizardAVR untuk membuat program.

- Create new file

- Konfigurasi chip, clock dan port B sebagai output - Save program

- Tuliskan program

- Build dan download program ke Atmega16 Program :

c. Program Sakelar

Port C sebagai input dan Port B sebagai output. Langkah memprogram: - Create new file

- Konfigurasi chip, clock

- Konfigurasi port B sebagai output dan port C sebagai input - Save program

- Tuliskan program

- Build dan download program ke Atmega16 Program :

BAB V

INTERUPSI

Interupsi adalah keadaan dimana saat program utama dieksekusi oleh CPU, kemudian tiba-tiba berhenti untuk sementara waktu karena ada rutin lain yang harus ditangani oleh CPU, dan setelah selesai mengerjakan rutin tersebut, CPU kembali mengerjakan rutin utama. Amega 16 memili 21 sumber interupsi yang ditujukan pada tabel dibawah ini.

No Vektor Alamat Program Sumber Interupt Keterangan

1 $000(1) RESET External pin, power on reset, brown-out

reset, Watchdog reset, JTAG AVR reset

2 $002 INT0 Eksternal interupt request 0

3 $004 INT1 Eksternal interupt request 1

4 $006 TIMER2 COMP Timer/Counter compare match

5 $008 TIMER2 OVF Timer/counter overflow

6 $00A TIMER1 CAPT Timer/counter capture event

7 $00C TIMER1 COMP A Timer/counter 1 compare match A

8 $00E TIMER 1 COMP

B Timer/counter 1 compare match B

9 $010 TIMER 1 OVF Timer/counter 1 overflow

10 $012 TIMER 0 OVF Timer/counter 2 overflow

11 $014 SPI, STC Serial transfer complete

12 $016 USART, RXC USART, Rx Complete

13 $018 USART, UDRE USART data register empty

14 $01A USART, TXC USART, Tx Complete

15 $01C ADC ADC conversion complete

16 $01E EE_RDY EEPROM ready

17 $020 ANA_COMP Analog comparator

18 $022 TWI Two wire serial interface

19 $024 INT2 External interupt request2

20 $026 TIMER 0 COMP Timer/counter 0 compare match

1. Interupsi eksternal

Pada Atmega16 terdapat 3 pin untuk interupsi eksternal, yaitu INT0, INT1, INT2. Pengaturan kondisi keadaan yang menyebabkan terjadinya interupsi eksternal diatur oleh register MCUCR (MCU control register), seperti gambar berikut.

Bit 7 6 5 4 3 2 1 0

SM2 SE SM1 SM0 ISC11 ISC10 ISC01 1SC0 MCUCR

Read/write R/W R/W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

a. Bit ISC01 dan ISC00 menentukan kondisi yang dapat menyebabkan interupsi eksternal pada pin INT0. Konfigurasi bit ISC01 dan ISC00 dapat dilihat pada tabel dibawah ini.

ISC01 ISC00 Keterangan

0 0 Logika 0 pada pin INT0 menyebabkan interupsi

0 1 Perubahan logika pada INT0 menyebabkan interupsi

1 0 Perubahan logika dari 1 ke 0 pada pin INT0 menyebabkan interupsi

1 1 Perubahan logika dari 0 ke 1 pada pin INT0 menyebabkan interupsi

b. Bit ISC11 dan ISC10 menentukan kondisi yang dapat menyebabkan interupsi eksternal pada pin INT1. Konfigurasi bit ISC11 dan ISC10 dapat dilihat pada tabel dibawah ini.

ISC11 ISC10 Keterangan

0 0 Logika 0 pada pin INT1 menyebabkan interupsi

0 1 Perubahan logika pada INT1 menyebabkan interupsi

1 0 Perubahan logika dari 1 ke 0 pada pin INT1 menyebabkan interupsi

1 1 Perubahan logika dari 0 ke 1 pada pin INT1 menyebabkan interupsi

Pemilihan pengaktifan interupsi eksternal diatur oleh register GICR (general interupt control register), seperti dalam gambar berikut:

Bit 7 6 5 4 3 2 1 0

INT1 INT0 INT2 - - - IVSEL IVSE GICR

Read/write R/W R/W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Bit-bit INT1, INT0, INT2 pada register GICR digunakan untuk mengaktifkan masing-masing interupsi eksternal. Ketika bit-bit tersebut di set 1 (aktif), maka interupsi eksternal akan aktif. Jika bit I (interupt) pada SREG (status register) diset 1 maka enable interupt, intruksi untuk mengaktifkan globa interupt yaitu sei. Program interupsi dari masing-masing interupsi akan dimulai dari vektor interupsi pada masing-masing-masing-masing jenis interupsi eksternal.

2. Praktik interupsi eksternal

Berikut adalah program interupsi eksternal INT 0 dan INT 1 aktif. Led akan nyala

bergantian, ketika ditekan push button PD2 (int 0 aktif) maka led akan menyala flip-flop, ketika ditekan push button PD3 (int1 aktif) maka akan menjadi blink led.

Langkah kerja:

- Create new file

- Konfigurasi chip, clock

- Konfigurasi port B sebagai output dan PD 2 dan PD3 sebagai input pull up - Aktifkan INT0 dan INT1

- Save program - Tuliskan program

- Build dan download program ke Atmega16

Program Flip-flop

Program Utama, nyala bergatian

g 10 f 9 CA 8

Dalam dokumen Trainer Book ATMega16 (Halaman 22-34)

Dokumen terkait