Dasar Pemrograman ATmega8535
Prosedur umum untuk memprogram ATmega8535 secara berurutan adalah :
1. Menuliskan listing program menggunakan bahasa tingkat pemrograman tingkat tinggi (assembler, C, Basic, Pascal, dll)
2.
Mengkompail program ke dalam set instruksi ATmega8535 menggunakan
software compiler (WinAVR, GCC, CVAVR, BASCOM, AVR-Studio, dll)
3.
Memasukkan file hasil proses compile atau make ke dalam IC ATmega8535
menggunakan software downloader atau chip programmer (Ponyprog, CVAVR,
USB-Downloader, dll). Biasanya file ini berekstensi .hex atau .bin.
4. IC ATmega8535 telah terprogram dan siap digunakan
Dalam
praktikum ini digunakan bahasa C sebagai bahasa pemrograman dan
Codevision AVR (CVAVR) sebagai compiler. CVAVR dipilih karena tersedia
dalam versi bajakan (hehehe…) dan memiliki fasilitas Code Wizard yang
sangat membantu. Software chip programmer menggunakan CVAVR standard V
1.24, Ponyprog2000 atau Universal ISP Programmer V 1.04, tergantung mode
download, menggunakan port paralel atau port USB.
Jika
menggunakan PC dengan fasilitas port paralel, pemrograman dapat
dilakukan langsung menggunakan CVAVR. Sebelumnya dibuat dulu kabel
downloader, untuk menghubungkan port paralel PC dengan port SPI (Serial
Peripheral Interface) pada mikrokontroler.
Skema Kabel Downloader Paralel
Jika
pemrograman menggunakan laptop, yang hanya mengandalkan USB, maka harus
dipakai peralatan downloader via port USB, seperti AVRdoper,
USB-downloader, dll.
Langkah untuk menghasilkan file .hex dengan menggunakan CVAVR secara umum adalah :
1. Membuat Project baru, diberi nama.
2. Membuat file Source baru, dalam bahsa C, edit, simpan.
3. Hubungkan/koneksikan file Source dengan Project yang ada.
4. Lakukan proses make (shift+F9) untuk membuat file .hex.
5. Jika ada yang salah, dikoreksi sampai berhasil
FASILITAS DASAR INPUT-OUTPUT
Fasilitas
input/output merupakan fungsi mikrokontroller untuk dapat menerima
sinyal masukan (input) dan memberikan sinyal keluaran (output). Sinyal
input maupun sinyal output adalah berupa data digital 1 (high, mewakili
tegangan 5 volt) dan 0 (low, mewakili tegangan 0 volt). Mikrokontroller
ATMEGA8535 memiliki 4 buah PORT 8 bit bidirectional yang dapat
difungsikan sebagai PORT input maupun PORT output yaitu PORTA, PORTB ,
PORTC, dan PORT D. Register digunakan untuk mengatur fungsi dari pin-pin
pada tiap port. Register dapat dianalogikan sebagai kumpulan switch
on/off yang digunakan untuk mengaktifkan fungsi apa yang akan dipakai
dari port mikrokontroller. Pada setiap port pin terdapat 3 buah register
8 bit: DDRxn, PORTxn, dan PINxn.
Register
DDRxn digunakan untuk menentukan arah dari pin yang bersangkutan. Jika
DDRxn diberikan nilai 1 (high), maka pin digunakan sebagai output. Jika
DDRxn diberikan nilai 0 (low), maka pin difungsikan sebagai input.
Register PORTxn digunakan untuk mengaktifkan pull-up resistor (pada saat
pin difungsikan sebagai input), dan memberikan nilai keluaran pin
high/low (pada saat difungsikan sebagai output). PINxn merupakan
register yang berfungsi untuk mengetahui keadaan tiap-tiap pin pada
mikrokontroller. Register ini digunakan untuk membaca keadaan pin pada
saat difungsikan sebagai input.
Rangkaian Output LED dan Input Tombol
Percobaan
pertama adalah menyalakan LED sesuai dengan pola tertentu. Sesuai
skema, LED dikonfigurasikan dalam posisi SINK, artinya LED menyala jika
port yang bersesuaian diberi logika 0 (tegangan 0 volt atau dianggap
ground). Demikian halnya dengan saklar tombol. Jika ditekan, maka port
yang bersesuaian akan terhubung ke ground.
Tugas : menyalakan LED yang terhubung ke port B, selang seling ON dan OFF dimulai dari port B yang paling besar (PORT B.7)
Penyelesaian :
1. Konfigurasikan PORT B sebagai keluaran
2. Kirimkan urutan bilangan 1 0 1 0 1 0 1 0
Pelaksanaan tanpa menggunakan CodeWizard AVR:
1. Hubungkan PC dengan minimum system 8535 melalui port ISP. Nyalakan catu daya.
2.
Buka Codevision AVR, lakukan konfigurasi chip programmer. Pilih menu
Setting>>Programmer, lalu pilih type Kanda System STK200+/300.
3. Pilih menu File>>New, pilih Project.
4. Jika ditawari untuk menggunakan CodeWizardAVR, pilih No saja dulu.
5. Beri nama project baru dengan nama “kenalan” (tanpa “)
6. Buat file source C. Pilih menu File>> New, pilih Source.
7. Ketikkan listing seperti ini.
#include
void main(void)
{
DDRB=0xFF;
PORTB=0xFF;
while(1)
{
PORTB=0xAA;
}
}
8. Simpan dulu file C nya. Beri nama “nocw” saja.
9.
Lakukan konfigurasi project. Pilih menu Project>>Configure. Tekan
tombol Add, lalu pilih file dengan nama “nocw”. Pilih tab C Compiler.
Pada pilihan Chip pilih Atmega8535. Ubah Clock menjadi 4 MHz. Lalu pilih
tab After Make, centang pilihan Program the Chip. Setelah semua
selesai, klik OK.
10. Simpan dulu filenya.
11.
Lakukan compile dengan menekan shift+F9. Jika tidak ada pesan error
atau peringatan, maka klik Program. Tunggu sebentar, semoga tidak ada
kesalahan teknis.
12. Amati keluaran LED pada sismin.
Pelaksanaan menggunakan CodeWizard AVR:
1. Hubungkan PC dengan minimum system 8535 melalui port ISP. Nyalakan catu daya.
2.
Buka Codevision AVR, lakukan konfigurasi chip programmer. Pilih menu
Setting>>Programmer, lalu pilih type Kanda System STK200+/300.
3. Pilih menu File>>New, pilih Project.
4. Jika ditawari untuk menggunakan CodeWizardAVR, pilih Yes.
5. Pada tab Chip, pilih 8535 dengan clock 4 MHz.
6.
Pilih tab Ports, lalu pilih tab Port B. Setelah itu klik semua pilihan
di bawah tulisan Data Direction dari In berubah menjadi Out. Klik juga
semua pilihan di bawah tulisna Pull-up/Output Value dari 0 menjadi 1.
7. Pilih menu File>>Generate, save and exit.
8. Beri nama sourcenya dengan nama withcw
9. Beri nama projectnya dengan nama kenalan2. juga file cwp-nya.
10.
Lihatlah, program awal sudah dibuatkan. Scroll ke bawah, amati tulisan
DDRB dan PORT B. Bandingkan nilainya dengan listing program sebelumnya.
Sama …
11. Scroll lagi ke bawah. Cari tulisan //place your code here. Di bawahnya tuliskan perintah PORTB=0xAA;
12. Simpan dulu file C nya.
13.
Lakukan konfigurasi project. Pilih menu Project>>Configure. Lalu
pilih tab After Make, centang pilihan Program the Chip. Setelah semua
selesai, klik OK.
14.
Lakukan compile dengan menekan shift+F9. Jika tidak ada pesan error
atau peringatan, maka klik Program. Tunggu sebentar, semoga tidak ada
kesalahan teknis.
15. Amati keluaran LED pada sismin.
PENJELASAN
1. Semua port 8 bit memiliki indeks 0 s/d 7. Misalkan PORTB.0, PORTB.1 s/d PORTB.7
2. Indeks port yang paling besar merupakan bagian Most Significant Bit (MSB).
3. Indeks port yang paling kecil merupakan bagian Least Significant Bit (LSB).
4. Penulisan bilangan biner, yang paling kiri adalah MSB, dan sebaliknya.
5.
Biasakan menuliskan data dalam format Heksadesimal. Syntax-nya adalah
0xXX di mana XX merupakan bilangan heksadesimal. Misalkan dituliskan
PORTB=0xAA, artinya kita memasukkan data AA atau 1 0 1 0 1 0 1 0 ke port
B.
6.
DDRB=0xFF artinya kita memasukkan bilangan 1 1 1 1 1 1 1 1 ke Data
Direction Register B, yang membuat semua pin B menjadi output.
7.
PORTB=0xFF artinya kita memasukkan bilangan 1 1 1 1 1 1 1 1 ke Register
PORT B, yang membuat semua pin B menjadi berlogika high.
8. Perintah #include artinya
kita menggunakan file Header mega8535.h yang berisi perintah-perintah
yang dapat dikenali oleh compiler. Nanti kita akan menggunakan
header-header lainnya.
9. void main(void) menunjukkan program utama.
10.
Tulisan yang berada di belakan tanda // dan berwarna biru dianggap
sebagai komentar, dan tidak dijalankan dalam program. Demikian juga
tulisan di antara tanda /* …. */
11. while (1) artinya adalah looping yang tanpa henti.
LATIHAN 1. LAMPU BERKEDIP
Masukkan listing berikut ini ke dalam 8535.
#include
#include
void main()
{
DDRB=0xFF;
while(1)
{
PORTC=0;
delay_ms(1000);
PORTC=0xFF;
delay_ms(1000);
}
}
PENJELASAN
1. Pada program di atas, digunakan file header untuk mengijinkan digunakannya perintah/fungsi delay_ms(1000).
2. Perintah ini artinya melakukan delay/penundaan dalam satuan milidetik, sebanyak data yang dimasukkan dalam (…).
3. Agar lama delaynya akurat, maka setting clock pada 8535 harus persis sama dengan nilai osilator kristal yang dipasang.
TIPE DATA
Tipe data yang dapat dioperasikan dalam C untuk aplikasi mikrokontroler adalah :
1. byte. Mulai 0 s/d 255 (8 bit)
2. char. Mulai -128 s/d 127 (8 bit)
3. unsigned. Sama dengan byte. (8 bit)
4. int. Mulai -32768 s/d 32767 (16 bit)
5. Unsigned int. Mulai 0 s/d 65535 (16 bit)
6. long int (int versi 32 bit)
7. float dan double mulai 1,175e-38 s/d 3,402e38 (32 bit)
VARIABEL
Variabel
Global, digunakan di seluruh program. Dideklarasikan di luar fungsi, di
bagian paling atas. Saat program berjalan, jika tidak ditentukan, akan
bernilai 0. Variabel Lokal, digunakan secara lokal di dalam fungsi
tertentu. Dideklarasikan di dalam fungsi tersebut, dan tidak
diinisialisasikan pada awal program berjalan. Variabel dalam bentuk
Array, indeks paling kecilnya adalah 0.
OPERATOR ARITMATIKA
* Multiplication x*y kalikan x dengan y
/ Division x/y bagi x dengan y
% Modulo x%y sisa x dibagi oleh y
+ Addition x+y jumlahkan x dan y
- Subtraction x-y Kurangkan y dari x
++ Increment x++ Increment x setelahnya
-- Decrement --x Decrement x sebelumnya
- Negation -x Kalikan x dengan –1
OPERATOR LOGIKA.
> Greater than x>y 1 jika terpenuhi
>= Greater than or equal to x>=y 1 jika terpenuhi
< Less than x<=
Less than or equal to x<=y 1 jika terpenuhi == Equal to x==y 1 jika
sama != Not equal to x!=y 1 jika tidak sama ! Logical NOT !x 1 jika x
adalah 0 && Logical AND x&&y 0 jika x atau y ada yang 0
|| Logical OR x||y 0 jika x dan y adalah 0 OPERATOR BITWISE ~ Bitwise
complement ~x Mengubah 1 jadi 0 dan sebaliknya NOT & Bitwise AND
x&y AND Bitwise antara x dan y | Bitwise OR x|y OR Bitwise x dan y ^
Bitwise exclusive OR x^y XOR Bitwise << Left shift x<<2
geser ke kiri 2 posisi bit >> Right shift x>>3 geser ke
kanan3 posisi bit
Nb. Syntax variabel = variabel & data dapat dituliskan variabel &= data
KONTROL ALIRAN
Struktur if – else
if (expression)
statement 1
else
statement2
artinya jika expression bernilai true, statement 1 dikerjakan. Kalau tidak statement 2 dikerjakan.
Struktur – while
while(expression)
{
Statement
}
artinya jika expression bernilai true, statement dikerjakan. Kalau false, selesai.
Struktur for –
For(expression1; expression2; expression3)
{
Statement
}
Expression1
adalah inisialisasi, Expression3 adalah operasi atau fungsi yang
dilakukan, Expression2 adalah pengujian. Selama Expression2 terpenuhi,
statement dikerjakan. Jika tidak, selesai.
LATIHAN 2. MEMBACA TOMBOL:
#include
#define tombol PIND
void main()
{
DDRB=0xFF;
DDRD=0x00;
PORTD=0XFF;
while(1)
{
if((tombol&0x01)==0) PORTB=0x55;
if((tombol&0x02)==0) PORTB=0xAA;
if((tombol&0x04)==0) PORTB=0x00;
if((tombol&0x08)==0) PORTB=0xFF;
}
}
PENJELASAN :
1. Tombol dipasang di PORTD. Jika ditekan berlogika 0.
2. Lampu LED dipasang di PORTB. Jika berlogika 0 akan menyala.
Tidak ada komentar:
Posting Komentar