-
Pemrograman Dasar C Mikrokontroler AVR
By : Deddy Susilo, ST
(WORKSHOP PIM FTEK UKSW 2009)
Sasaran: Setelah membaca bab ini, pembaca akan mampu : Memahami
pemrograman dasar C Mikrontroler AVR. Mengaplikasikan
mikrokontroler dalam beberapa aplikasi sederhana menggunakan bahasa
C
Bab ini akan membahas pemrograman dasar mikrokontroler AVR dalam
bahasa C. Belajar
mikrokontroler apapun lebih bagus jika dimulai dengan bahasa
assembly karena akan lebih mudah
memahami sifat dan cara penggunaan register dasar dari sebuah
mikrokontroler. Hal ini dikarenakan
mikrokontroler / mikroprosesor hanya mengenal bahasa mesin (yang
biasanya dalam format HEX
atau BIN) saja, yang mana bahasa mesin tersebut adalah hasil
proses assembling dari bahasa assembly
(yang biasanya dalam format ASM).
Untuk pembuatan program dalam skala besar (misalnya program
mikrokontroler untuk
control unit sebuah DVD player, dsb) pemrogram akan mengalami
kesulitan jika menggunakan
bahasa pemrograman tingkat rendah seperti bahasa assembly AVR.
Karena itu kemudian
dikembangkan sebuah Kompiler yang dapat menerjemahkan bahasa
pemrograman tingkat tinggi
(misalnya bahasa C, Pascal, dsb) ke bahasa assembly-nya AVR,
sehingga pemrogram dapat membuat
perangkat lunak untuk mikrokontroler AVR menggunakan bahasa
tingkat tinggi.
Salah satu compiler terkenal dan mudah digunakan untuk
menerjemahkan bahasa C ke bahasa
assembly AVR adalah Code Vision AVR. Dalam mempelajari bahasa C
untuk AVR, untuk tiap sub-
babnya sebelumnya akan dibahas terlebih dahulu bahasa C secara
umum (maksudnya bahasa C
standar yang untuk PC). Bahasa C cukup universal tidak seperti
bahasa assembly, sehingga untuk
mempelajari tipe membahas mikrokontroler keluarga yag lain,
bahasa C yang digunakan tidak jauh
berbeda cara penulisan dan pemakaiannya, sehingga pembaca tidak
akan mengalami kesulitan yang
berarti.
1.1. Kata-kata Kunci Dalam Bahasa C
Kompiler menyediakan tipe data C standar dan beberapa tipe data
tambahan untuk menunjang
mikrokontroler keluarga AVR. Untuk bahasa C standar ANSI hanya
mempunyai 32 kata kunci
(perintah baku). Berikut adalah ke-32 kata-kata kunci untuk
Turbo C : auto default float register
volatile break do for
return switch while case
double goto short typedef
char else if signed
union const enum int
sizeof unsigned continue extern
1
-
long static void struct
Fungsi masing-masing kata kunci di atas dapat dibaca di
buku-buku yang khusus membahas
bahasa C umum. Meskipun hanya mempunyai 32 kata kunci saja,
bukan berarti bahasa C kurang
variatif dalam perintah-perintahnya. Karena perintah-perintah
tambahan (yang biasanya berupa
fungsi) dapat ditambahkan sewaktu penulisan program dengan
menambahkan beberapa file pustaka
(library) pada program yang ditulis. Sebagai tambahan kata kunci
tersebut juga berlaku jika nanti kita
mulai belajar mikrokontroler keluarga AVR.
1.2. Struktur Program Dalam Bahasa C
Setiap bahasa pemrograman mempunyai ciri khas tersendiri dalam
penulisan programnya.
Karena itu untuk mengenal lebih jauh penulisan program dengan
suatu bahasa pemrograman, haruslah
diketahui struktur / pola penulisan bahasa pemrograman tersebut.
Struktur dari program C dapat dilihat
sebagai kumpulan dari sebuah atau lebih fungsi-fungsi. Dimana
masing-masing fungsi tersebut
mempunyai nama. Fungsi utama yang harus ada di program C sudah
ditentukan namanya, yaitu
bernama main( ). Berikut adalah struktur/pola penulisan program
dalam bahasa C :
penulisan file-file pustaka main( ) { statemen-statemen; }
fungsi_fungsi_Lain( ) { statemen-statemen; }
Bahasa C dikatakan sebagai bahasa pemrograman terstruktur,
karena strukturnya
menggunakan fungsi-fungsi sebagai program-program bagian
(subroutine). Jika diinginkan
digunakannya perintah-perintah tambahan selain yang ada pada
ke-32 kata kunci, maka ditambahkan
beberapa file pustaka yang dituliskan pada bagian awal program.
Pada file-file pustaka tersebut akan didefinisikan beberapa
perintah-perintah tambahan (yang biasanya berupa fungsi-fungsi)
yang dapat
digunakan pada penulisan program. Salah satu file pustaka yang
sering digunakan adalah stdio.h
(singkatan dari Standard Input Output) . Pada file pustaka
tersebut telah didefinisikan beberapa
perintah baru yang digunakan untuk masukan dan keluaran standar,
misalnya perintah untuk
menampilkan sesuatu di layar (perintah printf), perintah untuk
memasukkan data (perintah scanf), dsb.
1.3. Contoh Program Bahasa C Yang Sederhana
Berikut adalah sebuah contoh program C sederhana.
Kode Program Keterangan#include //file pustaka
//tempat mendeklarasikan variabel global (jika ada)
2
-
masukkan nama anda : Budi
nama anda adalah : Budi
main( ) { char nama[10];
printf(masukkan nama anda :); scanf(%s,&nama); printf(nama
anda adalah : %s,nama); }
//fungsi utama
//contoh variabel lokal nama bertipe char meminta disediakan
tempat di memori sebanyak 10//statemen-statemen
Jika program tersebut dijalankan akan didapatkan hasil :
Program di atas adalah program bahasa C untuk komputer (PC).
Berikut adalah contoh
program bahasa C sederhana untuk mikrokontroler AVR (dengan Code
Vision AVR) :
Kode Program Keterangan#include #include #include
void main(void) { char simpan; PORTA=0xFF; simpan=PORTC; }
//file pustaka
//tempat mendeklarasikan variabel global (jika ada)//fungsi
utama
//contoh variabel lokal simpan//statemen-statemen
Jika program tersebut dikompilasi ke bentuk hex atau biner dan
dimasukkan ke FLASH
PEROM AVR, mikrokontroler akan mengeluarkan nilai FFh
(=11111111b) di port A, dan akan
mengambil nilai yang ada di port C serta menyimpannya di
variabel simpan.
1.4. Tipe Data Dalam Bahasa C Untuk AVR
Di dalam bahasa pemrograman komputer, data yang digunakan
umumnya dibedakan menjadi
data nilai numerik (bilangan) dan data nilai karakter (huruf dan
kata). Nilai numerik dibedakan lagi menjadi nilai numerik integer
(bilangan bulat) dan nilai numerik pecahan. Nilai numerik
pecahan
dapat dibedakan lagi menjadi nilai numerik pecahan ketepatan
tunggal (32 bit) dan nilai numerik
pecahan ketepatan ganda (64 bit). Bahasa pemrograman komputer
membedakan data ke dalam
beberapa tipe data ini untuk tujuan supaya operasi data menjadi
efisien dan efektif.
Bahasa C menyediakan lima macam tipe data dasar, yaitu tipe data
integer (nilai numerik
bulat yang dideklarasikan dengan int), floating point (nilai
numerik pecahan ketepatan tunggal yang
dideklarasikan dengan float), double precision (nilai numerik
pecahan ketepatan ganda yang
dideklarasikan dengan double), karakter (dideklarasikan dengan
char) dan kosong (dideklarasikan
dengan void). Selanjutnya int, float, double, dan char dapat
dikombinasikan dengan perintah
pengubah (modifier) signed, unsigned, long, dan short. Hasil
dari kombinasi tipe data ini dapat dilihat
di tabel berikut :
3
-
Tabel 1. Tipe Data AVR
Beberapa tipe data akan dijelaskan dengan lebih detail sebagai
berikut.
1.4.1. Tipe Data bit
Tipe data ini digunakan untuk mendeklarasikan variabel 1
bit.
Kode Program Keteranganbit
ftek_uksw;ftek_uksw=1;delay_ms(100);ftek_uksw=0;
Variabel bernama ftek_uksw bertipe data bit, variasi nilai hanya
0 atau 1
1.4.2. Tipe Data signed char/unsigned char
Tipe data ini standar di bahasa C yang digunakan untuk
mendeklarasikan bilangan bertanda dan
bilangan tak bertanda yang bertipe char (8 bit). Karakter
bertanda mempunyai jangkauan -128 hingga
+127, karakter tak bertanda mempunyai jangkauan 0 sampai dengan
255.
Kode Program Keteranganunsigned char
bos1,bos2;bos1=0x55;bos2=bos1;
//Variabel bernama bos1 dan bos2 bertipe data unsigned char,
variasi nilai -128 s/d +127//variabel bos1 diisi 55 heksa//isi dari
variabel bos1 dikopikan ke variabel bos2
1.4.3. Tipe Data signed short/unsigned short
Signed short mempunyai jangkauan -32768 hingga +32767, unsigned
short mempunyai jangkauan 0
sampai dengan 65535.
Kode Program Keteranganunsigned short suhu,kipas; //Variabel
bernama suhu dan kipas
bertipe data unsigned short
4
-
suhu=0x0C200 ;
kipas=suhu;
//isikan nilai C200 heksadesimal ke variabel suhu//kopikan isi
variabel suhu ke variabel kipas
1.4.4. Tipe Data signed int/unsigned int
Signed int mempunyai jangkauan -32768 hingga +32767, unsigned
int mempunyai jangkauan 0
sampai dengan 65535.
Kode Program Keteranganunsigned int nilai1,nilai2;
nilai1=10 ;
nilai2=2*nilai1;
//Variabel bernama nilai1 dan nilai2 bertipe data unsigned
int//isikan nilai1 dengan bilangan 10 desimal//kalikan nilai1
dengan 2 kemudian kopikan ke nilai2
1.4.5. Tipe Data signed long /unsigned long
Signed long dan unsigned long mempunyai jangkauan 4 byte (32
bit)
Kode Program Keteranganunsigned long suhu;
suhu=250000 ;
//Variabel bernama suhu bertipe data unsigned long
integer//isikan nilai 250000 desimal ke variabel suhu
1.4.6. Tipe Data float
Float digunakan untuk mendeklarasikan variabel floating
point.
Kode Program KeteranganFloat x1,x2;
x1=31.4 ;x2=sqrt(x1);
//Variabel bernama x1 dan x2 bertipe data float//isikan nilai
31,4 ke variabel x1//akar kuadratkan isi nilai x1 kemudian simpan
di variabel x2
1.5. Variabel
Variabel adalah suatu pengenal yang digunakan untuk mewakili
suatu nilai tertentu di dalam
proses program. Variabel juga didefinisikan sebagai suatu
pemesanan tempat di memori RAM untuk
menyimpan suatu nilai tertentu. Misalnya ungkapan int x=3, x
adalah nama variabel yang memesan
sebuah tempat di RAM sebesar 16 bit untuk menyimpan nilai
bilangan bulat 3. Nilai variabel tersebut
dapat diubah-ubah sewaktu-waktu.
Semua variabel-variabel yang akan digunakan di program C harus
dideklarasikan terlebih
dahulu, begitu juga untuk AVR. Bentuk umum dari mendeklarasikan
variabel dapat ditulis sebagai
berikut ini :
tipe nama_nama_variabel;
Tipe adalah tipe data dari variabel yang dikehendaki. Nama_nama
variabel adalah satu atau
lebih dari nama variabel yang dikehendaki dengan tipe tersebut.
Setiap pendeklarasian variabel harus
5
-
diakhiri dengan ;. Berikut adalah beberapa contoh untuk
mendeklarasikan variabel :
char simpan;
Berarti mendeklarasikan variabel yang bernama simpan, yang mana
variabel tersebut
mempunyai tipe data char (=variabel tersebut akan dipakai untuk
menyimpan data 8 bit).
Variabel ini otomatis akan disimpan di bagian RAM yang masih
kosong.
int X,Y,Nilai;
Berarti mendeklarasikan variabel-variabel yang bernama X, Y, dan
Nilai, yang mana
variabel-variabel tersebut mempunyai tipe data integer (variabel
tersebut akan dipakai
untuk menyimpan bilangan bulat selebar maksimal 16 bit).
Variabel ini otomatis akan
disimpan di bagian RAM yang masih kosong.
bit nilai_biner;
Berarti mendeklarasikan variabel yang bernama nilai_biner, yang
mana variabel tersebut
mempunyai tipe data bit. Variabel ini otomatis akan disimpan di
bagian bit addressable
yang masih kosong.
1.6. Operator Penulisan program yang berisi instruksi-instruksi
mengandung operator dan operand.
Operand adalah variabel atau konstanta yang merupakan bagian
pernyataan sedangkan operator
adalah suatu simbol yang menyatakan suatu operasi akan dilakukan
oleh operand tersebut. Contoh
dalam operasi matematika :
x = y + z;
Ada 3 buah operand dalam pernyataan diatas yaitu : x, y dan z
dan dua buah operator yaitu = (sama
dengan) dan + (penjumlahan). Operator dalam bahasa C dibagi
menjadi tiga kelompok yaitu :
1. Unary : operator yang beroperasi pada satu operand, misal :
a
2. Binary : operator yang beroperasi pada dua operand, misal :
a-b
3. Ternary : operator yang beroperasi pada tiga atau lebih
operand, misal : (a-b)*c
1.6.1. Operator Aritmatika
Operator aritmatika adalah beberapa operator yang digunakan
untuk melakukan perhitungan
aritmatika.
Tabel 2. Operator Aritmatika
Operator Pernyataan+ operator untuk operasi penjumlahan-
operator untuk operasi pengurangan* operator untuk operasi
perkalian/ operator untuk operasi pembagian
% operator untuk operasi sisa pembagian (modulus)
Operator *, / dan % memiliki prioritas yang lebih tinggi bila
dibanding operator + dan -.
6
-
1.6.2. Operator Pembanding
Operator pembanding adalah beberapa operator yang digunakan
untuk membandingkan 2
buah data. Hasil operasinya bukan berupa nilai tetapi hanya
nilai true (1) atau false (0).
Tabel 3. Operator Pembanding
Operator Pernyataan Contoh= = bernilai benar jika kedua data
sama a = = b! = bernilai benar jika kedua data tidak sama a ! =
b> bernilai benar jika data pertama lebih besar dari data kedua
a > b< bernilai benar jika data pertama lebih kecil dari data
kedua a < b
>= bernilai benar jika data pertama lebih besar atau sama
dengan data kedua a >= b operator untuk operasi geser kanan
Contoh :
a = 0x55;
b = 0x23;
a&b=?
a = 0x55 = 0 1 0 1 0 1 0 1
b = 0x20 = 0 0 1 0 0 0 1 1 &
a&b= 0x01 = 0 0 0 0 0 0 0 1
b
-
Setelah digeser kiri :
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 00 1 0 0 0 1 1
0
b
-
b--;
1.6.7. Operator Berkondisi atau Ternary (?:)
Operator berkondisi atau ternary digunakan untuk mengecek logika
sebuah ekspresi
pernyataan kemudian menentukan ekspresi pernataan
berikutnya.
Bentuk :
ekspresi_1 ? ekspresi_2 : ekspresi_3;
Contoh :
P1 = data_a 80) { printf(Selamat Anda Lulus \n); printf(Tapi
jangan cepat-cepat nikah..Hehe..); } }
//file pustaka//fungsi utama
//variabel lokal
//statemen if, menyeleksi jika isi dari variabel nilai lebih
dari 60 maka lakukan pernyataan didalam tanda { }
9
-
Bentuk if di atas adalah bentuk if untuk bahasa C di PC, berikut
adalah contoh bentuk if
untuk bahasa C di AVR:
Kode Program Keterangan#include #include main() { PORTA=0x00;
DDRA=0x00; PORTC=0x00; DDRC=0xFF; unsigned char suhu; suhu=PORTA;
P0RTC=0x00; if(suhu>=0x1F)
{ PORTC=0xFF; } }
//file pustaka
//fungsi utama
//Port A sebagai input
//Port C sebagai output//variabel lokal suhu bertipe char//ambil
data dari Port A//Port 0 diberikan nilai 00000000 biner//statemen
if, menyeleksi jika isi dari variabel suhu lebih dari 1F heksa maka
lakukan pernyataan didalam tanda { } Port0 diberi nilai 11111111
B
1.7.2. Statemen if...else
Struktur if..else merupakan pengembangan dari struktur if dengan
struktur sebagai berikut :
if (kondisi) statemen1;
else statemen2;
Statemen1 yang dapat berupa blok statemen akan diproses bilamana
kondisi yang diseleksi
benar (terpenuhi) sedang statemen-statemen atau dapat berupa
blok statemen akan diproses bilamana
kondisi yang diseleksi salah (tidak terpenuhi).
Contoh :
Kode Program Keterangan#include main() { int nilai;
printf(Berapa nilai anda :); scanf(%i, &nilai); if(nilai>60)
printf(Anda lulus); else printf(Anda tidak lulus!); }
//file pustaka//fungsi utama
//variabel lokal nilai bertipe integer
//ambil nilai yang diketikkan pada keyboard//statemen if,
menyeleksi jika isi dari variabel nilai lebih dari 60 desimal cetak
kalimat Anda lulus, jika tak terpenuhi maka cetak kalimat Anda
tidak lulus !
Bila program tsb dijalankan : Berapa nilai anda: 70
Anda lulus
Kemungkinan lain :
Berapa nilai anda: 50
Anda tidak lulus
Bentuk if else di atas adalah bentuk if else untuk bahasa C di
PC, berikut adalah contoh bentuk if else
10
-
untuk bahasa C di AVR:
Kode Program Keterangan#include #include main() { unsigned char
suhu; PORTA=0x00; DDRA=0xFF; PORTB=0x00; DDRB=0x00;
suhu=PORTB;
PORTA=0x00;
if(suhu>=0x1F) { PORTA=0x55; } else { PORTA=0xAA; } }
//file pustaka
//fungsi utama
//variabel lokal suhu bertipe unsigned char//Port A sebagai
output
//Port B sebagai input//ambil data dari Port B simpan di
variabel suhu//Port A diberikan nilai 00000000 biner//statemen if,
menyeleksi jika isi dari variabel suhu lebih dari 1F heksa maka
lakukan pernyataan didalam tanda { } Port A diberi nilai 55
heksaJika tidak maka Port A diberi nilai AA heksa
1.7.3. Statemen switch
Bentuk umum :
switch (ekspresi)
{
case nilai_1 : pernyataan_1;break;
case nilai_2 : pernyataan_2;break;
case nilai_3 : pernyataan_3;break;
. . . . . . .
default : pernyataan_default;break;
}
Pada pernyataan switch, masing-masing pernyataan (pernyataan_1
sampai dengan
pernyataan_default) dapat berupa satu atau beberapa perintah dan
tidak perlu berupa blok pernyataan.
Pernyataan_1 akan dikerjakan jika ekspresi bernilai sama dengan
nilai_1, pernyataan_2 akan
dikerjakan jika ekspresi bernilai sama dengan nilai_2, dan
seterusnya. Pernyataan_default bersifat
opsional, artinya boleh ada boleh tidak. Jika ada maka
pernyataan_default akan dikerjakan apabila
nilai ekspresi tidak ada yang sama satupun dengan salah satu
nilai_1, nilai_2, nilai_3 dan seterusnya.
Setiap akhir dari pernyataan harus diakhiri dengan break, karena
dipergunakan untuk keluar dari
pernyataan switch.
Kode Program Keterangan#include #include main()
//file pustaka
//fungsi utama
11
-
{ char x; PORTA=0x00; DDRA=0xFF; PORTD=0x00; DDRD=0x00;
x=PORTD; switch(x) { case 0: PORTA=0x01;break; case 1:
PORTA=0x02;break; case 2: PORTA=0x03;break; default :
PORTA=0xff;break; }
}
//variabel lokal x bertipe char//Port A sebagai output
//Port D sebagai input
//ambil data dari Port D simpan di variabel x
//Jika x bernilai 0 maka PA=0x01//Jika x bernilai 1 maka
PA=0x02//Jika x bernilai 2 maka PA=0x03//jika bukan 0,1,2 maka
PA=0xff
1.8. Perulangan (Looping) Pada Pemrograman Bahasa C
Perulangan merupakan bentuk yang sering ditemui di dalam suatu
program aplikasi. Di dalam
bahasa C, dikenal tiga macam perulangan, yaitu dengan
menggunakan statemen for, while, dan do-
while.
1.8.1. Struktur Perulangan For
Perulangan dengan for digunakan untuk mengulang statemen atau
satu blok statemen berulang
kali sejumlah yang ditentukan. Perulangan dengan statemen for
dapat berbentuk perulangan positif,
perulangan negatif, dan perulangan bersarang (nested loop).
Perulangan dengan for mempunyai bentuk umum sebagai berikut
:
for(Awal;Akhir;Peningkatan) statemen;
Awal adalah suatu ungkapan yang memberikan nilai awal suatu
variabel untuk perulangannya
(misalnya x=0 atau i=1). Variabel dalam ungkapan tsb dijadikan
penghitung untuk banyaknya
perulangan yang akan dilakukan.
Akhir adalah ungkapan yang memberikan nilai maksimal pada
variabel yang harus dipenuhi
supaya perulangan masih dapat terus dilakukan (misalnya x
- for(x=1;x
-
benar.
Contoh :
Kode Program Keterangan#include main() { int x=0; while(x
-
x++; } }
contoh 2 :
Kode Program#include #include void delay(void); main( ) {
PORTB=0x00; DDRB=0xFF;
unsigned char counter; PORTB=0; while(1) { PORTB=counter;
delay(); counter++; if(counter>=256) counter=0; } } void
delay(void) { long int x; while(x
-
do { Statemen-statemen; . . . . . . . . . . . . }while
(ekspresi)
Kode Program Keterangan#include #include void main(void) {
PORTA=0x00; DDRA=0x00;
unsigned char x=20; do { PORTA=x; x--; } while (x>0); }
//file pustaka
//fungsi utama
//variabel x bertipe unsigned char diisi nilai 20 desimal
Pernyataan didalam { } dieksekusi seama while bernilai benar
16
-
By : Agus04 (Asisten Mikrokontroler)Code Vision merupakan IDE
untuk mikrokontroller jenis AVR yang sudah dilengkapi
dengan compiler C. sebagai sebuah IDE code vision dilengkapi
dengan berbagai macam tools semisal Integrated ISP, Code Wizard(ini
merupakan fitur paling menarik dari code vision), Integrated
Compiler dan Integrated Editor sehingga memudahkan programmer dalam
membuat, mengkompile dan mendownloadkan ke target device. Meskipun
begitu Code Vision masih memiliki kelemahan, yaitu pada bagian
debugging, code vision tidak dilengkapi dengan integrated debugger
sehingga programmer mengalami kesulitan ketika akan mendebug
programnya.
Program yang kita buat dikelompokkan menjadi sebuah project yang
nantinya diletakkan pada Project Workspace. berikut adalah tampilan
GUI dari Code Vision.
Selanjutnya agar dapat membuat project baru kita memilih
File-New, sehingga muncul tampilan sebagai berikut
pilih project dan tekan OK selanjutnya akan muncul pilihan untuk
menggunakan Code Wizard atau tidak, nah disinilah letak ketangguhan
Code Vision yang sebenarnya, pilih YES
17
-
maka akan muncul window lagi sebagai berikut
pada bagian Chip pilihlah yang sesuai dengan IC yang anda
gunakan, pastikan juga kecepatan clocknya juga sesuai, jika sudah
klik tab Ports sehingga muncul tampilan sebagai berikut
AVR dilengkapi dengan internal buffer, tab ports ini berguna
untuk menentukan arah data, apakah data masuk ke mikro atau keluar
dari mikro, hal ini berbeda dengan MCS51 dimana programmer dapat
langsung saja menentukan kapan port berfungsi sebagai input dan
kapan sebagai output, pada AVR hal harus dilakukan dengan merubah
nilai register DDR., setelah menentukan konfigurasi port yang akan
kita pakai selanjutnya kita dapat menentukan konfigurasi yang lain
semisal UART, SPI, ADC sampai LCD, kita coba mulai dulu dari UART,
jika kalian klik tab USART akan muncul pilihan sebagai berikut
18
-
dari contoh konfigurasi diatas saya memilih konfigurasi UART
hanya dapat menerima data saja 9600bps dengan format 810, serta
interrupt Rx(mirip RI pada MCS51) juga ON, jadi data tersebut saya
proses di ISR, dengan panjang buffer 32 Byte, singkatnya dengan
Code Vision kalian tidak direpotkan dengan urusan inisialisasi
sehingga cukup mudah bukan? Selanjutnya kalian dapat juga
mengaktifkan fitur ADC yang dimiliki oleh AVR klik saja tab ADC
sehingga muncul pilihan sebagai berikut.
pilih clock yang paling cepat, kecepatan clock disini tergantung
konfigurasi kristal yang kalian masukan pada tab Chip. Mungkin
diantara semua fitur fitur AVR fitur ini dan fitur SPI lah yang
paling menarik, selanjutnya jika kita masih kurang fitur kalian
dapat mencoba fitur SPI hardware, SPI ini digunakan untuk
berkomunikasi dengan IC lain yang mensupport SPI semisal SEEPROM,
RTC, LCD dsb. Dengan SPI hardware programmer tidak direpotkan untuk
membuat protocol SPI sendiri, selain itu karena fitur ini
diintegrasikan secara hardware menjadikan MCU menjadi tidak
terbebani pada saat proses pengiriman data maupun penerimaan data
via SPI.
19
-
mode pengiriman data dapat kalian tentukan sendiri, tergantung
dari IC apa yang akan kalian ajak berkomunikasi via SPI, dalam
contoh diatas saya mengkonfigurasi SPI hardware dengan AVR sebagai
Master Device, Mode 0(baca keterangan di datasheet AVR), dengan
frekuensi SCK sekitar 5Mhz. ketika semua konfigurasi dirasa sudah
mencukupi pilihlah File-[Generate, Save and Exit].
anda akan dihadapkan pada pilihan untuk men-save project file,
code file pilihlah semuanya di-direktori yang sama agar memudahkan
jika kita ingin mengedit atau memindah project.
Selanjutnya pada IDE akan muncul Editor sebagai berikut, isi
teks pada editor merupakan hasil code generate dari code wizard.
Coba kalian cari dimana void main pada sourcecode kalian, didalam
void main kalian akan menemukan inisialisasi dari code wizard yang
sudah kalian konfigurasi sebelumnya, jangan ubah apapun pada bagian
inisialisasi tersebut jika kalian sudah yakin akan kemampuan code
wizard. Nantinya di sinilah kalian mengetikkan program kalian.
Berhenti dan ketiklah didalam main program anda
20
-
variable bmp adalah array hasil konversi dari file bmp, kalian
dapat menggenerate array ini dari program bmp2array, nanti akan
saya bagikan pada saat praktikum. Pastikan juga library pcf8833.h
dan pcf8833.lib(nanti dikasi pada waktu praktikum) sudah terletak
pada direktori workspace.pilih Setting-Programmer
pastikan kabel ISP yang digunakan adalah STK200
jika sudah tekan OK, selanjutnya pilih Project-Configure
21
-
lalu pilih tab After Build
contreng Program the Chip, jangan mengubah settingan yang lain
kalo tidak ingin kenapa-napa tekan OK(buat yang pake resolusi
1024x768 kebawah geser window ke atas sampai tombol OK kelihatan).
Lalu tekan SHIFT+F9 sehingga muncul windows sebagai berikut.
22
-
pilih Program the chip untuk memulai memprogram AVR, pastikan
kabel ISP sudah menancap pada tempatnya.
23