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.
taufiq[at]pens[dot]ac.id
16
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;
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
17
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)
taufiq[at]pens[dot]ac.id
18
taufiq[at]pens[dot]ac.id
19
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
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
taufiq[at]pens[dot]ac.id
2. Buzzer
21
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.
BarLED = DIPSwitch;
Amati hasilnya!
taufiq[at]pens[dot]ac.id
22
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
taufiq[at]pens[dot]ac.id
24
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
ON
OFF
1
0
taufiq[at]pens[dot]ac.id
26
taufiq[at]pens[dot]ac.id
27
taufiq[at]pens[dot]ac.id
28
taufiq[at]pens[dot]ac.id
29