Anda di halaman 1dari 14

Modul Praktikum Mikrokontroler 2014

Praktek 1 Digital Input dan Eksternal Interrupt Input


TUJUAN
Setelah menyelesaikan praktikum ini, yang anda peroleh adalah :
1. Mengakses port pada AVR sebagai Digital Input
2. Mengakses salah satu fitur AVR sebagai Eksternal Interrupt
3. Mengaplikasi
Mengaplikasikan
kan fungsi Digital Input dan Eksternal Interrupt dengan Display LCD 16x2

TEORI
DIGITAL INPUT

Untuk mengakses port mikrokontroler AVR ATMega 16 sebagai digital input ataupun output
bisa dilakukan dengan mendefinisikan register DDRx, PINx dan PORTx. Dimana jumlah port pada
AVR tersebut memiliki 32 port masing
masing-masing
masing setiap 1 byt
bytee memiliki 8 bit. Terdapat 4 parsial nama
port yang dinamai dengan port A, B, C dan D. Pada tabel berikut ini adalah kondisi dimana suatu port
bisa dinyatakan sebagai digital input dan output.

Kondisi default, mikrokontroler AVR didesain sebagai digital input yang bersifat floating point
atau ada istilah lain Tri
Tri-state
state (Hi
(Hi-Z).
Z). Dikarenakan pada register DDRx mempunyai initial value = 0
pada tiap bit, contoh pada register DDRC mempunyai initial value = 0.

Ada suatu kondisi dimana port yang difungsikan se


sebagai
bagai digital input, pada mikrokontroler
AVR digital input tersebut juga berfungsi sebagai Digital Pull
Pull-Up
Up Input. Dimana dengan memberikan
nilai high pada register PORTx, contoh pada register PORTC mempunyai initial value = 0 sehingga
value tersebut haru dirubah menjadi 1.

taufiq[at]pens[dot]ac.id

16

Modul Praktikum Mikrokontroler 2014


Sedangkan pada register PINx, merupakan register yang menampung nilai masukan dari sinyal
luar. Dari contoh ilustrasi gambar register PINC tidak adanya initial value karena status Read/Write
dari register PINx adalah read saja.

Selain itu apabila kondisi digital input difungsikan dengan mengaktifkan pull-up resistor maka
syarat pengaturan register yang dilakukan adalah mengatur register DDRx = 0x00 dan PORTx = 0xFF.
Untuk memastikan bahwa aktifasi pull-resistor berhasil digunakan maka ada register tambahan yang
mengatur kondisi tersebut. Yaitu register SFIOR (Special Function Input Ouput Register) dimana salah
satu bit-2 yang bernama PUD (Pull-Up Disable) harus diberi logika 0 (low) agar pull-up resistor
berfungsi, berikut ilustrasi gambar register SFIOR.

Pada register SFIOR ini, ketika bit-2 PUD diberi logika 1 maka setiap bit pada PORT AVR tidak
bisa difungsikan sebagai pull-up resistor meskipun dikonfigurasi digital input untuk aktif pull-up
resistor (DDRx = 0x00 dan PORTx = 0xFF)
Sebagai contoh akses dimana pada port C diinginkan mempunyai fungsi yang bisa menerima
masukan sinyal digital dimana ada pull-up secara hardware dengan menambahkan resistor eksternal,
maka definisi register yang harus dilakukan adalah sebagai berikut :
(mode digital input dengan eksternal pull-up resistor)
DDRx = 0x00;
PORTx = 0x00;
SFIOR=0x00;

//diasumsikan projek yang diakses hanya digital IO saja

Sedangkan apabila suatu push button yang masuk ke pin mikro terhubung dengan ground maka
konfigurasi registernya adalah sebagai berikut:
(mode digital input dengan internal pull-up resistor)
DDRx = 0x00;
PORTx = 0xFF;
SFIOR=0x00;

taufiq[at]pens[dot]ac.id

//diasumsikan projek yang diakses hanya digital IO saja

17

Modul Praktikum Mikrokontroler 2014


EKSTERNAL INPUT

Fitur eksternal interrupt pada mikrokontroler AVR ATmega16 di


di-trigger
trigger melalui pin INT0,
INT1 dan INT2. Fitur eksternal interrupt ini di konfigurasi secara software. Eksternal interrupt secara
umum akan ter
ter-trigger
trigger jika menerima perubahan sinyal. Berikut in
inii pin
pin-out
out dari eksternal interrupt
dari mikrokontroler AVR ATMega16.

Sinyal trigger yang bisa diterima oleh pin INTx adalah transisi tepi naik dan turun, serta ada
sinyal Low Level dan Any logical. Dimana sinyal tersebut tersedia pada INT0 dan INT1, na
namun
mun pada
INT2 hanya bisa menerima sinyal eksternal berupa edge trigger saja.
Untuk bisa mengakses fitur eksternal interrupt tersebut bisa bekerja ada beberapa register
yang harus diisi, yaitu :
GICR (General Interrupt Control Register)

o Bit 7 INT1: External Interrupt Request 1 Enable


Untuk meng-enable
meng enable kan External Interrupt 1
o Bit 6 INT0: External Interrupt Request 0 Enable
Untuk meng-enable
meng enable kan External Interrupt 0
o Bit 5 INT2: External Interrupt Request 2 Enable
Untuk meng-enable
meng
e kan External Interrupt 2

taufiq[at]pens[dot]ac.id

18

Modul Praktikum Mikrokontroler 2014


GIFR (General Interrupt Flag Register)

o Bit 7 INTF1: External Interrupt Flag 1


Ketika terjadi eksternal interrupt pada INT1, maka Flag INTF1 diset 1. Setelah
routine eksternal interrupt selesai di eksekusi maka Flag INTF1 diset 0.
o Bit 6 INTF0: External Interrupt Flag 0
Ketika terjadi eksternal interrupt pada INT0, maka Flag INTF0 diset 1. Setelah
routine eksternal interrupt selesai di eksekusi maka Flag INTF0 diset 0.
o Bit 5 INTF2: External Interrupt Flag 2
Ketika terjadi eksternal interrupt pada INT2, maka Flag INTF2 diset 1. Setelah
routine eksternal interrupt selesai di eksekusi maka Flag INTF2 diset 0.
MCUCR (MCU Control Register)

o Bit 3, 2 ISC11, ISC10: Interrupt Sense Control 1 Bit 1 and Bit 0


Bit ini mengatur sensitifitas yang akan dimiliki oleh port eksternal interrupt 1.
pilihan sensitifitas dapat dilihat pada tabel dibawah:

o Bit 1, 0 ISC01, ISC00: Interrupt Sense Control 0 Bit 1 and Bit 0


Bit ini mengatur sensitifitas yang akan dimiliki oleh port eksternal interrupt 0.
pilihan sensitifitas dapat dilihat pada tabel dibawah:

taufiq[at]pens[dot]ac.id

19

Modul Praktikum Mikrokontroler 2014


MCUCSR (MCU Control and Status Register)

o Bit 6 ISC2: Interrupt Sense Control 2


Jika ISC2 ditulis 0 maka falling edge pada INT2 akan mengaktifasi interupsi.
Jika ISC2 ditulis 1, maka rising edge pada INT2 akan mengaktifasi interupsi.

LCD (Liquid Crystal Display)

Dalam modul interface terdapat display LCD dengan ukuran 2x16, dimana modul tersebut
terhubung ke port B pada modul minimum sistem mikrokontroler AVR ATMega16. Dimana aturan
koneksi antara AVR dan LCD disesuaikan dengan software yang digunakan yaitu Codevision AVR.
Berikut ini koneksi emulasi data 4 bit pada LCD 2x16 yang disesuaikan menurut codewizard pada
Codevision AVR :

taufiq[at]pens[dot]ac.id

20

Modul Praktikum Mikrokontroler 2014


Berikut contoh pengkabelan yang digambarkan dimana LCD 2x16 dihubungkan pada mikro
AVR yaitu PORTC menggunakan data emulasi 4-bit.

PROSEDUR PERCOBAAN
Prosedur Umum

1. Secara keseluruhan beberapa percobaan dibawah ini menggunakan wizard sehingga kode digenerate secara otomatis.
2. Atur semua kode program yang ada kemudian diletakkan sesuai pada bagian-bagian kode hasil
generate wizard.
3. Pastikan hasil compile tidak menghasilkan error dengan menekan F9.
4. Selanjutnya download program tersebut ke MS-16 via USB dengan menekan Shift-F9 dan
tekan tombol Program the chip.
5. Amati dan analisa hasilnya kemudian catat hasil tersebut sebagai laporan sementara.
Prosedur Khusus

Skematik referensi dalam mengakses hardware modul IO adalah sebagai berikut :


1. LCD16x2

taufiq[at]pens[dot]ac.id

2. Buzzer

21

Modul Praktikum Mikrokontroler 2014


3. BarLED

4. DIPSwitch dan 4-Bit LSB PushButton

Percobaan ke :
1. Akses LED dengan Switch

Atur konfigurasi chip dan digital input serta output terhadap DIPSwitch dan BarLED sesuai
informasi wizard berikut ini. Kemudian tambahkan syntax berikut ini setelah program berhasil
di-generate.

Tambahkan syntax berikut ini setelah baris include file header.

#define BarLED PORTD


#define DIPSwitch PINC
Kemudian sisipkan syntax berikut ini dalam area while(1)

BarLED = DIPSwitch;
Amati hasilnya!

taufiq[at]pens[dot]ac.id

22

Modul Praktikum Mikrokontroler 2014


2. Akses LCD dan LED dengan Masukan dari DIP Switch

Atur konfigurasi Codewizard AVR seperti percobaan ke-1 kemudian tambahkan setting untuk
koneksi ke LCD pada port B AVR.

#include <mega16.h>
#include <stdio.h>
#include <delay.h>
#define BarLED PORTD
#define DIPSwitch PINC
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
// Declare your global variables here
unsigned char xstring[3];
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTC=0xFF;
DDRC=0x00;
// Port D initialization

taufiq[at]pens[dot]ac.id

23

Modul Praktikum Mikrokontroler 2014


// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTD=0xFF;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

taufiq[at]pens[dot]ac.id

24

Modul Praktikum Mikrokontroler 2014


SFIOR=0x00;
// LCD module initialization
lcd_init(16);
lcd_gotoxy(1,0);lcd_putsf("DIPSwitch to LCD");
delay_ms(2000);
while (1)
{
// Place your code here
lcd_gotoxy(1,0);
lcd_putsf("Data DIPSwitch");
lcd_gotoxy(5,1);
sprintf(xstring,"%d",DIPSwitch);
lcd_puts(xstring);
delay_ms(100);
lcd_clear();
BarLED = DIPSwitch;
};
}

3. Akses External Interrupt dengan output Buzzer dan LCD

Mengaktifkan External Interrupt untuk menerima signal eksternal menggunakan Push-Button


yang terhubung dengan INT0 [PORTD.2] dan INT1 [PORTD.3].

Untuk LCD bisa diakses maka jumper 3 harus dihubungakan pada 2-3.
#include <mega16.h>
#include <delay.h>
#define

Buzzer

PORTA.3

taufiq[at]pens[dot]ac.id

25

Modul Praktikum Mikrokontroler 2014


#define
#define

ON
OFF

1
0

// Alphanumeric LCD Module functions


#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>

// External Interrupt 0 service routine


interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
lcd_gotoxy(0,1);
lcd_putsf("Ext. Int. 0");
Buzzer=ON;
delay_ms(100);
Buzzer=OFF;
}
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here
lcd_gotoxy(0,1);
lcd_putsf("Ext. Int. 1");
Buzzer=ON;
delay_ms(100);
Buzzer=OFF;
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x08;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

taufiq[at]pens[dot]ac.id

26

Modul Praktikum Mikrokontroler 2014


// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Rising Edge
// INT2: Off
GICR|=0xC0;
MCUCR=0x0E;
MCUCSR=0x00;
GIFR=0xC0;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization

taufiq[at]pens[dot]ac.id

27

Modul Praktikum Mikrokontroler 2014


// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
lcd_init(16);
// Global enable interrupts
#asm("sei")
lcd_gotoxy(0,0);
lcd_putsf("Tipe Interrupt");
while (1)
{
// Place your code here
};
}

taufiq[at]pens[dot]ac.id

28

Modul Praktikum Mikrokontroler 2014


TUGAS
1. Pada percobaan ke-2, ubah data type data output dari integer %d ke %x. Amati dan
jelaskan hasil yang didapat
2. Pada percobaan ke-3, ubah mode sinyal eksternal interrupt pada INT1 secara bergantian
dari Any Change kemudian Low Level. Amati hasil yang didapatkan.
3. Jelaskan masing-masing mode masukan dari eksternal interrupt?
4. Cuplik program untuk menginisialisasi LCD selain PORTB dengan LCD 20 atau 24 karakter
yang memiliki 4 baris. Jelaskan!
5. Jelaskan syntax berikut ini :
a. Sprintf
b. Lcd_init
c. Lcd_clear
d. Lcd_gotoxy
e. Lcd_putsf
f. Lcd_puts
6. Cuplik register pada yang dihasilkan dari eksternal interrupt, kemudian jelaskan status tiap
bit dari register untuk tiap mode sinyal yang masuk?
7. Catat pemakaian memory flash yang dipakai dari masing-masing percobaan.
8. Kemudian jelaskan setiap baris terhadap syntax dari semua percobaan diatas kemudian
tarik kesimpulan. [tulis program yang bagian utamanya saja dengan ballpoint warna hitam
kemudian beri komen dengan ballpoint warna biru]
9. Buat laporan resmi berdasarkan hasil pengamatan.!

taufiq[at]pens[dot]ac.id

29

Anda mungkin juga menyukai