Mudul Avr8535
Mudul Avr8535
Pengertian Mikrokontroller
Mikrokontroller hampir sama dengan computer , karena ada beberapa persaman antara
mikrokontroller dengan computer antara lain:
1. mempunyai CPU
2. Mempunyai memori (RAM dan ROM)
3. mempunyai I/O (input output)
perbedaan computer dan mikrokontroller:
1. mikrokontroller kecepatan operasimya dalam orde Mhz (12,24,40Mhz) sedangankan
kompouter pada orde GHz (2,5G)
2. CPU computer menjalankan program dalam ROM atau BIOS pada saat awal di hidupkan,
mikrokontroller menjalankan program pada ROM internal (MaskROM,Flash PEROM
atau Flash ROM). Sifatnya non-volatile, artinya tetap tersimpan walau tidak ada catu
daya.
3. RAM pada computer sangat besar (orde Giga) sedangkan pada mikro sangat kecil
(128byte,256byte)
4. I/O pada computer sangat rumit sedangkan pada mikrokontroler I/O bisa di akses per bit
Features
AVR High-performance and Low-power RISC Architecture
118 Powerful Instructions Most Single Clock Cycle Execution
32 x 8 General-purpose Working Registers
Up to 8 MIPS Throughput at 8 MHz
Peripheral Features
8-channel, 10-bit ADC
Programmable UART
Master/Slave SPI Serial Interface
Two 8-bit Timer/Counters with Separate Prescaler and Compare Mode
One 16-bit Timer/Counter with Separate Prescaler, Compare and
Capture Modes and Dual 8-, 9-, or 10-bit PWM
Programmable Watchdog Timer with On-chip Oscillator
On-chip Analog Comparator
1
Special Microcontroller Features
Power-on Reset Circuit
Real-time Clock (RTC) with Separate Oscillator and Counter Mode
External and Internal Interrupt Sources
Three Sleep Modes: Idle, Power Save and Power-down
Operating Voltages
VCC: 4.0 - 6.0V AT90S8535
VCC: 2.7 - 6.0V AT90LS8535
Speed Grades:
0 - 8 MHz for the AT90S8535
0 - 4 MHz for the AT90LS8535
AT90S8535 mikrokontroller CMOS 8-bit dengan AVR RISC (reduce instruction set
computer)Architecture dengan eksekusi instruction dalam 1 single clock cycle, AT90S8535
Kecepatan eksekusi bisa mencapai 1 MIPS per MHz
2
Gambar1. Arsitektur AT90S8535
3
PORT PADA AVR8535
Port A terdiri dari 8 bit dua arah I/O , bisa untuk input dan ouput , dan sudah tersedia pull up
resisitor dan dapat diaktifkan per bit. Output port A dapat memberikan arus sebesar 20 mA dan
dapat langsung dihubungkan dengan LED
Saat pin PA0 sampai PA7 sebagai input dan external pulled down ,akan menjadi
sourcing jika internal pull up diaktifkan.Port A juga dapat sebagai analog input
Port A merupakan pin 3 keadaan,port A akan aktif saat di reset walaupun clock tidak running
Port B terdiri dari 8 bit dua arah I/O , bisa untuk input dan ouput , dan sudah tersedia pull up
resisitor dan dapat diaktifkan per bit. Output port B dapat memberikan arus sebesar 20 mA dan
dapat langsung dihubungkan dengan LED
Saat pin PB0 sampai PB7 sebagai input dan external pulled down ,akan menjadi
sourcing jika internal pull up diaktifkan, Port B juga mempunyai fungsi yang lain akan
diterangkan lebih lanjut..Port B merupakan pin 3 keadaan,port B akan aktif saat di reset
walaupun clock tidak running
Port C terdiri dari 8 bit dua arah I/O , bisa untuk input dan ouput , dan sudah tersedia pull
up resisitor dan dapat diaktifkan per bit. Output port C dapat memberikan arus sebesar 20 mA
dan dapat langsung dihubungkan dengan LED. 2 pin port C dapat digunkan sebagai timer atau
counter
Port D terdiri dari 8 bit dua arah I/O , bisa untuk input dan ouput , dan sudah tersedia
pull up resisitor dan dapat diaktifkan per bit. Output port D dapat memberikan arus sebesar 20
mA dan dapat langsung dihubungkan dengan LED
4
Rangkaian minimum system AVR 8535
5
ARSITEKTUR DAN MEMORI ALOKASI AVR 8535
6
ATMEGA 8535 memiliki dua jenis memori, yaitu program memory dan data memory ditambah
satu fitur yaitu EEPROM memory untuk menyimpan data.
1. Program Memory
ATMEGA 8535 memiliki On-Chip In-System Reprogrammable Flash Memory untuk menyimpan
program. Untuk alasan keamanan, program memory dibagi menjadi dua bagian, yaitu Boot Flash
Section dan Application Flash Section. Boot Flash Section digunakan untuk menyimpan program
Boot Loader, yaitu program yang harus dijalankan pada saat AVR reset atau pertama kali
diaktifkan.
Application Flash Section digunakan untuk menyimpan program aplikasi yang dibuat user. AVR
tidak dapat menjalakan program aplikasi ini sebelum menjalankan program Boot Loader.
Besarnya memori Boot Flash Section dapat deprogram dari 128 word sampai 1024 word
tergantung setting pada konfigurasi bit di register BOOTSZ. Jika Boot Loader diproteksi, maka
program pada Application Flash Section juga sudah aman
memori SRAM pada ATMEGA 8535. Terdapat 608 lokasi address data memori. 96 lokasi
address digunakan untuk Register File dan I/O Memory sementara 512 aplikasi address lainnya
digunakan untuk internal data SRAM. Register file terdiri dari 32 general purpose working
register, I/O register terdiri dari 64 register.
2. EEPROM Data Memory
ATMEGA 8535 memiliki EEPROM 8 bit sebesar 512 byte untuk menyimpan data. Loaksinya
terpisah dengan system address register, data register dan control register yang dibuat khusus
untuk EEPROM. Alamat EEPROM dimulai dari $000 sampai $1FF.
7
ALU (Arithmatic Logic Unit) adalah processor yang bertugas mengeksekusi (eksekutor)
kode program yang ditunjuk oleh program counter.
Program Memori adalah memori Flash PEROM yang bertugas menyimpan program
(software) yang kita buat dalam bentuk kode-kode program (berisi alamat memori beserta
kode program dalam ruangan memori alamat tersebut) yang telah dicompile berupa
bilangan heksa atau biner
Program Counter (PC) adalah komponen yang bertugas menunjukkan ke ALU alamat
program memori yang harus diterjemahkan kode programnya dan dieksekusi. Sifat dari
PC adalah linier artinya menghitung naik satu bilangan yang bergantung alamat awalnya.
Misalnya jika isi PC 0x000 maka naik satu menjadi 0x001 yang berarti menyuruh ALU
mengeksekusi kode program yang berada pada alamat 0x001 program memori. Jika isi
PC dari 0x002 dipaksa (instruksi lompatan) 0x02A maka akan naik satu menjadi 0x02B
dan melakukan tugasnya begitu seterusnya.
32 General Purpose Working Register (GPR) adalah register file atau register kerja (R0-
R31) yang mempunyai ruangan 8-bit. Tugas GPR adalah tempat ALU melibatkan GPR.
GPR terbagi dua yaitu kelompok atas (R16-R31) dan kelompok bawah (R0-R15), di
mana kelompok bawah tidak bisa digunakan untuk mengakses data secara langsung
(imidiet) data konstan seperti instruksi assembly LDI, dan hanya bisa digunakan antar-
register, SRAM, atau register I/O (register port). Sedangkan kelompok atas sama dengan
kelompok bawah hanya mempunyai kelebihan dapat mengakses data secara langsung
(imidiet) data konstan. Kelebihan lain dari GPR adalah terdapat register pasangan yang
digunakan untuk pointer (penunjuk ke alamat tertentu XH:XL(R27:R:26),
YH:YL(R29:R28), ZH:ZL(R31:R30), hanya register pointer Z yang dapat digunakan
untuk menunjuk ke alamat memori program.
Static Random Access Memory (SRAM) adalah RAM yang bertugas menyimpan data
sementara sama seperti RAM pada umumnya mempunyai alamat dan ruangan data.
Alamat terakhir dari SRAM bergantung pada kapasitas SRAM, biasanya sudah
didefinisikan pada file header dengan nama RAMEND, jadi kita tidak perlu mengingat
alamat SRAM yang terakhir, pakai saja RAMEND. RAMEND biasanya digunakan untuk
membuat stack (alamat terakhir dari SRAM). Dalam bahasa C, pembuatan stack menjadi
tanggungan compiler
8
I/O memory terdiri 64 addresses sebagai peripheral control register,timer/counter.A/D
converters dan fungsi I/O .I/O memory dapat di akses secara langsung sebagai sebagai register
file dari $20-$5F
Register R26 s/d R31 mempunyai fungsi tambahan selain sebagai register umum (GPR)
Register ini sebagai address pointer untuk indirect adrresing data space.
9
Cara-cara addressing:
1.Direct single register addressing
10
Alamat pada operands terdiri dari 6 bit instruction word n adalah tujuan atau sumber register address
11
12
2.PROGRAMMING MICROCONTROLLER AVR8535
Tipe data merupakan bagian program yang paling penting karena tipe data mempengaruhi setiap
instruksi yang akan dilaksanakan oleh computer. Pemilihan tipe data yang tepat akan membuat operasi
No Tipe Jangkauan
1 Bit 0 atau 1
2 Byte 0 255
4 Word 0 65535
1.1. KONSTANTA
Konstanta merupakan suatu nilai yang tidak dapat diubah selama proses program berlangsung.
Konstanta nilainya selalu tetap. Konstanta harus didefinisikan terlebih dahulu di awal program. Konstanta
dapat bernilai integer, pecahan, karakter dan string.
C = 1.1.
13
1.2. VARIABLE
Variabel adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu nilai tertentu di dalam
proses program. Berbeda dengan konstanta yang nilainya selalu tetap, nilai dari suatu variable bisa
diubah-ubah sesuai kebutuhan. Nama dari suatu variable dapat ditentukan sendiri oleh pemrogram dengan
Terdiri dari gabungan huruf dan angka dengan karakter pertama harus berupa huruf..
Tidak boleh mengandung symbol-simbol khusus, kecuali garis bawah (underscore). Yang
termasuk symbol khusus yang tidak diperbolehkan antara lain : $, ?, %, #, !, &, *, (, ), -, +, = dsb
1.3. DEKLARASI
Deklarasi diperlukan bila kita akan menggunakan pengenal (identifier) dalam program. Identifier dapat
Contoh :
14
1.4.2. Deklarasi Konstanta
Fungsi merupakan bagian yang terpisah dari program dan dapat diaktifkan atau 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.
Fungsi yang perlu dideklarasikan terlebih dahulu adalah fungsi yang dibuat oleh programmer.
Contohnya :
1.4. OPERATOR
Operator Penugasan (Assignment operator) dalam Bahasa Basic berupa tanda sama dengan (=).
15
1.5.2. OPERATOR ARITMATIKA
.* : untuk perkalian
/ : untuk pembagian
+ : untuk pertambahan
- : untuk pengurangan
Catatan : operator % digunakan untuk mencari sisa pembagian antara dua bilangan.
Operator hubungan digunakan untuk membandingkan hubungan antara dua buah operand /sebuah
= Equality X=Y
16
1.5.4. Operator Logika
Jika operator hubungan membandingkan hubungan antara dua buah operand, maka operator
AND Conjunction
OR Disjunction
XOR Exclusive or
Contoh:A = 63 And 19
Operator bitwise digunakan untuk memanipulasi bit dari data yang ada di memori.
Contoh:
Dim a as Byte
17
A=1
Do
Print A
Shift A , Left , 1
Waitms 100
Loop
End
Dim a as Byte
A = 128
Do
Print A
Shift A , Right , 1
Waitms 100
Loop
End
Dim a as Byte
A = 128
Do
Print A
Rotate A , Right , 1
Waitms 100
Loop
End
18
Putar bit ke kiri
Dim a as Byte
A=1
Do
Print A
Rotate A , Left , 1
Waitms 100
Loop
End
Komentar program hanya diperlukan untuk memudahkan pembacaan dan pemahaman suatu program
(untuk keperluan dokumentasi program). Dengan kata lain, komentar program hanya merupakan
keterangan atau penjelasan program. Komentar program tidak akan ikut diproses dalam program (akan
diabaikan).
Contoh pertama :
kondisi dapat diibaratkan sebagai katup atau kran yang mengatur jalannya air. Bila katup terbuka maka air
akan mengalir dan sebaliknya bila katup tertutup air tidak akan mengalir atau akan mengalir melalui
tempat lain. Fungsi penyeleksian kondisi penting artinya dalam penyusunan Bahasa Basic, terutama untuk
19
1.7.1. STRUKTUR KONDISI IF.
Struktur if dibentuk dari pernyataan if dan sering digunakan untuk menyeleksi suatu kondisi tunggal. Bila
proses yang diseleksi terpenuhi atau bernilai benar, maka pernyataan yang ada di dalam blok if akan
Dalam struktur kondisi if.....else minimal terdapat dua pernyataan. Jika kondisi yang diperiksa bernilai
benar atau terpenuhi maka pernyataan pertama yang dilaksanakan dan jika kondisi yang diperiksa bernilai
salah maka pernyataan yang kedua yang dilaksanakan. Bentuk umumnya adalah sebagai berikut :
if(kondisi)
pernyataan-1
else
pernyataan-2
Contoh
Else 'alternative
END IF
20
1.7.3. STRUKTUR KONDISI CASE
Struktur kondisi switch....case....default digunakan untuk penyeleksian kondisi dengan kemungkinan yang
terjadi cukup banyak. Struktur ini akan melaksanakan salah satu dari beberapa pernyataan case
tergantung nilai kondisi yang ada di dalam switch. Selanjutnya proses diteruskan hingga ditemukan
pernyataan break. Jika tidak ada nilai pada case yang sesuai dengan nilai kondisi, maka proses akan
Select Case(kondisi)
case 1 : pernyataan-1;
break;
case 2 : pernyataan-2;
break;
.....
.....
case n : pernyataan-n;
break;
default : pernyataan-m
contoh
21
Case &B01001000 : Call Turnright110()
End Select;
1.7. PERULANGAN
Dalam Bahasa Basic tersedia suatu fasilitas yang digunakan untuk melakukan proses yang
berulangulang sebanyak keinginan kita. Misalnya saja, bila kita ingin menginput dan mencetak bilangan
dari 1 sampai 100 bahkan 1000, tentunya kita akan merasa kesulitan. Namun dengan struktur perulangan
proses, kita tidak perlu menuliskan perintah sampai 100 atau 1000 kali, cukup dengan beberapa perintah
saja. Struktur perulangan dalam Bahasa Basic mempunyai bentuk yang bermacam-macam.
Contoh Program 1 :
Incr A
Wend
Contoh Program :
22
Do 'begin a do..loop
Struktur perulangan for biasa digunakan untuk mengulang suatu proses yang telah diketahui jumlah
perulangannya. Dari segi penulisannya, struktur perulangan for tampaknya lebih efisien karena
susunannya lebih simpel dan sederhana. Bentuk umum perulangan for adalah sebagai berikut :
Contoh
For A = 1 To 10 Step 2
Print "This is A " ; A
Next A
Print "Now lets count down"
For C = 10 To -5 Step -1
Print "This is C " ; C
Next
11.ALIAS
Untuk mempermudah programing nama register diberui nama dengan suatu hardware, misalkan:
Tombol_1 alias PortA.0 nama lain dai PortA.0 adalah Tombol_1
Lampu alias PortC.0 nama lain dai PortC.0 adalah Lampu
23
PRAKTIKUM 1
-----Deklarasi Crystal---------
$crystal =11059200
-----Deklarasi header--------
$regfile =m8535.dat
------------------------------------
------deklarasi variabel-------
Dim led AS byte
---------------------------------
--------setting port c-------
Config Portc =output
------------------------------
---------program utama-------------
Do
24
Led =0
Portc = led
Loop
End
---------------------------------------
Pada praktikum 1 port c sebagai output dan menggunakan variabel led dan variabel tersebut diberi nilai
0 sehingga semua LED ON
PRAKTIKUM2
-----Deklarasi Crystal---------
$crystal =11059200
-----Deklarasi header--------
$regfile =m8535.dat
------------------------------------
------deklarasi variabel-------
Dim led AS byte
---------------------------------
--------setting port c-------
Config Portc =output
------------------------------
---------program utama-------------
Do
Led = 18
Portc = led
Loop
End M
---------------------------------------
25
Bit PORTC PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0
LOGIC 0 0 0 1 0 0 1 0
LED ON ON ON OFF ON ON OFF ON
25 : 2 = 12 sisa 1.
12 : 2 = 6 sisa 0.
6 : 2 = 3 sisa 0.
3 : 2 = 1 sisa 1.
1 : 2 = 0 sisa 1.
0 : 2 = 0 sisa 0. (end)
Nah, setelah didapat perhitungan tadi, pertanyaan berikutnya adalah, hasil konversinya yang
mana? Ya, hasil konversinya adalah urutan seluruh sisa-sisa perhitungan telah diperoleh, dimulai
dari bawah ke atas.
Maka hasilnya adalah 0110012. Angka 0 di awal tidak perlu ditulis, sehingga hasilnya menjadi
110012. Sip?
Sekarang kita beralih ke konversi bilangan biner ke desimal. Proses konversi bilangan biner ke
bilangan desimal adalah proses perkalian setiap bit pada bilangan biner dengan perpangkatan 2,
dimana perpangkatan 2 tersebut berurut dari kanan ke kiri bit bernilai 2o sampai 2n.
Langsung saja saya ambil contoh bilangan yang merupakan hasil perhitungan di atas, yaitu
110012. Misalkan bilangan tersebut saya ubah posisinya mulai dari kanan ke kiri menjadi seperti
ini.
26
1
Nah, saatnya mengalikan setiap bit dengan perpangkatan 2. Ingat, perpangkatan 2 tersebut
berurut mulai dari 2o sampai 2n, untuk setiap bit mulai dari kanan ke kiri. Maka :
1 > 1 x 2o = 1
0 > 0 x 21 = 0
0 > 0 x 22 = 0
1 > 1 x 23 = 8
Nah, bandingkan hasil ini dengan angka desimal yang saya ubah ke biner di awal tadi. Sama
bukan?
27
PRAKTIKUM 3
Berapa angka decimal yang harus diberikan kepada variable led agar seperti kondisi pada table dibawah
ini:
Bit PORTC PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0
LOGIC 1 0 1 1 0 0 1 0
LED OFF ON OFF OFF ON ON OFF ON
PRAKTIKUM 4
PEMROGRAMAN LED BERKEDIP dengan menggunakan perintah WAITMS ( second)
Ketik listing dibwah ini:
-----Deklarasi Crystal---------
$crystal =11059200
'-----Deklarasi header--------
$regfile ="m8535.dat" '
'------------------------------------
'------deklarasi variabel-------
Dim led1 AS byte
Dim led2 AS Byte
'---------------------------------
'--------setting port c-------
Config Portc =output
'------------------------------
'---------program utama-------------
led1= 255
Led2 = 0
Do
PortC =led1
28
Waitms 500
PortC =led2
Waitms 500
Loop
End
'---------------------------------------
ADA PERTANYAN????
PARKTIKUM 5
Pada praktikum 5 ini , menggunakan perintah ROTATELEFT dan ROTATE RIGHT, maka LED
pada PORTC akan bergeser ke kiri atau kekanan
$crystal = 11059200
$regfile = "m8535.dat"
Led alias Portc
Config Portc = Output
Led = 254
Do
Rotate Led , Right , 1
Waitms 200
Loop
End
Coba diganti dengan Rotate Led, left,1 kemudian coba diganti Rotate Led, left,2
Rotate ini biasa digunakan untuk aplikasi motor stepper
PARKTIKUM 6 ( latihan mandiri waktu 10 menit)
Buatlah program otomatis geser kiri dari PC0 sampai PC7, kemudian geser kanan dari PC7 ke PC0 secara
terus menerus
29
PRAKTIKUM 7
PEMROGRAMAN DENGAN TOMBOL
Dengan PORTC PC0 digunakan sebagai output PD.0 sebagai input tombol, PD.0 internal PULL UP aktif
'-------------------------------------------------------
'DEKLARASI HEADER
'-------------------------------------------------------
$regfile = "8535def.dat"
'-------------------------------------------------------
'DEKLARASI CRISTAL
'-------------------------------------------------------
$crystal = 11059200
Config Portd.0 = Input
Config Portc.0 = Output
Portd..0 = 1
Do
If Pind.0 = 0 Then
Portc.0 = 1
End If
Loop
End
30
PRAKTIKUM 8
Dengan PORTC PC0 digunakan sebagai output, PD0 sebagai ON dan PD1 sebagai OFF input tombol,
PD0 dan PD1 internal PULL UP aktif
Ketiklah Listing dibawah ini:
$regfile = "8535def.dat"
$crystal = 11059200
Config Portd.0 = Input
Config Portd.1 = Input
Config Portc.0 = Output
Portd.0= 1 aktif internal pullup
Portd.1 = 1; aktifan internal pull up
Do
If Pind.0 = 0 Then cek kondisi input port d.0
Portc.0 = 1
Elseif Pind.1 = 0 Thencek kondisi inpur portd.1
Portc.0 = 0
End If
Loop
End
31
PRAKTIKUM 8.1 Penggunaan Perintah SELECT CASE
32
PRAKTIKUM 9 . APLIKASI DENGAN 7 SEGMEN DISPLAY
Tampilan seven segment digunakan sebagai decoder dari bilangan Binary Coded
Decimal ( BCD ) ke 7 segment decoder. Untuk masukan ada 4 bit dan keluarannya
ada 7 bit yang ada pada tampilan 7 segment. Tampilan 7 segment adalah
komponen elekronika yang dapat menampilkan angka dari 0 sampai 9, bisa
menggunakan satu 7 segment atau dua 7 segment yang disesuaikan dengan
berapa karakter yang akan ditampilkan. Ada dua jenis tipe dari penampil 7 segment
ini, ada yang 7 segment dengan common anoda dan 7 segment dengan common
katoda. Pada common anoda akan aktif jika mendapat input low atau logika 0
sedangkan pada common katoda akan aktif jika mendapat input high atau logika
1.Gambar di bawah ini konfigurasi dari 7 segment:
33
PRAKTIKUM 9 . APLIKASI DENGAN 7 SEGMEN DISPLAY
Untuk aplikasi 7 segment ini menggunakan IC type MC14511B BCDtoseven segment
latch/decoder/driver
Dengan menggunakan perintah Makebcd untuk membuat data ke format BCD
X lebih kecil = 10 portA.0 = on= >> parkir kosong
X lebih besar = 20 portA.1 = on, porta A.0 = off >> tersedia
X lebih besar =30 portaA.2 = on, porta A.0= off, portA.1 = off >> full
'-------------------------------------------------------
'DEKLARASI HEADER
'-------------------------------------------------------
$regfile = "8535def.dat"
'-------------------------------------------------------
'DEKLARASI CRISTAL
'-------------------------------------------------------
$crystal = 11059200
Config Portc = Output
Config porta.0 =output
Dim X As Byte
X=0
Do
Portc = Makebcd(x)
Incr X
If X =>30 then
Porta.7 =1
elseIf x <30 then
Porta.7 =0
End if
34
If X = 10 Then X = 0
Waitms 1000
Loop
End
Ketika di atas 30 portA.0 ON .dibawah 30 off
35
If Pind.4 = 0 Then reset
Pb = 0
A=0
B=0
C=0
Porta = Makebcd(0)
Portc = &B1111_1000
End If
If Pind.2 = 0 Thenstart
Pb = 1
End If
If Pind.3 = 0 Thenstop
Pb = 0
End If
If Pb = 1 Then
Waitms 100
Incr A
Portc = &B1111_1011
Porta = Makebcd(a)
If A = 10 Then
A= 0
Porta = Makebcd(a)
Incr B
End If
If B < 60 Then
Portc = &B1111_1101
Porta = Makebcd(b)
End If
If B = 60 Then
Incr C
B=0
Portc = &B1111_1101
Portc = &B1111_1110
36
Porta = Makebcd(c)
End If
If C >= 99 Then
Portc = &B1111_1111
Porta = Makebcd(c)
End If
If C = 100 Then
Pb = 0
A= 0
B=0
C=0
End If
End If
Loop
37
PRAKTIKUM 13
Penggunaan KEY PAD 4x4 dengan menggunakan fungsi KBD dan select case pada BASCOM,
Keypad 4x4 merupakan suatu model keypad berukuran 4 kolom dan 4baris ,keypad ini berfungsi sebagai
input dalam aplikasi seperti pengaman digital , data logger , absensi, pengendali motor, robotic ,dll
38
Hubungan key pad 4x4 ke port mikrokontroller
39
Pada Praktikum kali ini menampilkan atau scaning keypad dan ditampilkan pada s7 segment
Ketiklah listing dibawah ini:
$regfile = "8535def.dat"
$crystal = 11059200
Dim B As Integer
Config Kbd = Portc
Config Porta = Output
Declare Sub Segment(byval Datae As Integer)
Do
B = Getkbd()
If B <> 16 Then Call Segment(b)
Loop
End
'-------------------------------------------------------
'Sub Rutin Seven Segment
'-------------------------------------------------------
Sub Segment()
Select Case Datae
40
Case 0 : Porta = Makebcd(1)
Case 1 : Porta = Makebcd(2)
Case 2 : Porta = Makebcd(3)
Case 3 : Porta = Makebcd(10)
End Select
End Sub
'-------------------------------------------------------
PRAKTIKUM 14 KEYPAD dengan fungsi sub program dan call sub program
$regfile = "8535def.dat"
41
$crystal = 11059200
'-------------deklarasi variabel-----------
Dim Data1 As Integer
Dim B As Byte
Dim A As Byte
Dim C As Byte
'--------------deklarasi port-----------
Config Kbd = Porta
Config Portc = Output
'-----------deklarasi sub program---------------------
Declare Sub Kiri()
Declare Sub Kanan()
Declare Sub Kedip()
Declare Sub Mati()
'-------------program utama---------------
Do
Data1 = Getkbd()
If Data1 = 0 Then
C=1
End If
If Data1 = 1 Then
C=2
End If
If Data1 = 2 Then
C=3
End If
If Data1 = 3 Then
C=4
End If
If C = 1 Then
Call Kiri()
End If
If C = 2 Then
Call Kanan()
42
End If
If C = 3 Then
Call Kedip()
End If
If C = 4 Then
Call Mati()
End If
Loop
End
'----------program sub kiri
Sub Kiri()
A = 254
For B = 0 To 8
Portc = A
Shift A , Left , 1
Waitms 100
Next
End Sub
43
Portc = 255
Waitms 100
Next
End Sub
'-------------------------------------------------------
'SUB RUTIN MATI
'-------------------------------------------------------
Sub Mati()
Portc = 255
End Sub
44
$regfile = "8535def.dat"
$crystal = 11059200
Dim Hitung As Integer
Config Porta = Output
Config Portc = Output
Config Portd.2 = Input
Config Timer0 = Counter , Edge = RisingPORTB.0
Portd.2 = 1
Tcnt0 = 0
Portc = &B1111_1111
Do
Hitung = Tcnt0
Porta = Makebcd(hitung)
If Hitung = 20 Then
Portc.0 = 0
End If
If Pind.2 = 0 Then
Portc.0 = 1
Tcnt0 = 0
End If
Loop
End
45
1.8. TIMER/COUNTER0
a. Counter 1 kanal.
Bit ini mengontrol kenaikan dari counter, sumber dari nilai maksimum
counter, dan tipe dari jenis timer/counter yang dihasilkan, yaitu mode
normal, clear timer, mode compare match, dan dua tipe dari PWM (Pulse
46
Width Modulation). Berikut ini tabel pengaturan pada bit WGM01 dan WGM00
Bendera
Bit ini mengontrol pin OC0 (pin Output Compare). Apabila kedua bit ini nol
atau clear, maka pin OC0 berfungsi sebagai pin biasa. Bila salah satu bit set,
maka fungsi pin ini tergantung pada pengaturan bit pada WGM00 dan
WGM01. Berikut daftar tabel pengaturan bit COM01 dan COM00 sesuai
47
Tabel 7.2. Pengaturan Bit COM01 dan COM00 Mode Non-PWM
Tabel 7.3. Tabel 2.3 Pengaturan Bit COM01 dan COM00 Mode Fast PWM
0 1 Reserved
48
1
0 1 Reserved
Ketiga bit tersebut untuk memilih sumber clock yang akan digunakan oleh
Timer/Counter0.
difungsikan).
falling edge.
49
rising edge.
Do
If A = 10 Then
Toggle Portc.3
50
A= 0
End If
Loop
End
Timer1_isr: ' untuk 1 kali interupsi/detik
Tcnt1l = Low(inisial)
Tcnt1h = High(inisial)
Toggle Portc.2 ' LED 4
Return
Timer0_isr:
Tcnt0 = Isiawal
Incr A
Return
51
$crystal = 11059200
$regfile = "m8535.dat" 'jika menggunakan ATMEGA8535
$lib "lcd4busy.Lbx"
Config Porta = Output
Config Portc = Output
Config Lcd = 16 * 2
Const _lcdport = Portb
Const _lcdddr = Ddrb
Const _lcdin = Pinb
Const _lcd_e = 2
Const _lcd_rw = 1
Const _lcd_rs = 0
Cursor Off
Do
Cls
Waitms 500
Lcd "****MUHAMMAD****"
Lowerline
Lcd "*LABIB MUBAROK*"
Waitms 500
Cls
Waitms 500
Lcd "Tanjung barat"
Lowerline
Lcd "*pasar minggu *"
Waitms 500
Loop
End
52
3. PORTD.3 sebagai input
Jika tombol PORTD.2 ditekan (logic 0 ) maka LED ON dan di LCD tampil LAMPU ON
Jika tombol PORTD.3 ditekan (logic 0) maka LED OFF dan di LCD tampil LAMPU OFF
53
JAWABAN PRAKTIKUM 6 program otomatis geser kiri dari PC0 sampai PC7, kemudian geser
kanan dari PC7 ke PC0
$crystal = 11059200
$regfile = "m8535.dat"
Dim Led As Byte
Config Portc = Output
Led = 254
Do
Do
Rotate Led , Left , 1
Portc = Led
Waitms 50
Loop Until Portc = 127
Do
Rotate Led , Right , 1
Portc = Led
Waitms 50
Loop Until Portc = 254
Loop
End
54
$crystal = 11059200
'--------------------------------------------------------
'DEKLARASI Header
'--------------------------------------------------------
$regfile = "m8535.dat"
'--------------------------------------------------------
Config Porta = Output
Config Portc = Output
Dim A As Byte
Dim B As Byte
Dim C As Byte
Do
Wait 1
Incr A
Portc = &B1111_1011
Porta = Makebcd(a)
If A = 60 Then
A= 0
Porta = Makebcd(a)
Incr B
End If
If B < 60 Then
Portc = &B1111_1101
Porta = Makebcd(b)
End If
If B = 60 Then
Incr C
B=0
Portc = &B1111_1101
Portc = &B1111_1110
Porta = Makebcd(c)
End If
If C >= 23 Then
Portc = &B1111_1111
55
Porta = Makebcd(c)
End If
If C = 24 Then
A= 0
B=0
C=0
Portc = &B1111_1000
Porta = Makebcd(0)
End If
Loop
End
56
JAWABAN PRAKTIKUM 12 JAM DIGITAL DENGAN 7 SEGMENT DENGAN SET
DETIK,MENIT,JAM
$crystal = 11059200
'--------------------------------------------------------
'DEKLARASI Header
'--------------------------------------------------------
$regfile = "m8535.dat"
'--------------------------------------------------------
Config Porta = Output
Config Portc = Output
Dim A As Byte
Dim B As Byte
Dim C As Byte
Config Portd.2 = Input
Config Portd.3 = Input
Config Portd.4 = Input
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Do
'----------SETING DETIK----------------
If Pind.2 = 0 Then
Portc = &B1111_1011
Do
Incr A
If A = 60 Then
A= 0
End If
Porta = Makebcd(a)
Waitms 500
Loop Until Pind.2 = 1
End If
'----------SETING DETIK----------------
57
'----------SETING MENIT----------------
If Pind.3 = 0 Then
Portc = &B1111_1101
Do
Incr B
If B = 60 Then
B=0
End If
Porta = Makebcd(b)
Waitms 500
Loop Until Pind.3 = 1
End If
'----------SETING MENIT----------------
'----------SETING JAM----------------
If Pind.4 = 0 Then
Portc = &B1111_1110
Do
Incr C
If C = 24 Then
C=0
End If
Porta = Makebcd(c)
Waitms 500
Loop Until Pind.4 = 1
End If
'----------SETING JAM----------------
Wait 1
Incr A
Portc = &B1111_1011
Porta = Makebcd(a)
If A = 60 Then
A= 0
Porta = Makebcd(a)
Incr B
58
End If
If B < 60 Then
Portc = &B1111_1101
Porta = Makebcd(b)
End If
If B = 60 Then
Incr C
B=0
Portc = &B1111_1101
Portc = &B1111_1110
Porta = Makebcd(c)
End If
If C >= 23 Then
Portc = &B1111_1111
Porta = Makebcd(c)
End If
If C = 24 Then
A= 0
B=0
C=0
Portc = &B1111_1000
Porta = Makebcd(0)
End If
Loop
End
59
JAWABAN PRAKTIKUM 17
$crystal = 11059200
$regfile = "m8535.dat" 'jika menggunakan ATMEGA8535
$lib "lcd4busy.Lbx"
Config Lcd = 16 * 2
Const _lcdport = Portb
Const _lcdddr = Ddrb
Const _lcdin = Pinb
Const _lcd_e = 2
Const _lcd_rw = 1
Const _lcd_rs = 0
Cursor Off
Config Portd.2 = Input
Config Portd.3 = Input
Config Portc.0 = Output
Portd.2 = 1
Portd.3 = 1
Do
If Pind.2 = 0 Then
Portc.0 = 0
End If
If Pind.3 = 0 Then
Portc.0 = 1
End If
If Portc.0 = 0 Then
Waitms 20
Cls
Lcd "LAMPU ON"
End If
If Portc.0 = 1 Then
Waitms 20
60
Cls
Lcd "LAMPU OFF"
End If
Loop
End
INTERUPS
Mikrokontroller AVR mempunyai 21 macam interups, terdiri dari 3 interups external dan 18 interups
internal,berikut table interups AVR:
1 0x000(1) RESET External Pin Power-on Reset, Brown-out Reset
2 0x001 INT0 External Interrupt Request 0
3 0x002 INT1 External Interrupt Request 1
4 0x003 TIMER2 COMP Timer/Counter2 Compare Match
5 0x004 TIMER2 OVF Timer/Counter2 Overflow
6 0x005 TIMER1 CAPT Timer/Counter1 Capture Event
7 0x006 TIMER1 COMPA Timer/Counter1 Compare Match A
8 0x007 TIMER1 COMPB Timer/Counter1 Compare Match B
9 0x008 TIMER1 OVF Timer/Counter1 Overflow
10 0x009 TIMER0 OVF Timer/Counter0 Overflow
11 0x00A SPI, STC Serial Transfer Complete
12 0x00B USART, RXC USART, Rx Complete
13 0x00C USART, UDRE USART Data Register Empty
14 0x00D USART, TXC USART, Tx Complete
15 0x00E ADC ADC Conversion Complete
16 0x00F EE_RDY EEPROM Ready
17 0x010 ANA_COMP Analog Comparator
18 0x011 TWI Two-wire Serial Interface
19 0x012 INT2 External Interrupt Request 2
20 0x013 TIMER0 COMP Timer/Counter0 Compare Match
21 0x014 SPM_RDY Store Program Memory Ready
Praktikum 18:
$crystal = 11059200
$regfile = "m8535.dat"
On Int0 Program_1
On Int1 Program_2
Led Alias Portc
Config Int0 = Falling
Config Int1 = Falling
61
Config Portd = Input
Config Portc = Output
Portd = 255
Enable Int0
Enable Int1
Enable Interrupts
Led = 254
Do
Do
Rotate Led , Left , 1
Waitms 500
Loop Until Led = 127
Do
Rotate Led , Right , 1
Waitms 500
Loop Until Led = 254
Loop
Program_1:
Led = &B11111011
Bitwait Pind.2 , Set
Return
Program_2:
Led = &B10111111
Bitwait Pind.3 , Set
Return
62
dihubungkan melalui pin AREF. ADC mengkonversi tegangan input analog menjadi data digital 8 bit
atau 10 bit. Data digital tersebut akan disimpan didalam ADC Data Register yaitu ADCH dan ADCL.
Sekali ADCL dibaca, maka akses ke data register tidak bisa dilakukan. Dan ketika ADCH dibaca, maka
akses ke data register kembali enable.
Start Adc
'--------------------------
Dim Suhu_ref As Word
Dim Suhu As Word
'--------------------------
Deflcdchar 0 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32
'--------------------------
Cls
Cursor Off
'--------------------------
Do
Suhu_ref = Getadc(0)
Suhu = Suhu_ref * 5
Suhu = Suhu / 10
Locate 1 , 1
Lcd "**THERMOMETER***"
Locate 2 , 1
Lcd "Suhu="
Locate 2 , 6
Lcd " "
63
Locate 2 , 6
Lcd Suhu
Locate 2 , 9
Lcd Chr(0)
Locate 2 , 10
Lcd "C"
Locate 2 , 11
Lcd " "
Waitms 100
If Suhu => 70 Then
Portc.0 = 1
End If
If Suhu < 70 Then
Portc.0 = 0
End If
Loop
PRAKTIKUM 20
$regfile = "m8535.dat" 'jika menggunakan ATMEGA8535
$lib "lcd4busy.Lbx"
$crystal = 11059200
Config Lcd = 16 * 2
Const _lcdport = Portb
Const _lcdddr = Ddrb
64
Const _lcdin = Pinb
Const _lcd_e = 2
Const _lcd_rw = 1
Const _lcd_rs = 0
Cursor Off
Cursor Off
Cls
Do
Data_adc1 = Getadc(0)
Adc_convert1 = Data_adc1
Adc_convert1 = Adc_convert1 / 1024
Adc_convert1 = Adc_convert1 * 5
Adc_string1 = Fusing(adc_convert1 , "#.##")
Data_adc2 = Getadc(1)
Adc_convert2 = Data_adc2
Adc_convert2 = Adc_convert2 / 1024
Adc_convert2 = Adc_convert2 * 5
Adc_string2 = Fusing(adc_convert2 , "#.##")
Locate 1 , 1
Lcd "ADC-0 : " ; Adc_string1 ; "volt"
Locate 2 , 1
Lcd "ADC-1 : " ; Adc_string2 ; "volt"
Waitms 200
Loop
65
-AKSES EEPROM
PRAKTIKUM21
$regfile = "m8535.dat"
$lib "lcd4busy.Lbx"
66
$crystal = 11059200
Config Lcd = 16 * 2
Const _lcdport = Portb
Const _lcdddr = Ddrb
Const _lcdin = Pinb
Const _lcd_e = 2
Const _lcd_rw = 1
Const _lcd_rs = 0
Cursor Off
Cls
Cursor Off
Cls
Locate 1 , 1
Lcd "ATMega-8535"
Locate 2 , 1
Lcd "Demo EEPROM"
Wait 3
Cls
Locate 1 , 1
Lcd "menulis EEPROM.."
Locate 2 , 1
Lcd "datanya="
For I = 0 To 9
Locate 2 , 9
D = Rnd(100)
Lcd D
Writeeeprom D , I
Wait 1
67
Next I
Locate 2 , 1
Lcd "selesai menulis!"
Wait 2
Cls
Locate 1 , 1
Lcd "membaca EEPROM.."
Locate 2 , 1
Lcd "data ke-"
For I = 0 To 9
Locate 2 , 9
Readeeprom X , I
Lcd I ; " = " ; X
Wait 1
Next I
End
68
Kontrol Motor DC dengan PWM
69
PRAKTIKUM 23
$regfile = "m8535.dat"
$lib "lcd4busy.Lbx"
$crystal = 11059200
Config Lcd = 16 * 2
Const _lcdport = Portb
Const _lcdddr = Ddrb
Const _lcdin = Pinb
Const _lcd_e = 2
Const _lcd_rw = 1
Const _lcd_rs = 0
Cursor Off
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Dim Kecepatan As Integer
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down ,
Prescale = 1024
Compare1a = 0
Compare1b = 10
Do
Kecepatan = Getadc(0)
Compare1a = Kecepatan
Locate 1 , 1
Lcd "compare1a : " ; Kecepatan ; "analog"
Waitms 200
Loop
'--------------------------- end
70