Modul Trainer Atmega16
Modul Trainer Atmega16
www.kit-elektronik.com
085779405502
Mikrokontroler AVR merupakan salah satu jenis IC (integrated circuit) yang dapat diprogram
secara berulang-ulang. AVR dikelompokkan kedalam 4 kelas, yaitu ATtiny, keluarga AT90Sxx,
keluarga ATMega, dan keluarga AT86RFxx. Dari kesemua kelas yang membedakan satu sama
lain adalah ukuran onboard memori, on-board peripheral dan fungsinya. Dari segi arsitektur dan
instruksi yang digunakan mereka bisa dikatakan hampir sama.
Arsitektur ATMega16
Fitur ATMega16
Mikrokontroler
Bahasa Program
Program yang digunakan pada mikrokontroler AVR dapat menggunakan bahasa Assembly,
bahasa basic, C, flowchart, dll.
#. Assembly
#. Basic
#. Flowchart
Software Flowcode
#. Komputer digunakan untuk membuat program dan merubah file tersebut menjadi
ekstension heksadesimal (.Hex).
#. ISP (In System Programming) adalah pengisian memori program langsung pada rangkaian
peralatan, tidak perlu menggunakan alat khusus untuk mengisi memori program . Interface
antara computer dan mikrokontroler yang digunakan untuk proses download adalah LPT, RS232
maupun USB.
#. Mikrokontroler berfungsi sebagai downloader yang akan menyimpan data dari komputer ke
flash memori.
Start A
End
Assemble / Compile
Bascom AVR merupakan software editor dan simulator mikrokontroler keluarga AVR
dengan bahasa basic. Software ini dikembangkan oleh mcs electronics. Untuk mendapatkan
versi terbaru software ini dapat di unduh dari http://www.mcselec.com. Software bascom avr
yang diunduh merupakan versi evaluasi dengan maksimum memori listing program sebesar
4Kbyte.
Setelah file di download, jalankan file yang berekstensi .exe dengan cara double klick, yang akan
tampak gambar seperti di bawah ini:
Klik Next untuk melanjutkan instalasi yang diikuti dengan munculnya jendela info Licence Agreement.
Baca instruksi, kemudian pilih I accept the agreement dan tekan tombol Next untuk melanjutkan
instalasi.
Jika direktori sudah ada, yang dikarenakan pernah menginstal versi yang lama, maka akan muncul
peringatan seperti berikut:
Pilih lokasi untuk meletakkan shortcuts. Tekan tombol Next untuk melanjutkan instalasi.
Buat program baru dengan memilih File New dan simpan program dengan memilih File
Save seperti gambar dibawah.
Pilih Program Compile untuk menghasilkan file dengan ekstension .hex yang akan di download ke
dalam mikrokontroler.
Hubungkan kabel usb downloader ke port usb pada PC/netbook/laptop sehingga akan tampil
seperti gambar di bawah ini.
Pilih Install from a list of specific location (advanced) kemudian pilih Next sehingga akan tampil
seperti gambar di bawah.
Hubungkan kabel usb rangkaian usb downloader pada port usb PC/netbook/laptop sehingga
akan terdengar suara beep dari PC/netbook/laptop yang menandakan bahwa driver usb
downloader telah berhasil terkoneksi. Atau bisa juga dengan membuka control panel
System Hardware Device Manager (seperti proses instalasi driver USBASP downloader).
Kemudian hubungkan konektor pada usb downloader ke rangkaian downloader ATMEGA16
seperti gambar di bawah ini.
Untuk mendownload program pilih menu Load Flash cari file yang akan di download Open
Tipe Data
Tipe data merupakan bagian program yang paling penting karena sangat berpengaruh pada
program. Pemilihan tipe data yang tepat maka operasi data menjadi lebih efisien dan efektif.
No Tipe Jangkauan
1 Bit 0 atau 1
2 Byte 0 – 255
4 Word 0 – 65535
8 String >254 by
Konstanta
Konstanta merupakan suatu nilai dengan tipe data tertentu yang tidak dapat diubah-ubah selama
proses program berlangsung. Konstanta harus didefinisikan terlebih dahulu diawal program.
Variabel
Variabel adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu nilai tertentu di
dalam proses program yang dapat diubah-ubah sesuai dengan kebutuhan. Nama dari variable
terserah sesuai dengan yang diinginkan namun hal yang terpenting adalah setiap variabel
diharuskan :
1. Terdiri dari gabungan huruf dan angka dengan karakter pertama harus berupa huruf, max
32 karakter.
2. Tidak boleh mengandung spasi atau symbol-simbol khusus seperti : $, ?, %, #, !, &, *, (,
), -, +, = dan lain sebagainya kecuali underscore.
3. Deklarasi
Deklarasi Variabel
Deklarasi Konstanta
Deklarasi Fungsi
Fungsi merupakan bagian yang terpisah dari program dan dapat dipanggil di manapun di dalam
program. Fungsi dalam Bahasa Basic ada yang sudah disediakan sebagai fungsi pustaka seperti
print, input data dan untuk menggunakannya tidak perlu dideklarasikan.
Deklarasi buatan
Fungsi yang perlu dideklarasikan terlebih dahulu adalah fungsi yang dibuat oleh programmer.
Bentuk umum deklarasi sebuah fungsi adalah :
Operator
Operator Penugasan
Operator Aritmatika
* : untuk perkalian
/ : untuk pembagian
+ : untuk pertambahan
- : untuk pengurangan
Operator hubungan digunakan untuk membandingkan hubungan dua buah operand atau sebuah
nilai / variable, misalnya :
= ’Equality X = Y
Operator Logika
Operator logika digunakan untuk membandingkan logika hasil dari operator-operator hubungan.
Operator logika ada empat macam, yaitu :
AND ‘Conjunction
OR ‘Disjunction
XOR ‘Exclusive or
Operator Bitwise
Operator bitwise digunakan untuk memanipulasi bit dari data yang ada di memori. Operator
bitwise dalam Bahasa Basic :
Pernyataan ini digunakan untuk melakukan pengambilan keputusan terhadap dua buah bahkan
lebih kemungkinan untuk melakukan suatu blok pernyataan atau tidak. Konstruksi penulisan
pernyatan IF-THEN-ELSE-END IF pada bahasa BASIC ialah sebagai berikut:
Setiap penggunaan pernyataan IF-THEN harus diakhiri dengan perintah END IF sebagai akhir
dari pernyatan kondisional.
Pernyataan ini digunakan untuk melakukan pengambilan keputusan terhadap banyak kondisi.
Konstruksi penulisan pernyatan SELECT-CASE-END SELECT pada bahasa BASIC ialah
sebagai berikut:
DO…LOOP
Perintah do…loop digunakan untuk mrmbuat program perulangan, ibarat arus dalam satu
loop tertutup yang selalu berputar terus menerus. Untuk membatasi perulangan dalam
perintah do…loop dapat digunakan do…loop until. Berikut sintaks penulisannya.
DO
<blok pernyataan>
LOOP
Dan ketika kita ingin membatasi perulangannya maka sintaks penulisannya sebagai berikut:
DO
<blok pernyataan>
FOR…NEXT
Sama seperti do…loop, perintah for…next digunakan untuk membuat perulangan. Namun
pada perintah for…next nilai awal, akhir dan tingkat kenaikan dalam proses perulangannya
bisa kita tentukan. Berikut sintaks penulisannya:
NEXT
GOSUB
Dengan perintah GOSUB maka program akan melompat ke subrutin lalu menjalankan
program dalam subrutin tersebut hingga return. Perintah return akan menggembalikan
program tersebut pada titik sebelum program tersebut melompat ke subrutin. Berikut contoh
pemakaiannya:
PortA =&HFF
GOSUB flipflop
END
Flipflop:
PortA =&HFF
Wait 1
PortA =&H00
Wait1
RETURN
GOTO
Perintah goto hampir sama dengan perintah GOSUB namun pada perintah GOTO tidak
memerlukan perintah return, sehingga programnya tidak akan kembali ke titik dimana
perintah GOTO berada. Berikut sintaks penulisannya:
GOTO label
Label:
……
III. Materi
Mikrokontroler AVR ATMEGA 16 memiliki 4 buah port yang terdiri dari Port A, Port B,
Port C dan Port D Masing-masing port terdiri dari 8 bit, sehingga mikrokontroler ATMEGA 16
memiliki total 32 bit yang dapat digunakan baik sebagai input maupun output. Untuk input
misalnya menggunakan push button, sensor infra merah, ultrasonik, sensor suhu, LDR dan lain-
lain. Sedangkan untuk output adalah LED, motor DC, motor stepper, relay, dan lain-lain.
Percobaan kali ini pada trainer mikrokontroler ATMEGA 16 menggunakan Port D untuk
output LED. Led pada modul 8 led akan menyala jika output mikrokontroler pada Port D logika 0
(LOW) dan akan mati jika logika 1 (HIGH).
9 +5V +5V
Buka software BASCOM AVR dan tulislah program di bawah ini. Kemudian pada BASCOM AVR
pilih Program Compile (F7), sehingga program yang dibuat tidak ada error dan menghasilkan
file heksadesimal (ekstension hex). Kemudian upload program menggunakan software progISP.
Program_led1 :
$regfile = "m16def.dat"
$crystal = 12000000
$regfile = "m16def.dat"
$crystal = 12000000
Config Portd.4 = Output
Config Portd.5 = Output
Do
Reset Portd.4
Waitms 500
Reset Portd.5
Waitms 500
Set Portd.5
Waitms 500
Set Portd.4
Waitms 500
Loop
End
Program_led3 :
$regfile = "m16def.dat"
$crystal = 12000000
Portd = &B00000000
Waitms 1000
Portd = &B11111111
Waitms 1000
Loop
End
Program_led5
$regfile = "m16def.dat"
$crystal = 12000000
Config Portd = Output
Portd = &B11111110
Wait 1
Dim I As Byte
Do
For I = 1 To 8
Rotate Portd , Left
Wait 1
Next
Loop
End
III. Materi
Buzzer adalah indikator bunyi/suara yang biasa digunakan jika ada keadaan bahaya
seperti ada kebakaran. Untuk mengaktifkan buzzer, mikrokontroler atmega 16 pada portC.1
akan memberikan output LOW (0). Jika PortC.1 memberikan output HIGH (1) maka buzzer akan
off.
Motor Listrik DC atau DC Motor adalah suatu perangkat yang mengubah energi listrik
menjadi energi kinetik atau gerakan (motion). Pada rangkaian dibawah motor dc akan aktif jika
mikrokontroler atmega 16 pada portC.0 mengeluarkan output HIGH (1) dan akan mati jika
mengeluarkan output LOW (0).
3 +5V +5V
4 Gnd Gnd
Program_buzzer :
$regfile = "m16def.dat"
$crystal = 12000000
Config PortC.1 = Output 'mendefinisikan portc.0 sebagai output
Buzzer alias portC.1 'nama lain portC.1=Buzzer
Do 'perintah do - loop memerintahkan program
'untuk looping terus menerus
set buzzer 'buzzer on
Waitms 500 'waktu tunda (dapat dirubah)
reset buzzer 'buzzer off
Waitms 500
Loop
End 'akhir program
Program_motordc :
$regfile = "m16def.dat"
$crystal = 12000000
Config Portc.0 = Output 'mendefinisikan portc.0 sebagai output
Motor alias portc.0 'nama lain portc.0=Buzzer
Do 'perintah do - loop memerintahkan program
'untuk looping terus menerus
set motor 'motor on
Waitms 4000 'waktu tunda (dapat dirubah)
reset motor 'motor off
Waitms 4000
Loop
End 'akhir program
III. Materi
Rangkaian input bisa terdiri dari push button, limit switch, sensor infra merah, LDR,
sensor suhu, ultrasonik, dan lain-lain. Fungsi rangkaian input adalah mendeteksi kondisi pada
suatu keadaan yang akan menyebabkan mikrokontroler akan memproses data untuk
menggerakkan output (LED, motor DC, sevent segment, motor stepper, dll). Sebagai contoh
yaitu sensor infra merah yang mendeteksi suatu benda sehingga LCD akan counter up / down.
Pada trainer mikrokontroler ATMEGA 16 inputnya hanya push button. Push button pada trainer
dapat digantikan dengan sensor yang lain sesuai dengan kebutuhan.
Berdasarkan gambar rangkaian, jika push button ditekan maka akan memberikan logika
0 (ground) ke mikrokontroler ATMEGA 16. Push button pada hardware rangkaian terletak pada
portA.4 , portA.5 , portA.6 dan portA.7
5 +5V +5V
6 Gnd Gnd
4 PC.3 Out.15(LED3)
7 +5V +5V
8 Gnd Gnd
$regfile = "m16def.dat"
$crystal = 12000000
Config Portc.2 = Output 'mendefinisikan portc.2 sebagai output
Mulai:
Set Porta.4 'mengaktifkan logika 1 padainput porta.4
Do
If Inp1 = 0 Then 'jika inp1 ditekan maka led1 menyala
Reset Led1 'led1 on
Waitms 200
Else
Set Led1 'jika inp1 tidak ditekan led1 off
Waitms 200
End If
Loop
End
Program_Inp2 :
$regfile = "m16def.dat"
$crystal = 12000000
Config Portc.2 = Output 'mendefinisikan portc.2 sebagai output
Config Portc.3 = Output 'mendefinisikan portc.3 sebagai output
Config Portc.4 = Output 'mendefinisikan portc.4 sebagai output
Config Portc.5 = Output 'mendefinisikan portc.5 sebagai output
Mulai:
Set Porta.4 'mengaktifkan logika 1 pada input porta.4
Set Porta.5 'mengaktifkan logika 1 pada input porta.5
Do
If Inp1 = 0 Then 'jika inp1 ditekan maka semua led on
Reset Led1 'led1 on
Reset Led2 'led2 on
Reset Led3 'led3 on
Reset Led4 'led4 on
Waitms 200
Else
End If
Program_Inp3 :
$regfile = "m16def.dat"
$crystal = 12000000
Config Portc.0 = Output 'mendefinisikan portc.0 sebagai output
Config Portc.1 = Output 'mendefinisikan portc.1 sebagai output
Config Portc.2 = Output 'mendefinisikan portc.2 sebagai output
Config Portc.3 = Output 'mendefinisikan portc.3 sebagai output
Config Portc.4 = Output 'mendefinisikan portc.4 sebagai output
Config Portc.5 = Output 'mendefinisikan portc.5 sebagai output
Mulai:
Set Porta.4 'mengaktifkan logika 1 pada input porta.4
Set Porta.5 'mengaktifkan logika 1 pada input porta.5
Set Porta.6 'mengaktifkan logika 1 pada input porta.6
Set Porta.7 'mengaktifkan logika 1 pada input porta.7
Do
If Inp1 = 0 and Inp2 = 0 Then 'jika inp1 dan Inp2 (gerbang AND) ditekan led on
Reset Led1 'led1 on
Reset Led2 'led2 on
Reset Led3 'led3 on
Reset Led4 'led4 on
Waitms 200
Else
set Led1 'led1 off
set Led2 'led2 off
set Led3 'led3 off
set Led4 'led4 off
Waitms 200
End If
If Inp3 = 0 or Inp4 = 0 Then 'jika inp3 atau Inp4 (gerbang OR) ditekan
'maka buzzer dan motor on
Reset buzzer ‘buzzer on (logic LOW / Reset)
Set motor ‘motor on (logic HIGH / Set)
Waitms 200
Else
Set buzzer ‘buzzer off (logic HIGH / Set)
reset motor ‘motor off (logic LOW / Reset)
Waitms 200
End If
Loop
End
III. Materi
LCD (Liquid Crystal Display atau dapat di bahasa Indonesia-kan sebagai tampilan Kristal
Cair )adalah suatu jenis media tampilan yang menggunakan kristal cair sebagai penampil utama.
LCD Karakter adalah LCD yang tampilannya terbatas pada tampilan karakter, khususnya
karakter ASCII (seperti karakter-karakter yang tercetak pada keyboard komputer). Jenis LCD
karakter yang beredar di pasaran biasa dituliskan dengan bilangan matriks dari jumlah karakter
yang dapat dituliskan pada LCD tersebut, yaitu jumlah kolom karakter dikali jumlah baris
karakter. Sebagai contoh, LCD16X2, artinya terdapat 16 kolom dalam 2 baris ruang karakter,
yang berarti total karakter yang dapat dituliskan adalah 32 karakter
1 PD.2 RS
2 PD.3 E
3 PD.4 DB4
4 PD.5 DB5
5 PD.6 DB6
6 PD.7 DB7
7 +5V +5V
8 Gnd Gnd
$regfile = "m16def.dat"
$crystal = 12000000
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
Config Lcdpin = Pin, E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Cls ‘clear screen -> bersihkan layar
Do
Upperline ‘baris atas
Lcd "selamat Datang" ‘tampilkan tulisan selamat datang
Lowerline ‘baris bawah
Lcd "kit-elektronik" ‘tampilkan tulisan kit-elektronik
Loop
End
Program_LCD2 :
$regfile = "m16def.dat"
$crystal = 12000000
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
Config Lcdpin = Pin , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
cls
Cursor Off
Do
Locate 1 , 5 'letakkan kursor pada baris 1 kolom 5 tulisan SMKN39
Lcd "SMKN 39"
Wait 1
Locate 2 , 5
Lcd "Jakarta" 'letakkan kursor pada baris 1 kolom 5 tulisan Jakarta
Wait 1
Cls
Wait 1
Loop
End
$regfile = "M16def.dat"
$crystal = 12000000
Dim x as byte ‘variabel x tipe data byte (0-255)
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
Config Lcdpin = Pin , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
cls
Cursor Off
Do
Upperline ‘lcd baris atas (kolom 1)
Lcd " SMKN 39 " ‘Menampilkan tulisan SMKN 39
Lowerline ‘lcd baris atas (kolom 2)
Lcd " Jakarta " ‘Menampilkan tulisan Jakarta
Waitms 500
For X = 1 To 16
Shiftlcd Left
Waitms 200
Next
For X = 1 To 32
Shiftlcd Right
Waitms 200
Next
Cls
Loop
End
III. Materi
Data ADC (Analog to Digital Converter) pada mikrokontroler atmega 16 sebesar 10 bit, Maka
data yang bisa dibaca adalah 0 – 1023 (210). Untuk melihat perubahan data adc pada lcd, maka
putarlah trimpotnya.
Hubungkan :
2 +5V +5V
3 Gnd Gnd
1 PD.2 RS
2 PD.3 E
3 PD.4 DB4
4 PD.5 DB5
5 PD.6 DB6
6 PD.7 DB7
7 +5V +5V
8 Gnd Gnd
Program_trimpot :
$regfile = "m16def.dat"
$crystal = 12000000
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
Config Lcdpin = Pin , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
cls
Cursor Off
'inisialisasi ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
III. Materi
Sensor api, LDR dan suhu LM35 menggunakan ADC untuk membaca data yang diterima dari
sensor.
3 +5V +5V
4 Gnd Gnd
1 PD.2 RS
2 PD.3 E
3 PD.4 DB4
4 PD.5 DB5
5 PD.6 DB6
6 PD.7 DB7
7 +5V +5V
8 Gnd Gnd
3 +5V +5V
4 Gnd Gnd
$regfile = "m16def.dat"
$crystal = 12000000
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
Config Lcdpin = Pin , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
cls
Cursor Off
'inisialisasi ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Cls
Do
Dataflame = Getadc(1) 'mengambil data adc dari trimpot simpan pada variabel
‘Dataadc
Locate 1 , 1
Lcd "Data Flame=" ; Dataflame 'tampilkan data dari variabel dataadc dan tampilkan
‘pada lcd
Waitms 300
If Dataflame > 500 Then 'jika data flame > 500 (mendeteksi api) maka buzzer on
Reset Buzzer
Wait 1
Else
Set Buzzer
End If
cls
Loop
III. Materi
Sensor api, LDR dan suhu LM35 menggunakan ADC untuk membaca data yang diterima dari
sensor.
Hubungkan :
2 +5V +5V
3 Gnd Gnd
1 PD.2 RS
2 PD.3 E
3 PD.4 DB4
4 PD.5 DB5
5 PD.6 DB6
6 PD.7 DB7
7 +5V +5V
8 Gnd Gnd
2 +5V +5V
3 Gnd Gnd
3 +5V +5V
4 Gnd Gnd
$regfile = "m16def.dat"
$crystal = 12000000
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
Config Lcdpin = Pin , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
cls
Cursor Off
'inisialisasi ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Cls
Do
Datalm35 = Getadc(3) 'mengambil data adc dari trimpot simpan pada variabel
‘Datalm35
Temp = Datalm35 * 5
Temp = Temp / 10
Locate 1 , 1
Locate 1 , 1
Lcd "SUHU = "
Locate 1 , 8
Lcd TEMP
Locate 1 , 11
Lcd Chr(94) 'kode ascii 94
Locate 1 , 12
Lcd "C"
Locate 1 , 13
Lcd " "
cls
Loop