SlideShare una empresa de Scribd logo
1 de 68
Descargar para leer sin conexión
Basic AVR Microcontroller Tutorial
Oleh :
Hendawan Soebhakti, ST
Agustus 2007
Parkway Street, Batam Centre
Batam 29461
Telp. 62-778 469856 – 469861
Fax. 62-778 463620
http://www.polibatam.ac.id
Basic AVR Tutorial by Hendawan Soebhakti Page 2 of 68
Electrical Engineering – Batam Polytechnic
DAFTAR ISI
1. AVR ATMega 8535L
2. Operasi Aritmatika, Logika dan Percabangan
3. Interupsi
4. Timer/Counter
5. Pengendalian Motor Stepper
6. LCD 16x2
7. PWM dan Pengendalian Motor DC
8. Motor Servo
9. Keypad
10. Komunikasi Serial USART
Basic AVR Tutorial by Hendawan Soebhakti Page 3 of 68
Electrical Engineering – Batam Polytechnic
BAB I
AVR ATMega 8535L
1.1 Sekilas Tentang AVR
AVR : Alf and Vegard RISC atau
AVR : Advanced Virtual RISC
RISC: Reduced Instruction Set Computer
Arsitektur mikrokontroler jenis AVR pertamakali dikembangkan pada tahun 1996 oleh dua orang mahasiswa
Norwegian Institute of Technology yaitu Alf-Egil Bogen dan Vegard Wollan.
Mikrokontroler AVR kemudian dikembangkan lebih lanjut oleh Atmel. Seri pertama AVR yang dikeluarkan adalah
mikrokontroler 8 bit AT90S8515, dengan konfigurasi pin yang sama dengan mikrokontroler 8051, termasuk address
dan data bus yang termultipleksi.
Mikrokontroler AVR menggunakan teknologi RISC dimana set instruksinya dikurangi dari segi ukurannya dan
kompleksitas mode pengalamatannya. Pada awal era industri komputer, bahasa pemrograman masih menggunakan
kode mesin dan bahasa assembly. Untuk mempermudah dalam pemrograman para desainer komputer kemudian
mengembangkan bahasa pemrograman tingkat tinggi yang mudah dipahami manusia. Namun akibatnya, instruksi
yang ada menjadi semakin komplek dan membutuhkan lebih banyak memori. Dan tentu saja siklus eksekusi
instruksinya menjadi semakin lama. Dalam AVR dengan arsitektur RISC 8 bit, semua instruksi berukuran 16 bit dan
sebagian besar dieksekusi dalam 1 siklus clock. Berbeda dengan mikrokontroler MCS-51 yang instruksinya bervariasi
antara 8 bit sampai 32 bit dan dieksekusi selama 1 sampai 4 siklus mesin, dimana 1 siklus mesin membutuhkan 12
periode clock.
Dalam perkembangannya, AVR dibagi menjadi beberapa varian yaitu AT90Sxx, ATMega, AT86RFxx dan ATTiny.
Pada dasarnya yang membedakan masing-masing varian adalah kapasitas memori dan beberapa fitur tambahan saja.
1.2 Karakteristik mikrokontroler AVR seri ATMega8535
1.2.1 Fitur ATMega8535
Fitur yang tersedia pada ATMega 8535 adalah :
• Frekuensi clock maksimum 16 MHz
• Jalur I/O 32 buah, yang terbagi dalam PortA, PortB, PortC dan PortD
• Analog to Digital Converter 10 bit sebanyak 8 input
• Timer/Counter sebanyak 3 buah
• CPU 8 bit yang terdiri dari 32 register
• Watchdog Timer dengan osilator internal
• SRAM sebesar 512 byte
• Memori Flash sebesar 8 Kbyte dengan kemampuan read while write
• Interrupt internal maupun eksternal
• Port komunikasi SPI
• EEPROM sebesar 512 byte yang dapat diprogram saat operasi
• Analog Comparator
• Komunikasi serial standar USART dengan kecepatan maksimal 2,5 Mbps
Basic AVR Tutorial by Hendawan Soebhakti Page 4 of 68
Electrical Engineering – Batam Polytechnic
1.2.2 Konfigurasi Pin ATMega8535
Gambar 1.1 Konfigurasi Pin ATMega8535
1.2.3 Peta Memori ATMega8535
ATMega8535 memiliki dua jenis memori yaitu Data Memory dan Program Memory ditambah satu fitur
tambahan yaitu EEPROM Memory untuk penyimpan data.
• Program Memory
ATMega8535 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 pertamakali diaktifkan. Application Flash Section digunakan untuk menyimpan program
aplikasi yang dibuat user. AVR tidak dapat menjalankan program aplikasi ini sebelum menjalankan program Boot
Loader. Besarnya memori Boot Flash Section dapat diprogram 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.
Gambar 1.2 Peta Program Memory
Basic AVR Tutorial by Hendawan Soebhakti Page 5 of 68
Electrical Engineering – Batam Polytechnic
• Data Memory
Gambar berikut menunjukkan peta memori SRAM pada ATMega8535. Terdapat 608 lokasi address data memori.
96 lokasi address digunakan untuk Register File dan I/O Memory sementara 512 lokasi address lainnya digunakan
untuk internal data SRAM. Register File terdiri dari 32 general purpose working register, I/O register terdiri dari 64
register.
Gambar 1.3 Peta Data Memory
• EEPROM Data Memory
ATMega8535 memiliki EEPROM sebesar 512 byte untuk menyimpan data. Lokasinya terpisah dengan sistem
address register, data register dan control register yang dibuat khusus untuk EEPROM.
1.3 Status Register (SREG)
Status Register adalah register yang memberikan informasi yang dihasilkan dari eksekusi instuksi aritmatika.
Informasi ini berguna untuk mencari alternatif alur program sesuai dengan kondisi yang dihadapi.
Bit 7 – I : Global Interrupt Enable
Jika bit Global Interrupt Enable diset, maka fasilitas interupsi dapat dijalankan. Bit ini akan clear ketika ada interrupt
yang dipicu dari hardware, setelah program interrupt dieksekusi, maka bit ini harus di set kembali dengan instruksi SEI.
Bit 6 – T : Bit Copy Storage
Instruksi bit copy BLD dan BST menggunakan bit T sebagai sumber atau tujuan dalam operasi bit.
Bit 5 – H : Half Carry Flag
Basic AVR Tutorial by Hendawan Soebhakti Page 6 of 68
Electrical Engineering – Batam Polytechnic
Bit 4 – S : Sign Bit
Bit S merupakan hasil exlusive or dari Negative Flag N dan Two’s Complement Overflow Flag V.
Bit 3 – V : Two’s Complement Overflow Flag
Digunakan dalam operasi aritmatika
Bit 2 – N : Negative Flag
Jika operasi aritmatika menghasilkan bilangan negatif, maka bit ini akan set.
Bit 1 – Z : Zero Flag
Jika operasi aritmatika menghaslkan bilangan nol, maka bit ini akan set.
1.4 Bahasa Assembly AVR
Bahasa yang dipakai untuk memprogram mikrokontroler AVR adalah bahasa assembly AVR atau bahasa C. Dalam
buku ini semua program ditulis dalam bahasa assembly AVR. Berikut adalah contoh sebuah program aplikasi untuk
mikrokontroler AVR :
.include “m8535def.inc”
.org 0x0000
rjmp main Inisialisasi program
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddra,r16 Program utama
out PortA,r16
cbi PortA,0
cbi PortA,1
stop: rjmp stop
Sebuah program harus terdiri dari dua bagian, yaitu inisialisasi program dan program utama. Inisialisasi program harus
disertakan agar program utama dapat berjalan. Berikut adalah urutan langkah inisialisasi program :
1. Menentukan jenis mikrokontroler yang digunakan dengan cara memasukkan file definisi device (m8535def.inc) ke
dalam program utama.
.include “m8535def.inc” ;
2. Menuliskan original address program, yaitu 0x0000. Kemudian dilanjutkan dengan instruksi rjmp / relative jump ke
label main. Hal ini dimaksudkan agar program memory tidak tumpang tindih dengan data memory.
.org 0x0000
rjmp main
3. Menentukan isi Stack Pointer dengan address terakhir RAM (RAMEND). Untuk ATMega8535 yaitu 0x025F. Ini
dimaksudkan agar program utama mulai ditulis setelah address terakhir RAM.
main: ldi r16,low(RAMEND) ; low byte address RAM = 5F
out SPL,r16
ldi r16,high(RAMEND) ; high byte address RAM = 02
out SPH,r16
Basic AVR Tutorial by Hendawan Soebhakti Page 7 of 68
Electrical Engineering – Batam Polytechnic
BAB II
Operasi Port Input Output
2.1 Register I/O
Setiap port ATMega8535 terdiri dari 3 register I/O yaitu DDRx, Portx dan PINx.
• DDRx (Data Direction Register)
Register DDRx digunakan untuk memilih arah pin. Jika DDRx = 1 maka Pxn sebagai pin output Jika DDRx = 0
maka Pxn sebagai input.
• Portx (Port Data Register)
Register Portx digunakan untuk 2 keperluan yaitu untuk jalur output atau untuk mengaktifkan resistor pullup.
1. Portx berfungsi sebagai output jika DDRx = 1 maka :
Portxn = 1 maka pin Pxn akan berlogika high.
Portxn = 0 maka pin Pxn akan berlogika low.
2. Portx berfungsi untuk mengaktifkan resistor pullup jika DDRx = 0 maka :
Portxn = 1 maka pin Pxn sebagai pin input dengan resistor pull up.
Portxn = 0 maka pin Pxn sebagai output tanpa resistor pull up.
Tabel 2.1 Konfigurasi Port
DDRxn Portxn I/O Pull up Comment
0 0 Input No Tri state (Hi-Z)
0 1 Input Yes Pull up aktif
1 0 Output No Output Low
1 1 Output No Output High
Catatan :
x menunjukkan nama port (A,B,C,D)
n menunjukkan nomor bit (0,1,2,3,4,5,6,7)
Nilai awal (initial value) seluruh register I/O adalah 00h.
• PINx (Port Input Pin Address)
Digunakan sebagai register input.
2.2 Instruksi I/O
in : membaca data I/O port ke dalam register
contoh : in r16,PinA
out : menulis data register ke I/O port
contoh : out PortA,r16
ldi : (load immediate) : menulis konstanta ke register sebelum konstanta tersebut dikeluarkan ke I/O port
contoh : ldi r16,0xff
sbi : (set bit in I/O) : membuat logika high pada sebuah bit I/O port
contoh : sbi PortB,7
cbi : (clear bit in I/O) : membuat logika low pada sebuah bit I/O port
contoh : cbi PortB,5
sbic : (skip if bit in I/O is clear) : lompati satu instruksi jika bit I/O port dalam kondisi clear/low
contoh : sbic PortA,3
sbis : (skip if bit in I/O is set) : lompati satu instruksi jika bit I/O port dalam kondisi set/high
contoh : sbis PortB,3
Basic AVR Tutorial by Hendawan Soebhakti Page 8 of 68
Electrical Engineering – Batam Polytechnic
Contoh Program 1:
.include "m8535def.inc"
.org 0x00
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0x00
out ddra,r16 ; PortA as input
ldi r16,0xff
out ddrb,r16 ; PortB as output
out ddrc,r16 ; PortC as output
ulang: in r16,PortA
out PortB,r16
ldi r16,0x0f
out PortC,r16
cbi PortC,0
sbic PortA,5
cbi PortC,1
sbi PortC,6
sbis PortA,5
sbi PortC,7
ldi r16,0x00
out PortB,r16
out PortC,r16
rjmp ulang
Latihan :
1. Buatlah program agar dapat membaca data pada PortC dan mengeluarkan data tersebut pada PortA.
2. Buatlah program agar PortA mengeluarkan data 20h jika PortB,1 berlogika 0.
3. Buatlah program agar PortA mengeluarkan data 15h jika PortC,1 dan PortD,2 berlogika 1, selain kondisi
tersebut PortA mengeluarkan data 00h.
Basic AVR Tutorial by Hendawan Soebhakti Page 9 of 68
Electrical Engineering – Batam Polytechnic
Jawaban Latihan no 3:
.include "m8535def.inc"
.org 0x00
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddra,r16 ; PortA as output
ldi r16,0x00
out ddrc,r16 ; PortC as output
out ddrd,r16 ; PortD as output
ldi r16,0x00
ldi r17,0x15
ulang: sbis PortC,1
rjmp ulang1
sbis PortD,2
rjmp ulang1
out PortA,r17
rjmp ulang
ulang1: out PortA,r16
rjmp ulang
Basic AVR Tutorial by Hendawan Soebhakti Page 10 of 68
Electrical Engineering – Batam Polytechnic
BAB III
Operasi Aritmatika
3.1 Operasi Aritmatika
Instruksi Aritmatika
add : Menambahkan isi dua register.
Contoh : add r15,r14 ; r15=r15+r14
adc : Menambahkan isi dua register dan isi carry flag
Contoh : adc r15,r14 ; r15=r15+r14+C
sub : Mengurangi isi dua register.
Contoh : sub r19,r14 ; r19=r19-r14
mul : Mengalikan dua register. Perkalian 8 bit dengan 8 bit menghasilkan bilangan 16 bit yang disimpan di r0
untuk byte rendah dan di r1 untuk byte tinggi. Untuk memindahkan bilangan 16 bit antar register
digunakan instruksi movw (copy register word)
Contoh : mul r21,r20 ; r1:r0=r21*r20
3.2 Contoh Program
• Penjumlahan
.include "m8535def.inc"
.org 0x00
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0x80
ldi r17,0x80
add r16,r17
ldi r18,0x02
adc r16,r18
here: rjmp here
• Pengurangan
.include "m8535def.inc"
.org 0x00
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0x09
ldi r17,0x06
sub r16,r17
ldi r17,0x03
sub r16,r17
ldi r17,0x06
sub r16,r17
here: rjmp here
Basic AVR Tutorial by Hendawan Soebhakti Page 11 of 68
Electrical Engineering – Batam Polytechnic
• Perkalian
.include "m8535def.inc"
.org 0x00
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,5
ldi r17,100
mul r16,r17
movw r17:r16,r1:r0 ; Copy r1:r0 to r17:r16
here: rjmp here
• Pembagian
.include "m8535def.inc"
.org 0x00
.def drem8u =r15 ;remainder/sisa
.def dres8u =r16 ;result/hasil
.def dd8u =r16 ;dividend/yang dibagi
.def dv8u =r17 ;divisor/pembagi
.def dcnt8u =r18 ;loop counter
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi dd8u,4
ldi dv8u,2
rcall div8u
here: rjmp here
;
div8u: sub drem8u,drem8u ;clear remainder and carry
ldi dcnt8u,9 ;init loop counter
d8u_1: rol dd8u ;shift left dividend
dec dcnt8u ;decrement counter
brne d8u_2 ;if done
ret ;return
d8u_2: rol drem8u ;shift dividend into remainder
sub drem8u,dv8u remainder = remainder - divisor
brcc d8u_3 ;if result negative
add drem8u,dv8u ;restore remainder
clc ;clear carry to be shifted into result
rjmp d8u_1 ;else
d8u_3: sec ;set carry to be shifted into result
rjmp d8u_1
Basic AVR Tutorial by Hendawan Soebhakti Page 12 of 68
Electrical Engineering – Batam Polytechnic
Latihan :
Buatlah program untuk menyelesaikan persamaan matematika berikut ini :
1. r21=r22+5
2. r21=r22-5
3. r16:r17=r21*5
4. r16:r17=(r21+5)*(r22-5)
Basic AVR Tutorial by Hendawan Soebhakti Page 13 of 68
Electrical Engineering – Batam Polytechnic
BAB IV
Operasi Logika
4.1 Operasi Logika
Instruksi Logika
and : Untuk meng-and-kan dua register
Contoh : and r23,r27 ; r23=r23 and r27
andi : Untuk meng-and-kan register dengan konstanta immediate
Contoh : andi r25,0b11110000
or : Untuk meng-or-kan dua register
Contoh : or r18,r17 ; r18=r18 or r17
ori : Untuk meng-or-kan register dengan konstanta immediate
Contoh : ori r15,0xfe
inc : Untuk menaikkan satu isi sebuah register
Contoh : inc r14
dec : Untuk menurunkan satu isi sebuah register
Contoh : dec r15
clr : Untuk mengosongkan (membuat jadi nol) isi register
Contoh : clr r15 ; r15=0x00
ser : Set all bit in register. Membuat jadi satu isi register
Contoh : ser r16 ; r16=0xff
4.2 Contoh Program
• Operasi Logika
.include "m8535def.inc"
.org 0x00
rjmp main
main:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0b01110111
ldi r17,0b00001111
and r16,r17
ori r16,0b00001000
clr r16
inc r16
ser r16
dec r16
here:
rjmp here
Basic AVR Tutorial by Hendawan Soebhakti Page 14 of 68
Electrical Engineering – Batam Polytechnic
Latihan :
1. Buatlah program untuk memecahkan persoalan berikut :
PinA
0xf0
PinB PortC
r20
2. Buatlah program dengan ketentuan sbb :
Input
PortA,1 PortA,0
Aksi
0 0 Clear isi r20 dan r21
0 1 Isi r20 dengan 0 kemudian naikkan isi r20 sampai nilainya = 10, jika sudah
sampai 10 ulangi lagi dari 0
1 0 Isi r21 dengan 10 kemudian turunkan isi r21 sampai 0, jika sudah 0 ulangi lagi
dari 10.
1 1 Set isi r20 dan r21
Jawaban no 2:
.include "m8535def.inc"
.org 0x00
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
mulai: sbic PortA,1 ; skip if PortA,1 = 0
rjmp cek10_11
rjmp cek00_01
cek10_11: ; PortA,1=1
sbic PortA,0 ; PortA,1=1, PortA,0=0 (10)
rjmp setAll ;
ulang: ldi r21,10
dec r21
dec r21
dec r21
dec r21
dec r21
dec r21
dec r21
dec r21
dec r21
dec r21
rjmp ulang
setAll: ser r20
ser r21
rjmp mulai
;
cek00_01: ; PortA,1=0
sbis PortA,0 ; skip if PortA,0=1
rjmp clearAll
Basic AVR Tutorial by Hendawan Soebhakti Page 15 of 68
Electrical Engineering – Batam Polytechnic
ulang2: ldi r20,0
inc r20
inc r20
inc r20
inc r20
inc r20
inc r20
inc r20
inc r20
inc r20
inc r20
rjmp ulang2
clearAll:
clr r20
clr r21
rjmp mulai
Basic AVR Tutorial by Hendawan Soebhakti Page 16 of 68
Electrical Engineering – Batam Polytechnic
BAB V
Percabangan
5.1 Operasi Percabangan
Instruksi Percabangan
sbic (skip if bit in I/O is cleared) : Skip jika bit I/O yang diuji clear
sbis (skip if bit in I/O is set) : Skip jika bit I/O yang diuji set
sbrc (skip if bit in register is clear) : Skip jika bit dalam register yang diuji clear
cp (compare) : Membandingkan isi dua register
mov (move) : Meng-copy isi dua register
cpi (compare with immediate) : Membandingakan isi register dengan konstanta tertentu.
breq (branch if equal) : Lompat ke label tertentu jika suatu hasil perbandingan adalah sama.
brne (branch if not equal) : Lompat ke label tertentu jika suatu hasil perbandingan adalah tidak
sama.
rjmp (relative jump) : Lompat ke label tertentu.
rcall (relative call) : Memanggil subrutin.
ret (return) : Keluar dari sub rutin.
5.2 Contoh Program
• Operasi Percabangan
.include "m8535def.inc"
.org 0x00
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
clr r16 ; r16=0x00
naik: inc r16 ; increment r16
cpi r16,5 ; r16=5 ?
breq lagi ; branch to lagi if r16 = 5
rjmp naik ; jump to naik if r16 ≠ 5
lagi: ldi r18,5 ; r18 = 5
dec r16 ; decrement r16
cp r16,r18 ; compare r16 & r18
brne lompat ; branch to lompat if r16=r18
rjmp lagi ; jump to lagi if r16≠r18
lompat: rcall rutin1
rcall rutin2
henti: rjmp henti
rutin1: mov r17,r16
ret
rutin2: mov r19,r18
ret
Basic AVR Tutorial by Hendawan Soebhakti Page 17 of 68
Electrical Engineering – Batam Polytechnic
Latihan :
Buatlah program delay dari flowchart berikut ini :
Mulai
Isi r16 dengan 0x0A
r16=0?
Kurangi 1 isi r16
Tdk
Ya
Kurangi 1 isi r17
r17=0?Tdk
Selesai
Ya
Isi r17 dengan 0x05
Basic AVR Tutorial by Hendawan Soebhakti Page 18 of 68
Electrical Engineering – Batam Polytechnic
BAB VI
Interupsi
Interupsi adalah kondisi yang memaksa mikrokontroler menghentikan sementara eksekusi program utama untuk
mengeksekusi rutin interrupt tertentu / Interrupt Service Routine (ISR)
Setelah melaksanakan ISR secara lengkap, maka mikrokontroler akan kembali melanjutkan eksekusi program utama
yang tadi ditinggalkan.
Main Program
Time
(a). Program execution without interrupts
Main
ISR
Main
ISR
Main
ISR
Main
(b). Program execution with interrupts
Time
Pada Atmega 8535 terdapat 21 sumber interupsi yaitu :
Tabel 6.1 Interrupt Vector pada ATmega 8535
Vector
No
Program
Address
Source Interrupt Definition
1 0x0000 RESET External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset
2 0x0001 INT0 External Interrupt Request 0
3 0x0002 INT1 External Interrupt Request 1
4 0x0003 TIMER2 COMP Timer/Counter2 Compare Match
5 0x0004 TIMER2 OVF Timer/Counter2 Overflow
6 0x0005 TIMER1 CAPT Timer/Counter1 Capture Event
7 0x0006 TIMER1 COMPA Timer/Counter1 Compare Match A
8 0x0007 TIMER1 COMPB Timer/Counter1 Compare Match B
9 0x0008 TIMER1 OVF Timer/Counter1 Overflow
10 0x0009 TIMER0 OVF Timer/Counter0 Overflow
11 0x000A SPI, STC Serial Transfer Complete
12 0x000B USART, RXC USART, Rx Complete
13 0x000C USART, UDRE USART Data Register Empty
14 0x000D USART, TXC USART, Tx Complete
15 0x000E ADC ADC Conversion Complete
16 0x000F EE_RDY EEPROM Ready
17 0x0010 ANA_COMP Analog Comparator
18 0x0011 TWI Two-wire Serial Interface
19 0x0012 INT2 External Interrupt Request 2
20 0x0013 TIMER0 COMP Timer/Counter0 Compare Match
21 0x0014 SPM_RDY Store Program Memory Ready
Basic AVR Tutorial by Hendawan Soebhakti Page 19 of 68
Electrical Engineering – Batam Polytechnic
SM2
7
SE
6
SM1
5
SM0
4
ISC11
3
ISC10
2
ISC01
1
ISC00
0
MCUCR / MCU Control Register
Bit Symbol Fuction
7,5,4 SM2..0 Sleep Mode Select Bits. Digunakan untuk memilih mode sleep MCU
SM2 SM1 SM0 Sleep Mode
0 0 0 Idle
0 0 1 ADC Noise Reduction
0 1 0 Power-down
0 1 1 Power-save
1 0 0 Reserved
1 0 1 Reserved
1 1 0 Standby
1 1 1 Extended Standby
6 SE Sleep Enable. Digunakan untuk mengaktifkan mode Sleep dengan memberikan logika
1 pada SE sebelum Sleep dijalankan. Setelah Wake-up harus segera diberi logika 0.
3,2 ISC11, ISC10 Interrupt Sense Control 1 Bit. Digunakan untuk memilih jenis pulsa trigger External
Interrupt 1 (INT1).
ISC11 ISC10 Description
0 0 The low level of INT1 generates an interrupt request.
0 1 Any logical change on INT1 generate an interrupt request
1 0 The falling edge of INT1 generate an interrupt request.
1 1 The rising edge of INT1 generate an interrupt request.
1,0 ISC01, ISC00 Interrupt Sense Control 0 Bit. Digunakan untuk memilih jenis pulsa trigger External
Interrupt 0 (INT0).
ISC01 ISC00 Description
0 0 The low level of INT0 generates an interrupt request.
0 1 Any logical change on INT0 generate an interrupt request
1 0 The falling edge of INT0 generate an interrupt request.
1 1 The rising edge of INT0 generate an interrupt request.
Basic AVR Tutorial by Hendawan Soebhakti Page 20 of 68
Electrical Engineering – Batam Polytechnic
INT1
7
INT0
6
INT2
5
-
4
-
3
-
2
IVSEL
1
IVCE
0
GICR / General Interrupt Control Register
Bit Symbol Fuction
7 INT1 External Interrupt Request 1 Enable. Digunakan untuk mengaktifkan INT1 dengan syarat
bit I pada SREG juga diset .
6 INT0 External Interrupt Request 0 Enable. Digunakan untuk mengaktifkan INT0 dengan syarat
bit I pada SREG juga diset .
5 INT1 External Interrupt Request 2 Enable. Digunakan untuk mengaktifkan INT2 dengan syarat
bit I pada SREG juga diset .
4,3,2 - Reserved
1 IVSEL Interrupt Vector Select.
Jika IVSEL = 0 maka interrupt vector ditempatkan pada start address flash memory
Jika IVSEL = 1 maka interrupt vector ditempatkan pada awal bootloader dalam flash
memory.
1 IVCE Interrupt Vector Change Enable. Digunakan untuk mengaktifkan perubahan interrupt vector .
Basic AVR Tutorial by Hendawan Soebhakti Page 21 of 68
Electrical Engineering – Batam Polytechnic
Contoh Program :
Interrupt 0
.include "m8535def.inc"
.org 0x0000
rjmp main
.org 0x0001
rjmp ex_int0
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddrd,r16
out PortD,r16
set_int: ldi r17,0b01000000
out GICR,r17
ldi r17,0b00000000
out MCUCR,r17
sei
loop: rjmp loop
ex_int0: push r16
in r16,SREG
push r16
ldi r17,0xff
out ddra,r17
out PortA,r17
pop r16
out SREG,r16
pop r16
reti
Basic AVR Tutorial by Hendawan Soebhakti Page 22 of 68
Electrical Engineering – Batam Polytechnic
BAB VII
Timer/Counter
1. Prescaler
Timer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung
tersebut bisa sama dengan frekuensi crystal yang dipasang atau dapat diperlambat
menggunakan prescaler dengan faktor 8, 64, 256 atau 1024. Berikut penjelasannya :
Sebuah AVR menggunakan crystal dengan frekuensi 8 MHz dan timer yang digunakan adalah
timer 16 bit, maka maksimum waktu timer yang bisa dihasilkan adalah :
TMAX = 1/fCLK x (FFFFh+1)
= 0.125uS x 65536
= 0.008192 S
Untuk menghasilkan waktu timer yang lebih lama dapat digunakan prescaler, misalnya 1024,
maka maksimum waktu timer yang bisa dihasilkan adalah :
TMAX = 1/fCLK x (FFFFh+1) x N
= 0.125uS x 65536 x 1024
= 8.388608 S
Ketika presacaler digunakan, waktu timer dapat diperpanjang namun tingkat ketelitiannya
menjadi turun. Misalnya dengan prescaler 1024 nilai timer akan bertambah 1 setiap kelipatan
1024 pulsa dan membutuhkan waktu 1/fCLK x 1024 = 0.125uS x 1024 = 128 uS bandingkan
tingkat resolusi ini jika tanpa precsaler (0.125uS).
2. Timer 16 Bit Normal Mode
Pada mode normal, TCNT1 akan menghitung naik dan membangkitkan interrupt Timer/Counter 1
ketika nilainya berubah dari 0xFFFF ke 0x0000. Seringkali kita menganggap untuk menggunakan
timer cukup dengan memasukkan nilai yang diinginkan ke TCNT1 dan menunggu sampai terjadi
interrupt. Ini menjadi benar pada timer yang menghitung mundur, tetapi untuk timer yang
menghitung maju, maka anda harus memasukkan nilai 65536-(timer value) ke dalam TCNT1.
Gambar 7.1 Blok Diagram Timer 16 Bit
Basic AVR Tutorial by Hendawan Soebhakti Page 23 of 68
Electrical Engineering – Batam Polytechnic
3. Register Timer 16 Bit
• TCNT1
Timer/Counter1 Register digunakan untuk menyimpan nilai timer yang diinginkan. TCNT1
dibagi menjadi 2 register 8 bit yaitu TCNT1H dan TCNT1L.
• TIMSK & TIFR
Timer Interrupt Mask Register (TIMSK) dan Timer Interrupt Flag (TIFR) Register digunakan
untuk mengendalikan interrupt mana yang diaktifkan dengan cara melakukan setting pada
TIMSK dan untuk mengetahui interrupt mana yang sedang terjadi.
OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0
TIMSK / Timer/Counter Interrupt Mask Register
Bit Symbol Fuction
7 OCIE2 Timer/Counter2 Output Compare Match Interrupt Enable.
6 TOIE2 Timer/Counter2 Overflow Interrupt Enable.
5 TICIE1 Timer1 Input Capture Interrupt Enable
4 OCIE1A Timer/Counter1A Output Compare Match Interrupt Enable.
3 OCIE1B Timer/Counter1B Output Compare Match Interrupt Enable.
2 TOIE1 Timer/Counter1 Overflow Interrupt Enable.
4 OCIE0 Timer/Counter0 Output Compare Match Interrupt Enable.
0 TOIE0 Timer/Counter0 Overflow Interrupt Enable.
7 6 5 4 3 2 1 0
Basic AVR Tutorial by Hendawan Soebhakti Page 24 of 68
Electrical Engineering – Batam Polytechnic
OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0
TIFR / Timer/Counter Interrupt Flag Register
Bit Symbol Fuction
7 OCF2 Output Compare Flag2.
6 TOV2 Timer/Counter2 Overflow Flag.
5 ICF1 Timer1 Input Capture Interrupt Flag
4 OCF1A Output Compare Flag1A.
3 OCF1B Output Compare Flag1B.
2 TOV1 Timer/Counter1 Overflow Flag.
4 OCF0 Output Compare Flag0.
0 TOV0 Timer/Counter0 Overflow Flag.
7 6 5 4 3 2 1 0
• TCCR1B
Timer/Counter1 Control Register B digunakan untuk mengatur mode timer, prescaler dan
pilihan lainnya.
CS12..10: Clock Select bits ;
Tiga bit pemilih prescaler timer/counter 1 dan hubungannya dengan clock eksternal pada
pin T1.
4. Perhitungan Waktu Timer
Basic AVR Tutorial by Hendawan Soebhakti Page 25 of 68
Electrical Engineering – Batam Polytechnic
)
N
T
(h)FFFF(1TCNT timer CLKf×
−+=
Dimana :
TCNT : Nilai timer (Hex)
CLKf
: Frekuensi clock (crystal) yang digunakan (Hz)
timerT
: Waktu timer yang diinginkan (detik)
N : Prescaler (1, 8, 64, 256, 1024)
1+FFFFh : Nilai max timer adalah FFFFh dan overflow saat FFFFh ke 0000h
Contoh :
Diinginkan sebuah timer 16 bit bekerja selama 1 detik, dengan frekuensi clock sebesar
11,0592MHz dan presecaller 1024 maka diperoleh nilai TCNT sebesar :
hDDTCNT
hAhTCNT
dhTCNT
FFFFhTCNT
05
30210000
1080010000
1024
110592001
)1
=
−=
−=











 ×
−+=
Dengan demikian nilai TCNTH = D5h dan TCNTL = D0h
5. Maksimum Waktu Timer
Timer 16 bit AVR8535 dapat menghasilkan waktu tunda maksimum sebesar 6,068055555 detik
pada frekuensi 11,0592MHz
h0001
(FFFFh)h)10000(
FFFFhFFFFh)(1TCNT
=
−=
−+=
Dengan nilai maksimum FFFFh maka akan dihasilkan waktu timer selama :
detik0680555555,6T
)10800(T65535
)
1024
11059200T
(FFFFh
timer
timer
timer
=
×=
×
=
Basic AVR Tutorial by Hendawan Soebhakti Page 26 of 68
Electrical Engineering – Batam Polytechnic
7. Mengaktifkan Timer
Setelah tahu nilai yang harus dituliskan ke TCNT1 maka anda harus mengaktifkan bit interrupt
terkait dan global interrupt enable. Berikut adalah flowchart apa yang terjadi pada timer :
Langkah yang perlu dilakukan adalah :
• Aktifkan TOIE1 pada TIMSK
• Masukkan nilai timer ke TCNT1 misalnya : D5D0h
• Set prescaler pada 1024 ( set bit CS12 dan CS10 pada TCCR1B)
• Aktifkan bit global interrupt pada SREG
• Tunggu. Atau lakukan hal yang lain. Semua perhitungan dan pengecekan flag dilakukan
oleh hardware.
Basic AVR Tutorial by Hendawan Soebhakti Page 27 of 68
Electrical Engineering – Batam Polytechnic
Contoh Program :
.include "m8535def.inc"
.equ timer_value = 0xD5D0
.org 0x0000
rjmp mulai
mulai:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ulang:
ldi r16,0xff
out ddra,r16
out PortA,r16
rcall timer1d
ldi r16,0x00
out PortA,r16
rcall timer1d
rjmp ulang
timer1d:
ldi r16,0b00000100 ;aktifkan enable interupt
out TIMSK,r16
ldi r16,high(timer_value) ;masukkan nilai timer
out TCNT1H,r16
ldi r16,low(timer_value)
out TCNT1L,r16
ldi r16,0b00000101 ;masukkan prescaler 1024
out TCCR1B,r16
looptimer:
in r17,TIFR
sbrs r17,TOV1 ;tunggu sampai timer1 overflow set
rjmp looptimer
ldi r16,0b00000100 ;TOV1 dinolkan dengan memberi logika 1
out TIFR,r16
ret
Basic AVR Tutorial by Hendawan Soebhakti Page 28 of 68
Electrical Engineering – Batam Polytechnic
BAB VIII
Pengendalian Motor Stepper
1. Dasar Motor Stepper
Motor stepper adalah sebuah peralatan elektromekanik yang mengubah pulsa elektrik menjadi
pergerakan mekanik. Shaft atau kumparan motor stepper berputar per step ketika pulsa elektrik
dimasukkan ke kumparan tersebut dengan urutan yang benar. Urutan pemberian pulsa ke motor
stepper akan menyebabkan arah putaran yang berbeda. Sedangkan besarnya frekuensi dari
pulsa akan mempengaruhi kecepatan putaran motor stepper.
Motor Stepper Unipolar
Gambar 2.1 Motor Stepper Unipolar
Motor stepper unipolar baik tipe 5 atau 6 kabel biasanya dihubungkan seperti pada gambar 2.1,
dengan sebuah center tap pada tiap kumparan. Pada penggunaannya, center tap dihubungkan
ke supply positif, dan dua ujung kumparan lainnya dihubungkan ke ground.
Bagian rotor motor pada gambar 2.1 dibuat dari magnet permanent dengan 6 kutub, 3 kutub
utara dan 3 kutub selatan.
Seperti terlihat pada gambar, arus mengalir dari center tap kumparan 1 ke terminal a
menyebabkan kutub stator yang atas menjadi berkutub utara dan kutub stator yang bawah
berkutub selatan. Kondisi ini menyebabkan rotor berada pada posisi seperti gambar 2.1.
Jika arus pada kumparan 1 dimatikan dan kumparan 2 dinyalakan, maka rotor akan berputar 30
derajat, atau 1 step. Untuk berputar secara kontinyu, kita hanya perlu menghubungkan supplay
power ke 2 kumparan secara berurutan.
Dengan asumsi bahwa logika 1 berarti arus mengalir pada kumparan motor, maka berikut adalah
urutan yang harus dipenuhi agar motor dapat berputar sebanyak 24 step atau 2 putaran :
Kumparan 1a 1000100010001000100010001
Kumparan 1b 0010001000100010001000100
Kumparan 2a 0100010001000100010001000
Kumparan 2b 0001000100010001000100010
waktu --->
Basic AVR Tutorial by Hendawan Soebhakti Page 29 of 68
Electrical Engineering – Batam Polytechnic
N
S
1
2 2
1
S
N
N
S
N
S
N S
1
2 2
1
S
N
NS
N
S
S
N
1
2 2
1
S
N
N
S
NS
S N
1
2 2
1
S
N
N
S
N
S
Step 1 Step 2 Step 3 Step 4
N
S
1
2 2
1
N S
1
2 2
1
S
N
N
S
NS
S
N
1
2 2
1
S
N
N
S
N
S
S N
1
2 2
1
S
N
N S
N
S
Step 5 Step 6 Step 7 Step 8
S
N
NS
N
S
N
S
1
2 2
1
N S
1
2 2
1
S
N
N
S
N
S
S
N
1
2 2
1
S
N
NS
N
S
S N
1
2 2
1
S
N
N
S
N S
Step 9 Step 10 Step 11 Step 12
S
N
N
S
NS
Gambar 2.2 Bergeraknya Motor Stepper
Step Angle / SA
Motor stepper bergerak per step. Setiap bergerak satu step, motor stepper akan berputar
beberapa derajat sesuai dengan step anglenya. Step angle tergantung dari jumlah kutub magnet
motor stepper. Jumlah putaran yang diperlukan agar motor stepper bergerak 1 putaran penuh
(360 0
) adalah :
Step = 3600
/ Step Angle
Misalnya, sebuah motor stepper memiliki SA=1,80 maka untuk untuk berputar satu putaran
penuh memerlukan jumlah step sebanyak : 360 / 1,8 = 200 step
Basic AVR Tutorial by Hendawan Soebhakti Page 30 of 68
Electrical Engineering – Batam Polytechnic
Skema Rangkaian Driver Motor Stepper
+12V
MOTOR STEPPER
TIP 122
1N4001
10K
1K
TIP 122
1N4001
10K
1K
1N4001
1K
TIP 122
10K
10K
TIP 122
1N4001
1K
PA.1
PA.3
PA.2
PA.0
Gambar 2.3 Skema Rangkaian Driver Motor Stepper
2. Kendali Arah Putaran
Arah putaran motor stepper ditentukan oleh arah urutan aktifasi kumparannya. Secara program,
ini bisa dilakukan dengan mengubah arah pergeseran bit.
Jika arah pergesarannya ke kiri, maka motor stepper akan berputar kearah kiri pula (CCW)
Jika arah pergeserannya ke kanan, maka motor stepper akan berputar ke arah kanan (CW)
Arah Putaran CW Arah Putaran CCW
.include "m8535def.inc"
.org 0x0000
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddra,r16
ldi r19,0x08
Step: out PortA,r19
rcall delay
ror r19
cpi r19,0x01
brne Step
out PortA,r19
rcall delay
ldi r19,0x08
rjmp Step
.include "m8535def.inc"
.org 0x0000
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddra,r16
ldi r19,0x01
Step: out PortA,r19
rcall delay
rol r19
cpi r19,0x08
brne Step
out PortA,r19
rcall delay
ldi r19,0x01
rjmp Step
Basic AVR Tutorial by Hendawan Soebhakti Page 31 of 68
Electrical Engineering – Batam Polytechnic
delay: ldi r20,0x02
dl1: ldi r21,0xff
dl2: ldi r22,0xff
dl3: dec r22
cpi r22,0x00
brne dl3
dec r21
cpi r21,0x00
brne dl2
dec r20
cpi r20,0x00
brne dl1
ret
delay: ldi r20,0x02
dl1: ldi r21,0xff
dl2: ldi r22,0xff
dl3: dec r22
cpi r22,0x00
brne dl3
dec r21
cpi r21,0x00
brne dl2
dec r20
cpi r20,0x00
brne dl1
ret
Pada program, jika instruksi ror r19 diganti menjadi rol r19
Maka arah putaran motor stepper akan berubah.
3. Kendali Posisi
Derajat putaran motor stepper ditentukan oleh banyaknya jumlah pergeseran aktifasi
kumparannya. Secara program, ini bisa dilakukan dengan mengubah jumlah pergeseran bit.
Pada motor stepper dengan SA=1,80
, agar motor stepper bergerak 450
maka diperlukan
pergeseran step sebanyak : 45/1,8 =25 step
.include "m8535def.inc"
.org 0x0000
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddra,r16
ldi r19,0x08
ldi r17,25
Loop: rcall Step
dec r17
cpi r17,0
brne Loop
Stop: nop
rjmp Stop
Step: cpi r19,0x01
brne Shift
out PortA,r19
rcall delay
ldi r19,0x08
ret
Shift: out PortA,r19
rcall delay
ror r19
ret
Basic AVR Tutorial by Hendawan Soebhakti Page 32 of 68
Electrical Engineering – Batam Polytechnic
delay: ldi r20,0x02
dl1: ldi r21,0xff
dl2: ldi r22,0xff
dl3: dec r22
cpi r22,0x00
brne dl3
dec r21
cpi r21,0x00
brne dl2
dec r20
cpi r20,0x00
brne dl1
ret
Jika instruksi ldi r17,25 diganti menjadi ldi r17,50 maka posisi akhir motor stepper
adalah 900
4. Kendali Kecepatan
Kecepatan motor stepper ditentukan oleh kecepatan aktifasi kumparannya. Secara program, ini
bisa dilakukan dengan mengubah delay waktu pergeseran tiap bitnya. Semakin cepat delay
waktunya, kecepatan motor stepper juga akan bertambah.
.include "m8535def.inc"
.org 0x0000
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddra,r16
ldi r19,0x08
Step: out PortA,r19
rcall delay
ror r19
cpi r19,0x01
brne Step
out PortA,r19
rcall delay
ldi r19,0x08
rjmp Step
delay: ldi r20,0x20
dl1: ldi r21,0xff
dl2: ldi r22,0xff
dl3: dec r22
cpi r22,0x00
brne dl3
dec r21
cpi r21,0x00
brne dl2
dec r20
cpi r20,0x00
Basic AVR Tutorial by Hendawan Soebhakti Page 33 of 68
Electrical Engineering – Batam Polytechnic
brne dl1
ret
Jika instruksi ldi r20,0x20 menjadi ldi r20,0x02 maka kecepatan motor stepper akan
bertambah.
5. Kendali Torsi
Torsi motor stepper ditentukan oleh banyaknya jumlah kumparan yang aktif pada saat yang
sama. Torsi akan bertambah besar jika 2 kumparan aktif pada saat yang sama.
Secara program, ini bisa dilakukan dengan mengubah kondisi bit.
.include "m8535def.inc"
.org 0x0000
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddra,r16
ldi r19,0x4c
Step: out PortA,r19
rcall delay
ror r19
cpi r19,0x09
brne Step
out PortA,r19
rcall delay
ldi r19,0x4c
rjmp Step
delay: ldi r20,0x20
dl1: ldi r21,0xff
dl2: ldi r22,0xff
dl3: dec r22
cpi r22,0x00
brne dl3
dec r21
cpi r21,0x00
brne dl2
dec r20
cpi r20,0x00
brne dl1
ret
Jika instruksi ldi r19,0x4c
cpi r19,0x09
diubah menjadi
ldi r19,0x08
cpi r19,0x01
maka torsi motor stepper akan turun menjadi setengahnya.
Basic AVR Tutorial by Hendawan Soebhakti Page 34 of 68
Electrical Engineering – Batam Polytechnic
BAB IX
Liquid Crystal Display
1. Konfigurasi Pin LCD 16x2
LIQUID CRYSTAL DISPLAY
16 CHARACTER X 2 LINES
1 16
VSS VDD VO RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 A K
Gambar 9.1 Konfigurasi Pin LCD 16 Karakter x 2 Baris
Pin No. Symbol Level Description
1 VSS 0V Ground
2 VDD 5V Supply voltage for logic
3 VO (Variable) Operating voltage for LCD
4 RS H/L H : Data, L : Instruction code
5 R/W H/L H : Read, L : Write
6 E H, H->L Chip Enable signal
7 DB0 H/L Data bit 0
8 DB1 H/L Data bit 1
9 DB2 H/L Data bit 2
10 DB3 H/L Data bit 3
11 DB4 H/L Data bit 4
12 DB5 H/L Data bit 5
13 DB6 H/L Data bit 6
14 DB7 H/L Data bit 7
15 A 4,2 – 4,6 V LED +
16 K 0V LED -
Basic AVR Tutorial by Hendawan Soebhakti Page 35 of 68
Electrical Engineering – Batam Polytechnic
2. Rangkaian Skematik Mikrokontroler dan LCD 16x2
+5V
+5V
+5V
2x16 LCD
DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 A KVSS VCC VEE RS RW E
R1
5K
D1
1N4001
PA.4
PA.6
PA.0
PA.1
PA.2
PA.3
Gambar 9.2 Rangkaian Skematik LCD
3. Fungsi Register LCD
Modul display LCD sudah dilengkapi dengan sebuah kontroler yang memiliki dua register 8 bit yaitu instruction register
(IR) dan data register (DR).
IR menyimpan kode instruksi, seperti display clear, cursor shift dan informasi address untuk display data RAM
(DDRAM) dan character generator (CGRAM).
RS R/W Operation
0 0 Menulis instruksi ke IR, seperti display clear, cursor shift
0 1 Membaca busy flag (DB7) dan address counter (DB0 s/d DB7)
1 0 Menulis data ke DDRAM atau CGRAM
1 1 Membaca data dari DDRAM atau CGRAM
Busy Flag (BF)
Busy flag = 1 saat kontroler sedang mengerjakan instruksi, selama instruksi tersebut belum selesai dikerjakan,
kontroler tidak akan menerima instruksi apapun. Ketika RS=0 dan R/W=1, busy flag mengeluarkan logika 1 pada DB7.
Instruksi berikutnya akan siap diterima ketika busy flag = 0.
Address Counter (AC)
Address counter berisi address DDRAM dan CGRAM.
Display Data RAM (DDRAM)
DDRAM menyimpan data display dalam bentuk kode karakter 8 bit. Kapasitasnya adalah 80 karakter. Berikut adalah
posisi address DDRAM pada LCD 16x2 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
Character Generator ROM (CGROM)
CGROM akan menghasilkan karakter dengan format 5x8 dot atau 5x10 dot. Lihat tabel Format Karakter CGROM
Basic AVR Tutorial by Hendawan Soebhakti Page 36 of 68
Electrical Engineering – Batam Polytechnic
Character Generator RAM (CGRAM)
Dengan CGRAM, user dapat membuat sendiri format karakter yang diinginkan. Untuk format 5x8 dot bisa dibuat 8
karakter, untuk format 5x10 dapat dibuat 4 karakter. Lihat tabel
4. Hubungan CGRAM Address, DDRAM dan Pola Karakter
Basic AVR Tutorial by Hendawan Soebhakti Page 37 of 68
Electrical Engineering – Batam Polytechnic
5. Pola Karakter CGROM
Basic AVR Tutorial by Hendawan Soebhakti Page 38 of 68
Electrical Engineering – Batam Polytechnic
6. Tabel Instruksi
Kode InstruksiInstruksi
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
Deskripsi
Clear display 0 0 0 0 0 0 0 0 0 1
Menghapus semua tampilan pada
display
Return home 0 0 0 0 0 0 0 0 1 *
Set DDRAM address ke ‘00h’ dan
kembalikan cursor ke posisi awal. Isi
DDRAM tidak berubah
Entry mode set 0 0 0 0 0 0 0 1 I/D S
Menentukan auto increment /
decrement DDRAM address karakter
atau cursor berikutnya yang akan
ditulis ke display.
Display ON/OFF
control
0 0 0 0 0 0 1 D C B
Set display (D), cursor (C), dan
cursor blinking (B) ON/OFF
Cursor or Display shift 0 0 0 0 0 1 S/C R/L * *
Menentukan pergeseran display atau
cursor serta menentukan arah
pergeseran display
Function set 0 0 0 0 1 DL N F * *
Menentukan panjang data interface
(DL: 8 atau 4 bit), jumlah baris (N: 1
atau 2 baris) dan tipe font (F: 5x10
atau 5x7 dot)
Set CGRAM address 0 0 0 1 ACG Set CGRAM address
Set DDRAM address 0 0 1 ADD Set DDRAM address
Read Busy Flag and
address
0 1 BF AC
Mengetahui apakah LCD sedang
mengerjakan instruksi atau tidak. Isi
address counter juga dapat dibaca
Write data to RAM 1 0 D7 D6 D5 D4 D3 D2 D1 D0
Menulis data ke internal RAM
(DDRAM/CGRAM)
Read data from RAM 1 1 D7 D6 D5 D4 D3 D2 D1 D0
Membaca data dari internal RAM
(DDRAM/CGRAM)
I/D = 1 : Increment C = 1 : Cursor ON R/L = 1 : Right Shift F = 1 : 5x7 dots
I/D = 0 : Decrement C = 0 : Cursor OFF R/L = 0 : Left Shift F = 0 : 5x10 dots
S = 1 : DisplayShift B = 1 : Blink ON DL = 1 : 8 bits BF = 1 : Busy
S = 0 : No Display Shift B = 0 : Blink OFF DL = 0 : 4 bits BF = 0 : Can Accept Data
D = 1 : Display ON S/C = 1 : Display Shift N = 1 : 2 Lines ACG : CGRAM Address
D = 0 : Display OFF S/C = 0 : Cursor Move N = 0 : 1 Line ADD : DDRAM Address
Basic AVR Tutorial by Hendawan Soebhakti Page 39 of 68
Electrical Engineering – Batam Polytechnic
7. Inisialisasi LCD
Power On
Tunggu = 15 mS setelah VCC naik sampai 4,5V
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 1 1 * * * *
Tunggu = 4,1 mS
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 1 1 * * * *
Tunggu = 100 uS
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 1 1 * * * *
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 N F * *
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1 I/ D S
Inisialisasi selesai
Function Set (Interface 8 bit)
BF belum bisa dicek sebelum instruksi ini
Function Set (Interface 8 bit)
BF belum bisa dicek sebelum instruksi ini
Function Set (Interface 8 bit)
BF belum bisa dicek sebelum instruksi ini
BF bisa dicek setelah instruksi-instruksi berikut.
Jika BF tidak dicek, tundaan waktu tiap instruksi
harus lebih lama dari waktu eksekusi instruksi.
Function Set (Interface 8 bit)
Display OFF
Display Clear
Entry Mode Set
Interface 8 bit
Basic AVR Tutorial by Hendawan Soebhakti Page 40 of 68
Electrical Engineering – Batam Polytechnic
Power On
Tunggu = 15 mS setelah VCC naik sampai 4,5V
RS R/W DB7 DB6 DB5 DB4
0 0 0 0 1 1
Tunggu = 4,1 mS
RS R/W DB7 DB6 DB5 DB4
0 0 0 0 1 1
Tunggu = 100 uS
RS R/W DB7 DB6 DB5 DB4
0 0 0 0 1 1
RS R/W DB7 DB6 DB5 DB4
0 0 0 0 1 0
0 0 0 0 1 0
0 0 N F * *
Inisialisasi selesai
Function Set (Interface 8 bit)
BF belum bisa dicek sebelum instruksi ini
Function Set (Interface 8 bit)
BF belum bisa dicek sebelum instruksi ini
Function Set (Interface 8 bit)
BF belum bisa dicek sebelum instruksi ini
BF bisa dicek setelah instruksi-instruksi berikut.
Jika BF tidak dicek, tundaan waktu tiap instruksi
harus lebih lama dari waktu eksekusi instruksi.
Function Set (Interface 4 bit)
Display OFF
Display Clear
Entry Mode Set
Interface 4 bit
0 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1
0 0 0 0 0 0
0 0 0 0 I/D S
Function Set (Interface 4 bit)
Basic AVR Tutorial by Hendawan Soebhakti Page 41 of 68
Electrical Engineering – Batam Polytechnic
8. Contoh Program
.include "m8535def.inc"
.equ timer_value = 0xffca
.equ timer_value100 = 0xfbaf
.cseg
.org 0x0000
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddra,r16
rcall InitLCD
Start: ldi r17,0x01
rcall SLcd
Loopx: ldi ZL,low(2*text)
ldi ZH,high(2*text)
rcall WM1LCD
ldi ZL,low(2*text2)
ldi ZH,high(2*text2)
rcall WM2LCD
end: rjmp Loopx
;-----------------------
; Write Message to LCD
;-----------------------
WM1LCD: ldi r17,0x80 ;1st line, 1st col
rcall SLcd
rjmp Wr1
WM2LCD: ldi r17,0xC0
rcall SLcd
Wr1: clr r1
LoopWr1: lpm ;load program memory
mov r19,r0
cpi r19,0
brne NextCHR
ret
NextCHR: rcall WLCD ;write character
adiw ZL,1 ;get next char
rjmp LoopWr1
;-----------------------
; Inisialisasi LCD
;-----------------------
InitLCD: ldi r20,8
LoopDelay: rcall delay5mS
dec r20
cpi r20,0
brne LoopDelay
ldi r17,0x03 ;Function set
out PortA,r17
sbi PortA,6 ;E=1
cbi PortA,6 ;E=0
rcall delay5mS
Basic AVR Tutorial by Hendawan Soebhakti Page 42 of 68
Electrical Engineering – Batam Polytechnic
ldi r17,0x03 ;Function set
out PortA,r17
sbi PortA,6 ;E=1
cbi PortA,6 ;E=0
rcall delay100uS
ldi r17,0x02 ;Function set:4 bit operation
out PortA,r17
sbi PortA,6 ;E=1
; rcall delay100uS
cbi PortA,6 ;E=0
ldi r17,0x28 ;Function set:4 bit op;2lines
rcall SLcd
ldi r17,0x08 ;Turn Off LCD
rcall SLcd
ldi r17,0x0C ;Turn On LCD
rcall SLcd
ldi r17,0x01 ;Clear Display
rcall SLcd
ldi r17,0x06 ;Entry mode set; Inc addr
rcall SLcd
ret
;-----------------------
; Rutin kirim instruksi
;-----------------------
SLcd: mov r18,r17
andi r18,$F0 ;Get high nibble
swap r18
out PortA,r18
sbi PortA,6 ;E=1
cbi PortA,6 ;E=0
;
mov r18,r17
andi r18,$0F ;Get low nibble
out PortA,r18
sbi PortA,6 ;E=1
cbi PortA,6 ;E=0
rcall delay100uS
ret
;-----------------------
; Rutin kirim karakter
;-----------------------
WLcd: mov r18,r19
andi r18,$F0 ;Get high nibble
swap r18
out PortA,r18
sbi PortA,4 ;RS=1
sbi PortA,6 ;E=1
cbi PortA,6 ;E=0
;
mov r18,r19
andi r18,$0F ;Get low nibble
out PortA,r18
Basic AVR Tutorial by Hendawan Soebhakti Page 43 of 68
Electrical Engineering – Batam Polytechnic
sbi PortA,4 ;RS=1
sbi PortA,6 ;E=1
cbi PortA,6 ;E=0
rcall delay100uS
ret
;-----------------------
; Rutin delay 5ms
;-----------------------
delay5ms: ldi r16,0b00000100
out TIMSK,r16
ldi r16,high(timer_value)
out TCNT1H,r16
ldi r16,low(timer_value)
out TCNT1L,r16
ldi r16,0b00000101
out TCCR1B,r16
loop: in r21,TIFR
sbrs r21,TOV1
rjmp loop
ldi r16,0b00000100
out TIFR,r16
ret
;-----------------------
; Rutin delay 100uS
;-----------------------
delay100us: ldi r16,0b00000100
out TIMSK,r16
ldi r16,high(timer_value100)
out TCNT1H,r16
ldi r16,low(timer_value100)
out TCNT1L,r16
ldi r16,0b00000001
out TCCR1B,r16
loop1: in r21,TIFR
sbrs r21,TOV1
rjmp loop1
ldi r16,0b00000100
out TIFR,r16
ret
; "12345678901234567890"
text: .db "Hello World",0
text2: .db "How Are You?",0
Basic AVR Tutorial by Hendawan Soebhakti Page 44 of 68
Electrical Engineering – Batam Polytechnic
Catatan Tambahan :
Register X, Register Y dan Register Z
Register R26…R31 memiliki fungsi tambahan sebagai register serbaguna. Register-register ini
dapat berfungsi sebagai register 16 bit yang dapat menyimpan address pada operasi
pemindahan data dalam mode indirect addressing. Fungsinya seperti register Data Pointer /
DPTR pada MCS-51. Register 16 bit ini adalah register X, Y dan Z seperti gambar berikut :
Gambar 9.3 Register X, Y dan Z
LPM (Load Program Memory)
Load 1 byte isi address yang ditunjukkan oleh register Z ke R0. Instruksi ini mirip dengan instruksi
mov A,@DPTR pada MCS-51.
Contoh :
ldi ZL,low(2*text) ; ZL=00h
ldi ZH,high(2*text) ; ZH=10h
lpm ; r0=”H” (Karakter H)
mov r19,r0 ; r19=”H”
.org 1000h
text: .db "Hello World",0
Basic AVR Tutorial by Hendawan Soebhakti Page 45 of 68
Electrical Engineering – Batam Polytechnic
BAB X
Pengendalian Motor DC
1. Motor DC
Setiap arus yang mengalir melalui sebuah konduktor akan menimbulkan medan magnet.
Arah medan magnet dapat ditentukan dengan kaidah tangan kiri. Ibu jari tangan menunjukkan
arah aliran arus listrik sedangkan jari-jari yang lain menunjukkan arah medan magnet yang
timbul, seperti yang ditunjukkan oleh gambar 10.1 berikut ini.
Gambar 10.1 Kaidah Tangan Kiri
Jika suatu konduktor yang dialiri arus listrik ditempatkan dalam sebuah medan magnet,
kombinasi medan magnet akan ditunjukkan oleh gambar 10.2. Arah aliran arus listrik dalam
konduktor ditunjukkan dengan tanda “x” atau “.”. Tanda “x” menunjukkan arah arus listrik
mengalir menjauhi pembaca gambar, tanda “.” menunjukkan arah arus listrik mengalir
mendekati pembaca gambar.
Gambar 10.2 Konduktor Berarus Listrik Dalam Medan Magnet
Basic AVR Tutorial by Hendawan Soebhakti Page 46 of 68
Electrical Engineering – Batam Polytechnic
Pada gambar sebelah kiri, arah medan magnet pada sisi atas yang dihasilkan oleh
konduktor berlawanan dengan arah medan magnet yang dihasilkan oleh magnet permanen.
Sementara pada sisi sebelah bawah, arah medan magnet yang dihasilkan oleh konduktor
searah dengan arah medan magnet yang dihasilkan oleh magnet permanen. Dengan kata lain,
pada sisi sebelah atas kerapatan fluks magnet lebih sedikit dari pada sisi sebelah bawah.
Sebuah gaya dorong akan menyebabkan konduktor bergerak ke sisi sebelah atas.
Pada gambar sebelah kanan, arah medan magnet pada sisi atas yang dihasilkan oleh
konduktor searah dengan arah medan magnet yang dihasilkan oleh magnet permanen.
Sementara pada sisi sebelah bawah, arah medan magnet yang dihasilkan oleh konduktor
berlawanan dengan arah medan magnet yang dihasilkan oleh magnet permanen. Dengan kata
lain, pada sisi sebelah bawah kerapatan fluks magnet lebih sedikit dari pada sisi sebelah atas.
Sebuah gaya dorong akan menyebabkan konduktor bergerak ke sisi sebelah bawah.
Pada sebuah motor dc, konduktor dibentuk menjadi sebuah loop sehingga ada dua
bagian konduktor yang berada didalam medan magnet pada saat yang sama, seperti
diperlihatkan pada gambar 10.3.
Konfigurasi konduktor seperti ini akan menghasilkan distorsi pada medan magnet utama
dan menghasilkan gaya dorong pada masing-masing konduktor. Pada saat konduktor di
tempatkan pada rotor, gaya dorong yang timbul akan menyebabkan rotor berputar searah
dengan jarum jam, seperti diperlihatkan pada gambar 10.3.
Gambar 10.3 Bergeraknya Sebuah Motor
Sebuah cara lagi untuk menunjukkan hubungan antara arus listrik yang mengalir didalam
sebuah konduktor, medan magnet dan arah gerak, adalah kaidah tangan kanan untuk motor
seperti yang diperlihatkan pada gambar 10.4.
Basic AVR Tutorial by Hendawan Soebhakti Page 47 of 68
Electrical Engineering – Batam Polytechnic
Gambar 10.4 Kaidah Tangan Kanan Untuk Motor
Kaidah tangan kanan untuk motor menunjukkan arah arus yang mengalir didalam sebuah
konduktor yang berada dalam medan magnet. Jari tengah menunjukkan arah arus yang
mengalir pada konduktor, jari telunjuk menunjukkan arah medan magnet dan ibu jari
menunjukkan arah gaya putar. Adapun besarnya gaya yang bekerja pada konduktor tersebut
dapat dirumuskan dengan :
F = B.L.I (Newton)
Dimana : B = kerapatan fluks magnet (weber)
L = panjang konduktor (meter)
I = arus listrik ( ampere)
Gambar 10.5 Konstruksi Dasar Motor DC
Basic AVR Tutorial by Hendawan Soebhakti Page 48 of 68
Electrical Engineering – Batam Polytechnic
Pada gambar 10.5 diatas tampak sebuah konstruksi dasar motor dc, pada gambar diatas
terlihat bahwa pada saat terminal motor diberi tegangan dc, maka arus elektron akan mengalir
melalui konduktor dari terminal negatif menuju ke terminal positif. Karena konduktor berada
diantara medan magnet, maka akan timbul medan magnet juga pada konduktor yang arahnya
seperti terlihat pada gambar 10.5 diatas. Arah garis gaya medan magnet yang dihasilkan oleh
magnet permanen adalah dari kutub utara menuju ke selatan. Sementara pada konduktor yang
dekat dengan kutub selatan, arah garis gaya magnet disisi sebelah bawah searah dengan garis
gaya magnet permanen sedangkan di sisi sebelah atas arah garis gaya magnet berlawanan arah
dengan garis gaya magnet permanen. Ini menyebabkan medan magnet disisi sebelah bawah
lebih rapat daripada sisi sebelah atas. Dengan demikian konduktor akan terdorong ke arah atas.
Sementara pada konduktor yang dekat dengan kutub utara, arah garis gaya magnet disisi
sebelah atas searah dengan garis gaya magnet permanen sedangkan di sisi sebelah bawah arah
garis gaya magnet berlawanan arah dengan garis gaya magnet permanen. Ini menyebabkan
medan magnet disisi sebelah atas lebih rapat daripada sisi sebelah bawah. Dengan demikian
konduktor akan terdorong ke arah bawah. Pada akhirnya konduktor akan membentuk gerakan
berputar berlawanan dengan jarum jam seperti terlihat pada gambar 10.5 diatas.
2. Kendali Arah Putaran
Gambar 10.6 Arah Putaran Motor DC
Dari gambar 10.6 diatas, agar arah putaran motor dc berubah, maka polaritas tegangan
pada terminal motor harus dibalik.
Basic AVR Tutorial by Hendawan Soebhakti Page 49 of 68
Electrical Engineering – Batam Polytechnic
1
1
2
2
M1
MOTOR DC
Q1
TIP120
Q3
TIP120
Q2
TIP120
Q4
TIP120
1
1
2
2R1
10K
1
1
2
2R3
10K
1
1
2
2 R2
10K
1
1
2
2R4
10K
+12V
Anoda
1
Katoda
2
NC
3
Emiter
4
Kolektor
5
NC
6
IC1
4N25
Anoda
1
Katoda
2
NC
3
Emiter
4
Kolektor
5
NC
6
IC2
4N25
BIT0
BIT1
+12V
+12V
1
1
2
2R6
680
R7
680
Q5
BC548
1A
1
1B
2
1Y
3
2A
4
2B
5
2Y
6
G
7
3Y
8
3B
9
3A
10
4Y
11
4B
12
4A
13
Vcc
14
IC3
74LS00
BIT0
BIT1
1
1
2
2R5
1K
VCC
Gambar 10.7 Rangkaian Driver Motor DC
Tabel 10.1 Tabel Kebenaran Rangkaian Driver Motor DC
Input
BIT 1 BIT 0
Aksi Motor
0 0 Berhenti
0 1 Berputar searah jarum jam
1 0 Berputar berlawanan arah jarum jam
1 1 Berhenti
Basic AVR Tutorial by Hendawan Soebhakti Page 50 of 68
Electrical Engineering – Batam Polytechnic
Contoh Program :
.include "m8535def.inc"
.org 0x0000
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddra,r16
Run: ldi r19,0b00000010
out PortA,r19
rcall delay
ldi r19,0b00000000
out PortA,r19
rcall delay
ldi r19,0b00000001
out PortA,r19
rcall delay
ldi r19,0b00000011
out PortA,r19
rcall delay
rjmp Run
delay: ldi r20,0x10
dl1: ldi r21,0xff
dl2: ldi r22,0xff
dl3: dec r22
cpi r22,0x00
brne dl3
dec r21
cpi r21,0x00
brne dl2
dec r20
cpi r20,0x00
brne dl1
ret
Basic AVR Tutorial by Hendawan Soebhakti Page 51 of 68
Electrical Engineering – Batam Polytechnic
3. Kendali Kecepatan (PWM)
Pulse Width Modulation (PWM) adalah sebuah cara memanipulasi lebar dari pulsa dalam perioda
yang konstan untuk mendapatkan tegangan rata-rata yang berbeda.
20 %
50%
90 %
Gambar 2.8 Sinyal PWM dengan Berbagai Duty Cycle
Pada gambar 2.8 menunjukkan tiga sinyal PWM yang berbeda. Sinyal yang paling atas
menunjukkan sinyal PWM dengan duty cycle 10%. Artinya sinyal on selama 20% dari perioda
sinyal dan off selama 80 % sisanya. Gambar yang lainnya menunjukkan sinyal dengan duty cycle
50% dan 90%. Ketiga sinyal PWM tersebut akan menghasilkan sinyal analog yang berbeda.
Sebagai contoh jika supply tegangan sebesar 9V dan duty cycle 20%, maka menghasilkan 1,8V.
VS
io
vo
0
t1 T
Gambar 2.9 Pulsa PWM
VS
T
t
V 1
o =
V0 : Tegangan Output (Volt)
VS : Tegangan Pulsa PWM (Volt)
t1 : Perioda pulsa high (Secon)
T : Periode pulsa (Secon)
Basic AVR Tutorial by Hendawan Soebhakti Page 52 of 68
Electrical Engineering – Batam Polytechnic
Contoh Program :
.include "m8535def.inc"
.equ timer_value1000 = 0xd4cd
.org 0x0000
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddra,r16
ldi r16,0x00
out PortA,r16
Loop: sbi PortA,0 ;Output Bit Pulse
rcall Pulse
cbi PortA,0 ;Output Bit Pulse
rcall P_1mS
rjmp Loop
Pulse: ldi r16,0b00000001 ;No prescaling untuk timer1
out TCCR1b,r16
ldi r16,0b00000101 ;Presaling 1024 untuk timer0
out TCCR0,r16
ldi r16,0b00000101 ;Timer0&1 overflow interrupt enable
out TIMSK,r16
ldi r16,high(timer_value1000) ;Nilai timer1
out TCNT1H,r16
ldi r16,low(timer_value1000) ;Nilai timer1
out TCNT1L,r16
ldi r18,$f6 ;Bilangan hex, $f6 = 0xf6
out TCNT0,r18 ;Nilai timer0
P_300uS: in r17,TIFR ;Baca Timer Interrupt Flag Register
sbrs r17,TOV0 ;Tunggu sampai timer0 overflow set
rjmp P_300uS
ldi r16,0b00000001 ;TOV0 dinolkan dg memberi logika 1
out TIFR,r16
ret
P_1mS: in r19,TIFR ;Baca Timer Interrupt Flag Register
sbrs r19,TOV1 ;Tunggu sampai timer1 overflow set
rjmp P_1mS
ldi r16,0b00000100 ;TOV1 dinolkan dg memberi logika 1
out TIFR,r16
ret
Basic AVR Tutorial by Hendawan Soebhakti Page 53 of 68
Electrical Engineering – Batam Polytechnic
Catatan Tambahan :
Timer/Counter0 Control Register – TCCR0
CS : Select bit
Timer Interrupt Mask Register – TIMSK
Timer Interrupt Flag Register - TIFR
Timer/Counter1 Control Register B – TCCR1B
Basic AVR Tutorial by Hendawan Soebhakti Page 54 of 68
Electrical Engineering – Batam Polytechnic
Basic AVR Tutorial by Hendawan Soebhakti Page 55 of 68
Electrical Engineering – Batam Polytechnic
BAB IX
Motor Servo
1. Dasar Motor Servo
Motor Servo terdiri dari sebuah motor DC, serangkaian gear, sebuah potensiometer, sebuah
output shaft dan sebuah rangkaian kontrol elektronik.
Biasanya, motor servo berbentuk kotak segi empat dengan sebuah output shaft motor dan
konektor dengan 3 kabel yaitu power, kontrol dan ground. Gear motor servo ada yang terbuat
dari plastic, metal atau titanium. Didalam motor servo terdapat potensiometer yang digunakan
sebagai sensor posisi. Potensiometer tersebut dihubungkan dengan output shaft untuk
mengetahui posisi aktual shaft.
Ketika motor dc berputar, maka output shaft juga berputar dan sekaligus memutar potensiometer.
Rangkaian kontrol kemudian dapat membaca kondisi potensiometer tersebut untuk mengetahui
posisi aktual shaft. Jika posisinya sesuai dengan yang diinginkan, maka motor dc akan berhenti.
Sudut operasi motor servo (Operating Angle) bervariasi tergantung jenis motor servo. Ada 2 jenis
motor servo yaitu :
• Motor Servo Standard
Yaitu motor servo yang mampu bergerak CW dan CCW dengan sudut operasi tertentu,
misalnya 600
, 900
atau 1800
.
• Motor Servo Continuous
Yaitu motor servo yang mampu bergerak CW dan CCW tanpa batasan sudut operasi
(berputar secara kontinyu).
Gambar 9.1 Konstruksi Motor Servo
Sumber : http://www.servocity.com
Motor servo dikendalikan dengan cara mengirimkan sebuah pulsa yang lebar pulsanya
bervariasi. Pulsa tersebut dimasukkan melalui kabel kontrol motor servo. Sudut atau posisi shaft
motor servo akan diturunkan dari lebar pulsa. Biasanya lebar pulsanya antara 1.1 ms sampai 1.9
ms dengan periode pulsa sebesar 20 mS.
Basic AVR Tutorial by Hendawan Soebhakti Page 56 of 68
Electrical Engineering – Batam Polytechnic
Periode 20 ms
Lebar Pulsa 1.1 ms (min) – 1.9 (max)
Lebar pulsa akan mengakibatkan perubahan posisi pada servo. Misalnya sebuah pulsa 1.5 ms
akan memutar motor pada posisi 900
(posisi netral). Agar posisi servo tetap pada posisi ini, maka
pulsa harus terus diberikan pada servo. Jadi meskipun ada gaya yang melawan, servo akan
tetap bertahan pada posisinya. Gaya maksimum servo tergantung dari rentang torsi servo.
Lebar Pulsa 1.1 ms
00
Lebar Pulsa 1.5 ms
900
Lebar Pulsa 1.9 ms
1800
Gambar 9.2 Lebar Pulsa dan Posisi Servo
Ketika sebuah pulsa yang dikirim ke servo kurang dari 1.5 ms, servo akan berputar
counterclockwise menuju ke posisi tertentu dari posisi netral. Jika pulsa yang dikirim lebih dari 1.5
ms, servo akan berputar clockwise menuju ke posisi tertentu dari posisi netral. Setiap servo
memiliki spesifikasi lebar pulsa minimum dan maksimum sendiri-sendiri, tergantung jenis dan
merk servo. Umumnya antara 1.1 ms sampai 1.9 ms.
Parameter lain yang berbeda antara servo satu dengan servo lainnya adalah kecepatan servo
untuk berubah dari posisi satu ke posisi lainnya (Operating Speed).
Basic AVR Tutorial by Hendawan Soebhakti Page 57 of 68
Electrical Engineering – Batam Polytechnic
Gambar 9.3 HSR-5995TG Ultra Torque
Sumber : http://www.servocity.com
Detailed Specifications
Control System: +Pulse Width Control 1500usec Neutral
Required Pulse: 3.3-7.4 Volt Peak to Peak Square Wave
Operating Voltage Range: 4.8-7.4 Volts
Operating Temperature Range: -20 to +60 Degree C (-68F to +140F)
Operating Speed (6.0V): 0.15sec/60 degrees at no load
Operating Speed (7.4V): 0.12sec/60 degrees at no load
Stall Torque (6.0V): 333.29oz/in. (24kg.cm)
Stall Torque (7.4V): 416.61oz/in. (30kg.cm)
Standing Torque (6.0V): 433.27oz/in. (31.2kg.cm) 5 degree deflection
Standing Torque (7.4V): 541.59oz/in. (39kg.cm) 5 degree deflection
Operating Angle: 90 Deg. one side pulse traveling 400usec
360 Modifiable: Yes
Direction: Clockwise/Pulse Traveling 1500 to 1900usec
Idle Current Drain (6.0V): 3mA at stop
Idle Current Drain (7.4V): 3mA at stop
Current Drain (6.0V): 300mA/idle and 4.2 amps at lock/stall
Current Drain (7.4V): 380mA/idle and 5.2 amps at lock/stall
Dead Band Width: 2usec
Motor Type: Coreless Metal Brush
Potentiometer Drive: 6 Slider Indirect Drive
Bearing Type: Dual Ball Bearing MR106
Gear Type: 4 Titanium Gears
Connector Wire Length: 11.81" (300mm)
Dimensions: 1.57" x 0.78"x 1.45" (40 x 20 x 37mm)
Weight: 2.18oz (62g)
Basic AVR Tutorial by Hendawan Soebhakti Page 58 of 68
Electrical Engineering – Batam Polytechnic
2. Kendali Posisi
Untuk mengendalikan motor servo dapat digunakan 2 buah timer pada AVR yaitu :
• Timer 1 digunakan untuk menjaga agar periode pulsa PWM sebesar 20mS
• Timer 0 digunakan untuk menghasilkan lebar pulsa high untuk menentukan posisi servo
Pada contoh program dibawah ini motor servo akan diberi pulsa high selama 1.5mS setiap 20mS
sekali. Posisi motor servo ada di posisi netral / centre.
.include "m8535def.inc"
.equ timer_value20 = 0xf280 ;timer 20mS
.equ timer_value = 0xc0 ;timer 1.5mS
.org 0x0000
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
sbi DDRD,5 ;PortD.5 as output
ldi r16,25
Loop: sbi PortD,5
rcall Pulse
cbi PortD,5
rcall P20mS
dec r16
cpi r16,0
brne Loop
Stop: nop
rjmp Stop
;-----------------------------------------------------------
; Generate pulse 1.5mS Servo position at centre
;-----------------------------------------------------------
Pulse:
ldi r16,0b00000011 ;Prescaling 64 untuk timer1
out TCCR1b,r16
ldi r16,0b00000101 ;Presaling 1024 untuk timer0
out TCCR0,r16
ldi r16,0b00000101 ;Timer0&1 overflow interrupt enable
out TIMSK,r16
ldi r16,high(timer_value20) ;Nilai timer1 = 20mS
out TCNT1H,r16
ldi r16,low(timer_value20) ;Nilai timer1
out TCNT1L,r16
ldi r18,0xf0 ;Bilangan hex, 0xf0 = timer 1.5 mS
out TCNT0,r18 ;Nilai timer0
P_1500uS:
in r17,TIFR ;Baca Timer Interrupt Flag Register
sbrs r17,TOV0 ;Tunggu sampai timer0 overflow set
rjmp P_1500uS
ldi r16,0b00000001 ;TOV0 dinolkan dg memberi logika 1
out TIFR,r16
ret
P20mS:in r19,TIFR ;Baca Timer Interrupt Flag Register
sbrs r19,TOV1 ;Tunggu sampai timer1 overflow set
Basic AVR Tutorial by Hendawan Soebhakti Page 59 of 68
Electrical Engineering – Batam Polytechnic
rjmp P20mS
ldi r16,0b00000100 ;TOV1 dinolkan dg memberi logika 1
out TIFR,r16
ret
Catatan Tambahan :
• Timer/Counter1 Control Register B - TCCR1B
Digunakan untuk mengatur mode timer, prescaler dan pilihan lainnya.
CS12..10: Clock Select bits ;
Tiga bit pemilih prescaler timer/counter 1 dan hubungannya dengan clock eksternal pada
pin T1.
Contoh Program dilakukan setting sbb :
ldi r16,0b00000011 ;enable Timer 1 with 64 prescaler
out TCCR1B,r16
Basic AVR Tutorial by Hendawan Soebhakti Page 60 of 68
Electrical Engineering – Batam Polytechnic
• Timer/Counter0 Control Register – TCCR0
CS02..00: Clock Select bits ;
Tiga bit pemilih prescaler timer/counter 0 dan hubungannya dengan clock eksternal pada
pin T0.
Pada Contoh Program dilakukan setting sbb :
ldi r16,0b00000100 ;Presaling 256 untuk timer0
out TCCR0,r16
• Perhitungan Timer
Timer 1 menghasilkan 20 mS :
TCNT=(1+FFFFh)-((Ttimer x fclk)/N)
TCNT=10000h-((0.2 x 11059200)/64)
TCNT=10000h-3456d
TCNT=10000h-0D80h
TCNT=F280h
Timer 0 menghasilkan 1.5mS :
TCNT=(1+FFh)-((Ttimer x fclk)/N)
TCNT=100h-((0.0015 x 11059200)/256)
TCNT=100h-64.8d
TCNT=100h-40h
TCNT=C0h
Dimana :
TCNT : Nilai timer (Hex)
fclk : Frekuensi clock (crystal) yang digunakan (Hz)
Ttimer : Waktu timer yang diinginkan (detik)
N : Prescaler (1, 8, 64, 256, 1024)
Basic AVR Tutorial by Hendawan Soebhakti Page 61 of 68
Electrical Engineering – Batam Polytechnic
BAB X
Keypad
1. Konfigurasi Keypad
Pada dasarnya keypad adalah sejumlah tombol yang disusun sedemikian rupa sehingga
membentuk susunan tombol angka dan beberapa menu lainnya. Berikut adalah contoh
konfigurasi keypad 4x4 :
1 2 3
4 5 6
7 8 9
0CAN ENT
COR
MEN
Kolom1 Kolom2 Kolom3 Kolom4
Baris1
Baris2
Baris3
Baris4
Gambar 10.1 Konfigurasi Keypad 4x4
2. Cara Mengakses Keypad
Berikut ini adalah cara menghubungkan keypad ke mikrokontroler :
1 2 3
4 5 6
7 8 9
0CAN ENT
COR
MEN
B1
B2
B3
B4
K1 K2 K3 K4
PD.0
PD.1
PD.2
PD.3
PD.7
PD.6
PD.5
PD.4
ATmega8535
Gambar 10.2 Menghubungkan Keypad ke Microkontroler
Basic AVR Tutorial by Hendawan Soebhakti Page 62 of 68
Electrical Engineering – Batam Polytechnic
Untuk mengetahui tombol mana yang ditekan maka kita harus melakukan proses scanning
pada keypad dengan langkah sebagai berikut :
Langkah 1 :
a. Set kondisi Port D = 11101111
b. Baca kondisi Port D :
• Jika PD.0 = 0 maka Tombol 1 ditekan
• Jika PD.1 = 0 maka Tombol 4 ditekan
• Jika PD.2 = 0 maka Tombol 7 ditekan
• Jika PD.3 = 0 maka Tombol CAN ditekan
Langkah 2 :
a. Set kondisi Port D = 11011111
b. Baca kondisi Port D :
• Jika PD.0 = 0 maka Tombol 2 ditekan
• Jika PD.1 = 0 maka Tombol 5 ditekan
• Jika PD.2 = 0 maka Tombol 8 ditekan
• Jika PD.3 = 0 maka Tombol 0 ditekan
Langkah 3 :
a. Set kondisi Port D = 10111111
b. Baca kondisi Port D :
• Jika PD.0 = 0 maka Tombol 3 ditekan
• Jika PD.1 = 0 maka Tombol 6 ditekan
• Jika PD.2 = 0 maka Tombol 9 ditekan
• Jika PD.3 = 0 maka Tombol ENT ditekan
Langkah 4 :
a. Set kondisi Port D = 01111111
b. Baca kondisi Port D :
• Jika PD.0 = 0 maka Tombol COR ditekan
• Jika PD.1 = 0 maka Tombol MEN ditekan
• Jika PD.2 = 0 maka Tombol UP ditekan
• Jika PD.3 = 0 maka Tombol DOWN ditekan
• Jika kondisi PD.0 ..PD.3 = 1 maka tidak ada
penekanan tombol
1 2 3
4 5 6
7 8 9
0CAN ENT
COR
MEN
PD.4 PD.5 PD.6 PD.7
0 1 1 1
1
1
1
1
PD.0
PD.1
PD.2
PD.3
1 2 3
4 5 6
7 8 9
0CAN ENT
COR
MEN
PD.4 PD.5 PD.6 PD.7
1 0 1 1
1
1
1
1
PD.0
PD.1
PD.2
PD.3
1 2 3
4 5 6
7 8 9
0CAN ENT
COR
MEN
PD.4 PD.5 PD.6 PD.7
1 1 0 1
1
1
1
1
PD.0
PD.1
PD.2
PD.3
1 2 3
4 5 6
7 8 9
0CAN ENT
COR
MEN
PD.4 PD.5 PD.6 PD.7
1 1 1 0
1
1
1
1
PD.0
PD.1
PD.2
PD.3
Basic AVR Tutorial by Hendawan Soebhakti Page 63 of 68
Electrical Engineering – Batam Polytechnic
Contoh Program :
.include "m8535def.inc"
.def temp =r22
.def dly =r23
.def dly1 =r24
.def Key =r25
.equ col1 =0b11101111 ;Column 1
.equ col2 =0b11011111 ;Column 2
.equ col3 =0b10111111 ;Column 3
.equ col4 =0b01111111 ;Column 4
.org 0x0000
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddra,r16 ;PortA as output
ldi r16,0xf0 ;PD[7:4]=output PD[3:0]=input
out ddrd,r16
loopx: rcall check_keys
rjmp loopx
;-------------------------
; Check keypad sub routine
;-------------------------
check_keys:
ldi temp,col1 ;Enable column1
out PORTD,temp
rcall delay
sbic PIND,PD0 ; Pressed key No1 ?
rjmp key4 ; if Not, check next key
ldi key,0x01 ; if yes...
out PortA,key
ret ; key=0x01
key4: sbic PIND,PD1 ; Pressed key No4 ?
rjmp key7 ; if Not, check next key
ldi key,0x04 ; if yes...
out PortA,key
ret ; key=0x04
key7: sbic PIND,PD2 ; Pressed key No7 ?
rjmp keyCAN ; if Not, check next key
ldi key,0x07 ; if yes...
out PortA,key
ret ; key=0x07
keyCAN: sbic PIND,PD3 ; Pressed key CAN ?
rjmp key2 ; if Not, check next key
ldi key,0x0A ; if yes...
out PortA,key
ret ; key=0x0A
key2: ldi temp,col2 ; Disable the first column...
out PORTD,temp ; and enable the second
rcall delay
sbic PIND,PD0 ; Pressed key No2 ?
Basic AVR Tutorial by Hendawan Soebhakti Page 64 of 68
Electrical Engineering – Batam Polytechnic
rjmp key5 ; if Not...
ldi key,0x02 ; if yes...
out PortA,key
ret ; key=0x02
key5: sbic PIND,PD1 ; Pressed key No5 ?
rjmp key8 ; if Not...
ldi key,0x05 ; if yes...
out PortA,key
ret ; key=0x05
key8: sbic PIND,PD2 ; Pressed key No8 ?
rjmp key0 ; if Not...
ldi key,0x08 ; if yes...
out PortA,key
ret ; key=0x08
key0: sbic PIND,PD3 ; Pressed key No0 ?
rjmp key3 ; if Not...
ldi key,0x00 ; if yes...
out PortA,key
ret ; key=0x00
key3: ldi temp,col3 ; Disable 2nd column...
out PORTD,temp ; and enable the 3th
rcall delay
sbic PIND,PD0 ; Pressed key No3 ?
rjmp key6 ; if Not...
ldi key,0x03 ; if yes...
out PortA,key
ret ; key=0x03
key6: sbic PIND,PD1 ; Pressed key No6 ?
rjmp key9 ; if Not...
ldi key,0x06 ; if yes...
out PortA,key
ret ; key=0x06
key9: sbic PIND,PD2 ; Pressed key No9 ?
rjmp keyENT ; if Not...
ldi key,0x09 ; if yes...
out PortA,key
ret ; key=0x09
keyENT: sbic PIND,PD3 ; Pressed key ENT ?
rjmp keyCOR ; if Not...
ldi key,0x0B ; if yes...
out PortA,key
ret ; key=0x0B
keyCOR: ldi temp,col4 ;
out PORTD,temp
rcall delay
sbic PIND,PD0 ; Pressed key COR ?
rjmp keyMEN ; if Not...
ldi key,0x0C ; if yes...
out PortA,key
ret ; key=0x0C
keyMEN: sbic PIND,PD1 ; Pressed key MEN ?
rjmp keyUP ; if Not...
ldi key,0x0D ; if yes...
out PortA,key
ret ; key=0x0D
Basic AVR Tutorial by Hendawan Soebhakti Page 65 of 68
Electrical Engineering – Batam Polytechnic
keyUP: sbic PIND,PD2 ; Pressed key UP ?
rjmp keyDW ; if Not...
ldi key,0x0E ; if yes...
out PortA,key
ret ; key=0x0E
keyDW: sbic PIND,PD3 ; Pressed key DOWN ?
rjmp check_keys ; if Not...
ldi key,0x0F ; if yes...
out PortA,key
ret ; key=0x0F
;------------------------
; Delay sub routine
;------------------------
delay: ldi dly,0x10
dl1: ldi dly1,0xff
dl2: dec dly1
cpi dly1,0x00
brne dl2
dec dly
cpi dly,0x00
brne dl1
ret
Basic AVR Tutorial by Hendawan Soebhakti Page 66 of 68
Electrical Engineering – Batam Polytechnic
BAB XI
Serial USART
1. Inisialisasi USART
Berikut register yang perlu disetting untuk mengatur komunikasi serial USART :
UBRR (USART Baud Rate Register)
UCSRB (USART Control and Status Register B)
UCSRC (USART Control and Status Register C)
UBRR
Digunakan untuk menentukan baud rate USART.
Rumus : UBRR = (fosc/16xbaudrate)-1
UCSRB
Digunakan untuk mengaktifkan penerimaan dan pengiriman data USART
RXEN : Jika di set 1 maka akan mengaktifkan penerimaan
TXEN : Jika di set 1 maka akan mengaktifkan pengiriman
RXCIE : Jika di set 1 maka akan mengaktifkan interupsi penerimaan
UCSRC
Digunakan untuk mengatur mode komunikasi USART
URSEL : Jika di set 1 maka register UCSRC bisa diakses, sebab alamat register UCSRC
dan UBRR sama
UCSZ2..UCSZ0 : Menentukan ukuran karakter yang dikirimkan.
Jika UCSZ2..UCSZ0 = 000 maka ukuran karakter 5 bit
Jika UCSZ2..UCSZ0 = 001 maka ukuran karakter 6 bit
Jika UCSZ2..UCSZ0 = 010 maka ukuran karakter 7 bit
Jika UCSZ2..UCSZ0 = 011 maka ukuran karakter 8 bit
Jika UCSZ2..UCSZ0 = 100-110 tidak digunakan
Jika UCSZ2..UCSZ0 = 111 maka ukuran karakter 9 bit
Contoh inisialisasi USART :
Basic AVR Tutorial by Hendawan Soebhakti Page 67 of 68
Electrical Engineering – Batam Polytechnic
.equ fclock =11059200
.equ baud_rate =19200
.equ ubbr_value =(fclock / (16*baud_rate)) - 1
init_usart:
ldi temp,high(ubbr_value)
out UBRRH,temp
ldi temp,low(ubbr_value)
out UBRRL,temp
ldi temp,(1<<RXEN)|(1<<TXEN)|(1<<RXCIE)
out UCSRB,temp
ldi temp,(1<<URSEL)|(3<<UCSZ0)
out UCSRC,temp
2. Pengiriman Data
Pengiriman data dilakukan per byte menunggu UDR kosong (UDR = register tempat
menyimpan data USART, menjadi satu dengan register UBRR). Jika kosong, maka bit
UDRE(USART Data Register Empty) pada UCSRA akan set 1 sehingga siap menerima
data baru yang akan dikirim.
Contoh pengiriman USART :
usart_tx:
sbis UCSRA,UDRE
rjmp usart_tx
out UDR,txbyte
3. Penerimaan Data
Penerimaan data dilakukan dengan memeriksa bit RXC (USART Receive Complete)
pada register UCSRA. RXC akan set 1 jika ada data yang siap dibaca. Data yang
diterima akan disimpan pada register UDR.
Contoh penerimaan USART :
usart_rx:
sbis UCSRA,RXC
rjmp usart_rx
in rxbyte,UDR
Basic AVR Tutorial by Hendawan Soebhakti Page 68 of 68
Electrical Engineering – Batam Polytechnic
Contoh Program :
.include"m8535def.inc"
.def temp =r16
.def txbyte =r17
.def rxbyte =r18
.equ fclock =11059200
.equ baud_rate =19200
.equ ubbr_value =(fclock / (16*baud_rate)) - 1
.org 0x0000
rjmp main
main: ldi temp,low(ramend)
out spl,temp
ldi temp,high(ramend)
out sph,temp
rcall init_usart
loop: ldi zl,low(2*msg)
ldi zh,high(2*msg)
load: lpm
mov txbyte,r0
cpi txbyte,0
breq done
rcall usart_tx
inc zl
rjmp load
done: rjmp done
init_usart:
ldi temp,high(ubbr_value)
out UBRRH,temp
ldi temp,low(ubbr_value)
out UBRRL,temp
ldi temp,(1<<RXEN)|(1<<TXEN)|(1<<RXCIE)
out UCSRB,temp
ldi temp,(1<<URSEL)|(3<<UCSZ0)
out UCSRC,temp
ret
usart_tx:
sbis UCSRA,UDRE
rjmp usart_tx
out UDR,txbyte
ret
usart_rx:
sbis UCSRA,RXC
rjmp usart_rx
in rxbyte,UDR
ret
msg:
.db "******Welcome To Politeknik Batam******",13,10,0
Keterangan : angka 13,10 adalah kode ASCII untuk Enter. Jadi pesan akan ditampilkan pada
baris baru di editor Hyper Terminal. Angka 0 menunjukkan akhir karakter dari pesan yang dikirim.

Más contenido relacionado

La actualidad más candente

Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)
Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)
Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)Muhammad Kennedy Ginting
 
Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16
Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16
Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16Beny Abdurrahman
 
Mikroprosesor sttc
Mikroprosesor sttcMikroprosesor sttc
Mikroprosesor sttcBeni Putra
 
Menampilkan Karakter pada Lcd dengan Mikrokontroler ATMEGA16
Menampilkan Karakter pada  Lcd dengan Mikrokontroler ATMEGA16Menampilkan Karakter pada  Lcd dengan Mikrokontroler ATMEGA16
Menampilkan Karakter pada Lcd dengan Mikrokontroler ATMEGA16University of Lampung
 
72681707 jam-digital-at-mega-16
72681707 jam-digital-at-mega-1672681707 jam-digital-at-mega-16
72681707 jam-digital-at-mega-16Satria Speed
 
Pemahaman Dasar Mikrokontroler
Pemahaman Dasar MikrokontrolerPemahaman Dasar Mikrokontroler
Pemahaman Dasar MikrokontrolerAbel Tasfir
 
Dasar dasar mikrokontroler
Dasar dasar mikrokontrolerDasar dasar mikrokontroler
Dasar dasar mikrokontrolerTantriIrawan
 
Membuat sensor suhu lm 35 menggunakan at mega
Membuat sensor suhu lm 35 menggunakan at megaMembuat sensor suhu lm 35 menggunakan at mega
Membuat sensor suhu lm 35 menggunakan at megaPriyo Harjiyono
 
Laporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan ledLaporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan ledSawah Dan Ladang Ku
 
Mikroprosesor Zilog Z80
Mikroprosesor Zilog Z80Mikroprosesor Zilog Z80
Mikroprosesor Zilog Z80Habibullah Srg
 
Arsitektur mikro z80
Arsitektur mikro z80Arsitektur mikro z80
Arsitektur mikro z80robbyrgt
 
Mikrokontroler pertemuan 7
Mikrokontroler pertemuan 7Mikrokontroler pertemuan 7
Mikrokontroler pertemuan 7Rumah Belajar
 

La actualidad más candente (19)

Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)
Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)
Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)
 
Bab ii atmega8
Bab ii atmega8Bab ii atmega8
Bab ii atmega8
 
Laporan led
Laporan ledLaporan led
Laporan led
 
Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16
Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16
Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16
 
Mikroprosesor sttc
Mikroprosesor sttcMikroprosesor sttc
Mikroprosesor sttc
 
Mikrokontroler ATMega16
Mikrokontroler ATMega16Mikrokontroler ATMega16
Mikrokontroler ATMega16
 
Menampilkan Karakter pada Lcd dengan Mikrokontroler ATMEGA16
Menampilkan Karakter pada  Lcd dengan Mikrokontroler ATMEGA16Menampilkan Karakter pada  Lcd dengan Mikrokontroler ATMEGA16
Menampilkan Karakter pada Lcd dengan Mikrokontroler ATMEGA16
 
72681707 jam-digital-at-mega-16
72681707 jam-digital-at-mega-1672681707 jam-digital-at-mega-16
72681707 jam-digital-at-mega-16
 
Pemahaman Dasar Mikrokontroler
Pemahaman Dasar MikrokontrolerPemahaman Dasar Mikrokontroler
Pemahaman Dasar Mikrokontroler
 
Dasar dasar mikrokontroler
Dasar dasar mikrokontrolerDasar dasar mikrokontroler
Dasar dasar mikrokontroler
 
Presentasi Mikrokontroler
Presentasi MikrokontrolerPresentasi Mikrokontroler
Presentasi Mikrokontroler
 
Membuat sensor suhu lm 35 menggunakan at mega
Membuat sensor suhu lm 35 menggunakan at megaMembuat sensor suhu lm 35 menggunakan at mega
Membuat sensor suhu lm 35 menggunakan at mega
 
Laporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan ledLaporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan led
 
Mikroprosesor Zilog Z80
Mikroprosesor Zilog Z80Mikroprosesor Zilog Z80
Mikroprosesor Zilog Z80
 
PROYEK1
PROYEK1PROYEK1
PROYEK1
 
Arsitektur mikro z80
Arsitektur mikro z80Arsitektur mikro z80
Arsitektur mikro z80
 
Mikrokontroler pertemuan 7
Mikrokontroler pertemuan 7Mikrokontroler pertemuan 7
Mikrokontroler pertemuan 7
 
Bahan ajar
Bahan ajarBahan ajar
Bahan ajar
 
Tutorial at89s51
Tutorial at89s51Tutorial at89s51
Tutorial at89s51
 

Destacado

Seguridad pública
Seguridad públicaSeguridad pública
Seguridad públicaTom Cruz
 
Manual planificacion estrategica ILPES
Manual planificacion estrategica ILPESManual planificacion estrategica ILPES
Manual planificacion estrategica ILPESgretubela
 
Chap 14 -Bustle & 90s
Chap 14 -Bustle & 90sChap 14 -Bustle & 90s
Chap 14 -Bustle & 90sSara
 
Service marketing management of amazon
Service marketing management of amazonService marketing management of amazon
Service marketing management of amazonBendita Baylôn Ü
 
Propuesta De Mejora Y De Objetivos Unidad Formacion
Propuesta De Mejora Y De Objetivos  Unidad  FormacionPropuesta De Mejora Y De Objetivos  Unidad  Formacion
Propuesta De Mejora Y De Objetivos Unidad Formacionguestcf8756
 
2 swk 4440 intro historical
2 swk 4440  intro historical2 swk 4440  intro historical
2 swk 4440 intro historicalkerianne29
 
Conga diapositivas
Conga diapositivasConga diapositivas
Conga diapositivaseder510
 
Proceso de sulfonación. monografia
Proceso de sulfonación. monografiaProceso de sulfonación. monografia
Proceso de sulfonación. monografiaEdda07
 
Water, Air and Noise Pollution
Water, Air and Noise PollutionWater, Air and Noise Pollution
Water, Air and Noise PollutionGeorge Majunting
 
Geografia Comipems
Geografia ComipemsGeografia Comipems
Geografia ComipemsToño Avilix
 
Medios y recursos para la investigacion 2a unidad
Medios y recursos para la investigacion 2a unidadMedios y recursos para la investigacion 2a unidad
Medios y recursos para la investigacion 2a unidadNelly Alejandra
 
Boletin B Secretaria de la Funcion Publica
Boletin B Secretaria de la Funcion PublicaBoletin B Secretaria de la Funcion Publica
Boletin B Secretaria de la Funcion PublicaJOVIMECARCH
 
Finding Top Talent with Facebook and Twitter Recruitment Strategies
Finding Top Talent with Facebook and Twitter Recruitment StrategiesFinding Top Talent with Facebook and Twitter Recruitment Strategies
Finding Top Talent with Facebook and Twitter Recruitment StrategiesIdentified4Employers
 
English teaching academic esl writing practical techniques in vocabulary an...
English   teaching academic esl writing practical techniques in vocabulary an...English   teaching academic esl writing practical techniques in vocabulary an...
English teaching academic esl writing practical techniques in vocabulary an...Roger B Rueda
 
Estadistica y pronostico para la toma de decisiones
Estadistica y pronostico para la toma de decisionesEstadistica y pronostico para la toma de decisiones
Estadistica y pronostico para la toma de decisionesMaestros Online
 
Proyecto de aula creciendo con amor
Proyecto de aula creciendo con amorProyecto de aula creciendo con amor
Proyecto de aula creciendo con amorAdriana Pulido
 

Destacado (20)

Seguridad pública
Seguridad públicaSeguridad pública
Seguridad pública
 
Manual planificacion estrategica ILPES
Manual planificacion estrategica ILPESManual planificacion estrategica ILPES
Manual planificacion estrategica ILPES
 
Chap 14 -Bustle & 90s
Chap 14 -Bustle & 90sChap 14 -Bustle & 90s
Chap 14 -Bustle & 90s
 
Moral Systems
Moral SystemsMoral Systems
Moral Systems
 
Service marketing management of amazon
Service marketing management of amazonService marketing management of amazon
Service marketing management of amazon
 
Propuesta De Mejora Y De Objetivos Unidad Formacion
Propuesta De Mejora Y De Objetivos  Unidad  FormacionPropuesta De Mejora Y De Objetivos  Unidad  Formacion
Propuesta De Mejora Y De Objetivos Unidad Formacion
 
2 swk 4440 intro historical
2 swk 4440  intro historical2 swk 4440  intro historical
2 swk 4440 intro historical
 
Conga diapositivas
Conga diapositivasConga diapositivas
Conga diapositivas
 
Proceso de sulfonación. monografia
Proceso de sulfonación. monografiaProceso de sulfonación. monografia
Proceso de sulfonación. monografia
 
Water, Air and Noise Pollution
Water, Air and Noise PollutionWater, Air and Noise Pollution
Water, Air and Noise Pollution
 
Geografia Comipems
Geografia ComipemsGeografia Comipems
Geografia Comipems
 
Medios y recursos para la investigacion 2a unidad
Medios y recursos para la investigacion 2a unidadMedios y recursos para la investigacion 2a unidad
Medios y recursos para la investigacion 2a unidad
 
Boletin B Secretaria de la Funcion Publica
Boletin B Secretaria de la Funcion PublicaBoletin B Secretaria de la Funcion Publica
Boletin B Secretaria de la Funcion Publica
 
Finding Top Talent with Facebook and Twitter Recruitment Strategies
Finding Top Talent with Facebook and Twitter Recruitment StrategiesFinding Top Talent with Facebook and Twitter Recruitment Strategies
Finding Top Talent with Facebook and Twitter Recruitment Strategies
 
Tipos de principios geográficos
Tipos de principios geográficosTipos de principios geográficos
Tipos de principios geográficos
 
English teaching academic esl writing practical techniques in vocabulary an...
English   teaching academic esl writing practical techniques in vocabulary an...English   teaching academic esl writing practical techniques in vocabulary an...
English teaching academic esl writing practical techniques in vocabulary an...
 
La Erosion
La ErosionLa Erosion
La Erosion
 
Estadistica y pronostico para la toma de decisiones
Estadistica y pronostico para la toma de decisionesEstadistica y pronostico para la toma de decisiones
Estadistica y pronostico para la toma de decisiones
 
Proyecto de aula creciendo con amor
Proyecto de aula creciendo con amorProyecto de aula creciendo con amor
Proyecto de aula creciendo con amor
 
Trabajo de analisis
Trabajo de analisisTrabajo de analisis
Trabajo de analisis
 

Similar a Basic avr-microcontroller-tutorial 8535

Presentasi dan video pembelajaran Mikrokontroller
Presentasi dan video pembelajaran MikrokontrollerPresentasi dan video pembelajaran Mikrokontroller
Presentasi dan video pembelajaran Mikrokontrollerirsyadsyawal1
 
Laporan Praktikum Robot Maju Mundur menggunakan ATMega16
Laporan Praktikum Robot Maju Mundur menggunakan ATMega16Laporan Praktikum Robot Maju Mundur menggunakan ATMega16
Laporan Praktikum Robot Maju Mundur menggunakan ATMega16Sidiksetiyono17
 
M I C R O C O N T R O L L E R 2009new
M I C R O C O N T R O L L E R 2009newM I C R O C O N T R O L L E R 2009new
M I C R O C O N T R O L L E R 2009newDeddy Susilo
 
Laporan Praktikum konveyor maju mundur menggunakan atmega16
Laporan Praktikum konveyor maju mundur menggunakan atmega16Laporan Praktikum konveyor maju mundur menggunakan atmega16
Laporan Praktikum konveyor maju mundur menggunakan atmega16Sidiksetiyono17
 
Traffic Light Berbasis ATMega32A
Traffic Light Berbasis ATMega32ATraffic Light Berbasis ATMega32A
Traffic Light Berbasis ATMega32AAmmazizzaky Tarigan
 
Mikroprosesor &amp; mikrokomputer
Mikroprosesor &amp; mikrokomputerMikroprosesor &amp; mikrokomputer
Mikroprosesor &amp; mikrokomputeragus ismangil
 
Avr8535
Avr8535Avr8535
Avr8535ferry
 
Mikrokontroler Atmega16 Lampu Deret Kedip-kedip
Mikrokontroler Atmega16 Lampu Deret Kedip-kedipMikrokontroler Atmega16 Lampu Deret Kedip-kedip
Mikrokontroler Atmega16 Lampu Deret Kedip-kedipSitiAmaliaPangestu
 
Lampu Berjalan Dengan ATMega16
Lampu Berjalan Dengan ATMega16Lampu Berjalan Dengan ATMega16
Lampu Berjalan Dengan ATMega16Alvinnonp
 
Percobaan 12 led berbasis ATMega16 - BascomeAVR
Percobaan 12 led berbasis ATMega16 - BascomeAVRPercobaan 12 led berbasis ATMega16 - BascomeAVR
Percobaan 12 led berbasis ATMega16 - BascomeAVRMaesaroh9
 
TUGAS MIKROPROSESOR M ADITYA ZACKY.pptx
TUGAS MIKROPROSESOR M ADITYA ZACKY.pptxTUGAS MIKROPROSESOR M ADITYA ZACKY.pptx
TUGAS MIKROPROSESOR M ADITYA ZACKY.pptxAdityaZacky1
 
Pert.5 set instruksi arm,motorolla dan intel
Pert.5 set instruksi arm,motorolla dan intelPert.5 set instruksi arm,motorolla dan intel
Pert.5 set instruksi arm,motorolla dan intelIcal Militanmannojack
 
Pertemuan 14-sistem-embedded
Pertemuan 14-sistem-embeddedPertemuan 14-sistem-embedded
Pertemuan 14-sistem-embeddedFrance Rhezhek
 
Perancangan dan pembuatan alat keamanan kendaraan
Perancangan dan pembuatan alat keamanan kendaraanPerancangan dan pembuatan alat keamanan kendaraan
Perancangan dan pembuatan alat keamanan kendaraanMiltha Adhilla Adhilla
 
Percobaan 12 led berbasis a tmega16
Percobaan 12 led berbasis a tmega16Percobaan 12 led berbasis a tmega16
Percobaan 12 led berbasis a tmega16DelaOktavia1
 
Cara membuat simulasi lcd running text dengan menggunakan proteus
Cara membuat simulasi lcd running text dengan menggunakan proteusCara membuat simulasi lcd running text dengan menggunakan proteus
Cara membuat simulasi lcd running text dengan menggunakan proteusFilla Fidyana
 
Kertas penerangan c02 Microprcessor
Kertas penerangan c02 MicroprcessorKertas penerangan c02 Microprcessor
Kertas penerangan c02 Microprcessormuhammad sofi
 

Similar a Basic avr-microcontroller-tutorial 8535 (20)

Presentasi dan video pembelajaran Mikrokontroller
Presentasi dan video pembelajaran MikrokontrollerPresentasi dan video pembelajaran Mikrokontroller
Presentasi dan video pembelajaran Mikrokontroller
 
Sensor suhu LM 35
Sensor suhu LM 35Sensor suhu LM 35
Sensor suhu LM 35
 
Laporan Praktikum Robot Maju Mundur menggunakan ATMega16
Laporan Praktikum Robot Maju Mundur menggunakan ATMega16Laporan Praktikum Robot Maju Mundur menggunakan ATMega16
Laporan Praktikum Robot Maju Mundur menggunakan ATMega16
 
M I C R O C O N T R O L L E R 2009new
M I C R O C O N T R O L L E R 2009newM I C R O C O N T R O L L E R 2009new
M I C R O C O N T R O L L E R 2009new
 
Laporan Praktikum konveyor maju mundur menggunakan atmega16
Laporan Praktikum konveyor maju mundur menggunakan atmega16Laporan Praktikum konveyor maju mundur menggunakan atmega16
Laporan Praktikum konveyor maju mundur menggunakan atmega16
 
Traffic Light Berbasis ATMega32A
Traffic Light Berbasis ATMega32ATraffic Light Berbasis ATMega32A
Traffic Light Berbasis ATMega32A
 
Laporan Joystick
Laporan JoystickLaporan Joystick
Laporan Joystick
 
Mikroprosesor &amp; mikrokomputer
Mikroprosesor &amp; mikrokomputerMikroprosesor &amp; mikrokomputer
Mikroprosesor &amp; mikrokomputer
 
Avr8535
Avr8535Avr8535
Avr8535
 
Mikrokontroler Atmega16 Lampu Deret Kedip-kedip
Mikrokontroler Atmega16 Lampu Deret Kedip-kedipMikrokontroler Atmega16 Lampu Deret Kedip-kedip
Mikrokontroler Atmega16 Lampu Deret Kedip-kedip
 
Lampu Berjalan Dengan ATMega16
Lampu Berjalan Dengan ATMega16Lampu Berjalan Dengan ATMega16
Lampu Berjalan Dengan ATMega16
 
Percobaan 12 led berbasis ATMega16 - BascomeAVR
Percobaan 12 led berbasis ATMega16 - BascomeAVRPercobaan 12 led berbasis ATMega16 - BascomeAVR
Percobaan 12 led berbasis ATMega16 - BascomeAVR
 
TUGAS MIKROPROSESOR M ADITYA ZACKY.pptx
TUGAS MIKROPROSESOR M ADITYA ZACKY.pptxTUGAS MIKROPROSESOR M ADITYA ZACKY.pptx
TUGAS MIKROPROSESOR M ADITYA ZACKY.pptx
 
Pert.5 set instruksi arm,motorolla dan intel
Pert.5 set instruksi arm,motorolla dan intelPert.5 set instruksi arm,motorolla dan intel
Pert.5 set instruksi arm,motorolla dan intel
 
Pertemuan 14-sistem-embedded
Pertemuan 14-sistem-embeddedPertemuan 14-sistem-embedded
Pertemuan 14-sistem-embedded
 
Perancangan dan pembuatan alat keamanan kendaraan
Perancangan dan pembuatan alat keamanan kendaraanPerancangan dan pembuatan alat keamanan kendaraan
Perancangan dan pembuatan alat keamanan kendaraan
 
Percobaan 12 led berbasis a tmega16
Percobaan 12 led berbasis a tmega16Percobaan 12 led berbasis a tmega16
Percobaan 12 led berbasis a tmega16
 
Cara membuat simulasi lcd running text dengan menggunakan proteus
Cara membuat simulasi lcd running text dengan menggunakan proteusCara membuat simulasi lcd running text dengan menggunakan proteus
Cara membuat simulasi lcd running text dengan menggunakan proteus
 
Mp 5 memori
Mp 5 memoriMp 5 memori
Mp 5 memori
 
Kertas penerangan c02 Microprcessor
Kertas penerangan c02 MicroprcessorKertas penerangan c02 Microprcessor
Kertas penerangan c02 Microprcessor
 

Más de LAZY MAGICIAN

Buku pegangan-kuliah-dasar-mikroprosesor-lengkap
Buku pegangan-kuliah-dasar-mikroprosesor-lengkapBuku pegangan-kuliah-dasar-mikroprosesor-lengkap
Buku pegangan-kuliah-dasar-mikroprosesor-lengkapLAZY MAGICIAN
 
Dasar dasar mikroprosesor
Dasar dasar mikroprosesorDasar dasar mikroprosesor
Dasar dasar mikroprosesorLAZY MAGICIAN
 
Membuat robot-tidak-susah
Membuat robot-tidak-susahMembuat robot-tidak-susah
Membuat robot-tidak-susahLAZY MAGICIAN
 
Pengukuran sudut bab3
Pengukuran sudut bab3Pengukuran sudut bab3
Pengukuran sudut bab3LAZY MAGICIAN
 
Pengukuran roda gigi bab5
Pengukuran roda gigi bab5Pengukuran roda gigi bab5
Pengukuran roda gigi bab5LAZY MAGICIAN
 
Pengukuran linier bab2
Pengukuran linier bab2Pengukuran linier bab2
Pengukuran linier bab2LAZY MAGICIAN
 
Pengukuran kelurusan bab6
Pengukuran kelurusan bab6Pengukuran kelurusan bab6
Pengukuran kelurusan bab6LAZY MAGICIAN
 
Pengukuran kekasaran permukaan bab7
Pengukuran kekasaran permukaan bab7Pengukuran kekasaran permukaan bab7
Pengukuran kekasaran permukaan bab7LAZY MAGICIAN
 
Materi perkuliahan metrologi industri bab1
Materi perkuliahan  metrologi industri bab1Materi perkuliahan  metrologi industri bab1
Materi perkuliahan metrologi industri bab1LAZY MAGICIAN
 
Pengukuran ulir bab4
Pengukuran ulir bab4Pengukuran ulir bab4
Pengukuran ulir bab4LAZY MAGICIAN
 
landasan pendidikan.pip .05
landasan pendidikan.pip .05landasan pendidikan.pip .05
landasan pendidikan.pip .05LAZY MAGICIAN
 

Más de LAZY MAGICIAN (12)

Buku pegangan-kuliah-dasar-mikroprosesor-lengkap
Buku pegangan-kuliah-dasar-mikroprosesor-lengkapBuku pegangan-kuliah-dasar-mikroprosesor-lengkap
Buku pegangan-kuliah-dasar-mikroprosesor-lengkap
 
Dasar dasar mikroprosesor
Dasar dasar mikroprosesorDasar dasar mikroprosesor
Dasar dasar mikroprosesor
 
Membuat robot-tidak-susah
Membuat robot-tidak-susahMembuat robot-tidak-susah
Membuat robot-tidak-susah
 
Pengukuran sudut bab3
Pengukuran sudut bab3Pengukuran sudut bab3
Pengukuran sudut bab3
 
Pengukuran roda gigi bab5
Pengukuran roda gigi bab5Pengukuran roda gigi bab5
Pengukuran roda gigi bab5
 
Pengukuran linier bab2
Pengukuran linier bab2Pengukuran linier bab2
Pengukuran linier bab2
 
Pengukuran kelurusan bab6
Pengukuran kelurusan bab6Pengukuran kelurusan bab6
Pengukuran kelurusan bab6
 
Pengukuran kekasaran permukaan bab7
Pengukuran kekasaran permukaan bab7Pengukuran kekasaran permukaan bab7
Pengukuran kekasaran permukaan bab7
 
Pendahuluan bab1
Pendahuluan bab1Pendahuluan bab1
Pendahuluan bab1
 
Materi perkuliahan metrologi industri bab1
Materi perkuliahan  metrologi industri bab1Materi perkuliahan  metrologi industri bab1
Materi perkuliahan metrologi industri bab1
 
Pengukuran ulir bab4
Pengukuran ulir bab4Pengukuran ulir bab4
Pengukuran ulir bab4
 
landasan pendidikan.pip .05
landasan pendidikan.pip .05landasan pendidikan.pip .05
landasan pendidikan.pip .05
 

Último

Teori Pembakaran bahan kimia organik .ppt
Teori Pembakaran bahan kimia organik .pptTeori Pembakaran bahan kimia organik .ppt
Teori Pembakaran bahan kimia organik .pptEndarto Yudo
 
Thermodynamics analysis of energy, entropy and exergy
Thermodynamics analysis of energy, entropy and exergyThermodynamics analysis of energy, entropy and exergy
Thermodynamics analysis of energy, entropy and exergyEndarto Yudo
 
Minggu 5 Pepistimlogy berbasis wawasan politik_Ekonomi.pptx
Minggu 5 Pepistimlogy berbasis wawasan politik_Ekonomi.pptxMinggu 5 Pepistimlogy berbasis wawasan politik_Ekonomi.pptx
Minggu 5 Pepistimlogy berbasis wawasan politik_Ekonomi.pptxRahmiAulia20
 
Normalisasi Database dan pengertian database
Normalisasi Database dan pengertian databaseNormalisasi Database dan pengertian database
Normalisasi Database dan pengertian databasethinkplusx1
 
MATERI PRESENTASI KEPALA TEKNIK TAMBANG KEPMEN 555
MATERI PRESENTASI KEPALA TEKNIK TAMBANG KEPMEN 555MATERI PRESENTASI KEPALA TEKNIK TAMBANG KEPMEN 555
MATERI PRESENTASI KEPALA TEKNIK TAMBANG KEPMEN 555zannialzur
 
PPT PPT Pelaksana lapangan Pekerasan Jalan Beton lvl 6.pptx
PPT PPT Pelaksana lapangan Pekerasan Jalan Beton lvl 6.pptxPPT PPT Pelaksana lapangan Pekerasan Jalan Beton lvl 6.pptx
PPT PPT Pelaksana lapangan Pekerasan Jalan Beton lvl 6.pptxdpcaskonasoki
 
PPT Manajemen Konstruksi Unsur Unsur Proyek 1.pptx
PPT Manajemen Konstruksi Unsur Unsur Proyek 1.pptxPPT Manajemen Konstruksi Unsur Unsur Proyek 1.pptx
PPT Manajemen Konstruksi Unsur Unsur Proyek 1.pptxHamidNurMukhlis
 
MEKANIKA TEKNIK TEKNIK PERTAMBANGAN FAK. TEKNIK
MEKANIKA TEKNIK TEKNIK PERTAMBANGAN FAK. TEKNIKMEKANIKA TEKNIK TEKNIK PERTAMBANGAN FAK. TEKNIK
MEKANIKA TEKNIK TEKNIK PERTAMBANGAN FAK. TEKNIKFerdinandus9
 
Klasifikasi jenis pompa berdasarkan cara kerjanya
Klasifikasi jenis pompa berdasarkan cara kerjanyaKlasifikasi jenis pompa berdasarkan cara kerjanya
Klasifikasi jenis pompa berdasarkan cara kerjanyafaizalabdillah10
 
QCC MANAJEMEN TOOL MAINTENANCE (MAINTENANCE TEAM).pptx
QCC MANAJEMEN TOOL MAINTENANCE (MAINTENANCE TEAM).pptxQCC MANAJEMEN TOOL MAINTENANCE (MAINTENANCE TEAM).pptx
QCC MANAJEMEN TOOL MAINTENANCE (MAINTENANCE TEAM).pptxdjam11
 
Analisis Struktur Statis Tak Tentu dengan Force Method.pdf
Analisis Struktur Statis Tak Tentu dengan Force Method.pdfAnalisis Struktur Statis Tak Tentu dengan Force Method.pdf
Analisis Struktur Statis Tak Tentu dengan Force Method.pdfAgusTriyono78
 

Último (11)

Teori Pembakaran bahan kimia organik .ppt
Teori Pembakaran bahan kimia organik .pptTeori Pembakaran bahan kimia organik .ppt
Teori Pembakaran bahan kimia organik .ppt
 
Thermodynamics analysis of energy, entropy and exergy
Thermodynamics analysis of energy, entropy and exergyThermodynamics analysis of energy, entropy and exergy
Thermodynamics analysis of energy, entropy and exergy
 
Minggu 5 Pepistimlogy berbasis wawasan politik_Ekonomi.pptx
Minggu 5 Pepistimlogy berbasis wawasan politik_Ekonomi.pptxMinggu 5 Pepistimlogy berbasis wawasan politik_Ekonomi.pptx
Minggu 5 Pepistimlogy berbasis wawasan politik_Ekonomi.pptx
 
Normalisasi Database dan pengertian database
Normalisasi Database dan pengertian databaseNormalisasi Database dan pengertian database
Normalisasi Database dan pengertian database
 
MATERI PRESENTASI KEPALA TEKNIK TAMBANG KEPMEN 555
MATERI PRESENTASI KEPALA TEKNIK TAMBANG KEPMEN 555MATERI PRESENTASI KEPALA TEKNIK TAMBANG KEPMEN 555
MATERI PRESENTASI KEPALA TEKNIK TAMBANG KEPMEN 555
 
PPT PPT Pelaksana lapangan Pekerasan Jalan Beton lvl 6.pptx
PPT PPT Pelaksana lapangan Pekerasan Jalan Beton lvl 6.pptxPPT PPT Pelaksana lapangan Pekerasan Jalan Beton lvl 6.pptx
PPT PPT Pelaksana lapangan Pekerasan Jalan Beton lvl 6.pptx
 
PPT Manajemen Konstruksi Unsur Unsur Proyek 1.pptx
PPT Manajemen Konstruksi Unsur Unsur Proyek 1.pptxPPT Manajemen Konstruksi Unsur Unsur Proyek 1.pptx
PPT Manajemen Konstruksi Unsur Unsur Proyek 1.pptx
 
MEKANIKA TEKNIK TEKNIK PERTAMBANGAN FAK. TEKNIK
MEKANIKA TEKNIK TEKNIK PERTAMBANGAN FAK. TEKNIKMEKANIKA TEKNIK TEKNIK PERTAMBANGAN FAK. TEKNIK
MEKANIKA TEKNIK TEKNIK PERTAMBANGAN FAK. TEKNIK
 
Klasifikasi jenis pompa berdasarkan cara kerjanya
Klasifikasi jenis pompa berdasarkan cara kerjanyaKlasifikasi jenis pompa berdasarkan cara kerjanya
Klasifikasi jenis pompa berdasarkan cara kerjanya
 
QCC MANAJEMEN TOOL MAINTENANCE (MAINTENANCE TEAM).pptx
QCC MANAJEMEN TOOL MAINTENANCE (MAINTENANCE TEAM).pptxQCC MANAJEMEN TOOL MAINTENANCE (MAINTENANCE TEAM).pptx
QCC MANAJEMEN TOOL MAINTENANCE (MAINTENANCE TEAM).pptx
 
Analisis Struktur Statis Tak Tentu dengan Force Method.pdf
Analisis Struktur Statis Tak Tentu dengan Force Method.pdfAnalisis Struktur Statis Tak Tentu dengan Force Method.pdf
Analisis Struktur Statis Tak Tentu dengan Force Method.pdf
 

Basic avr-microcontroller-tutorial 8535

  • 1. Basic AVR Microcontroller Tutorial Oleh : Hendawan Soebhakti, ST Agustus 2007 Parkway Street, Batam Centre Batam 29461 Telp. 62-778 469856 – 469861 Fax. 62-778 463620 http://www.polibatam.ac.id
  • 2. Basic AVR Tutorial by Hendawan Soebhakti Page 2 of 68 Electrical Engineering – Batam Polytechnic DAFTAR ISI 1. AVR ATMega 8535L 2. Operasi Aritmatika, Logika dan Percabangan 3. Interupsi 4. Timer/Counter 5. Pengendalian Motor Stepper 6. LCD 16x2 7. PWM dan Pengendalian Motor DC 8. Motor Servo 9. Keypad 10. Komunikasi Serial USART
  • 3. Basic AVR Tutorial by Hendawan Soebhakti Page 3 of 68 Electrical Engineering – Batam Polytechnic BAB I AVR ATMega 8535L 1.1 Sekilas Tentang AVR AVR : Alf and Vegard RISC atau AVR : Advanced Virtual RISC RISC: Reduced Instruction Set Computer Arsitektur mikrokontroler jenis AVR pertamakali dikembangkan pada tahun 1996 oleh dua orang mahasiswa Norwegian Institute of Technology yaitu Alf-Egil Bogen dan Vegard Wollan. Mikrokontroler AVR kemudian dikembangkan lebih lanjut oleh Atmel. Seri pertama AVR yang dikeluarkan adalah mikrokontroler 8 bit AT90S8515, dengan konfigurasi pin yang sama dengan mikrokontroler 8051, termasuk address dan data bus yang termultipleksi. Mikrokontroler AVR menggunakan teknologi RISC dimana set instruksinya dikurangi dari segi ukurannya dan kompleksitas mode pengalamatannya. Pada awal era industri komputer, bahasa pemrograman masih menggunakan kode mesin dan bahasa assembly. Untuk mempermudah dalam pemrograman para desainer komputer kemudian mengembangkan bahasa pemrograman tingkat tinggi yang mudah dipahami manusia. Namun akibatnya, instruksi yang ada menjadi semakin komplek dan membutuhkan lebih banyak memori. Dan tentu saja siklus eksekusi instruksinya menjadi semakin lama. Dalam AVR dengan arsitektur RISC 8 bit, semua instruksi berukuran 16 bit dan sebagian besar dieksekusi dalam 1 siklus clock. Berbeda dengan mikrokontroler MCS-51 yang instruksinya bervariasi antara 8 bit sampai 32 bit dan dieksekusi selama 1 sampai 4 siklus mesin, dimana 1 siklus mesin membutuhkan 12 periode clock. Dalam perkembangannya, AVR dibagi menjadi beberapa varian yaitu AT90Sxx, ATMega, AT86RFxx dan ATTiny. Pada dasarnya yang membedakan masing-masing varian adalah kapasitas memori dan beberapa fitur tambahan saja. 1.2 Karakteristik mikrokontroler AVR seri ATMega8535 1.2.1 Fitur ATMega8535 Fitur yang tersedia pada ATMega 8535 adalah : • Frekuensi clock maksimum 16 MHz • Jalur I/O 32 buah, yang terbagi dalam PortA, PortB, PortC dan PortD • Analog to Digital Converter 10 bit sebanyak 8 input • Timer/Counter sebanyak 3 buah • CPU 8 bit yang terdiri dari 32 register • Watchdog Timer dengan osilator internal • SRAM sebesar 512 byte • Memori Flash sebesar 8 Kbyte dengan kemampuan read while write • Interrupt internal maupun eksternal • Port komunikasi SPI • EEPROM sebesar 512 byte yang dapat diprogram saat operasi • Analog Comparator • Komunikasi serial standar USART dengan kecepatan maksimal 2,5 Mbps
  • 4. Basic AVR Tutorial by Hendawan Soebhakti Page 4 of 68 Electrical Engineering – Batam Polytechnic 1.2.2 Konfigurasi Pin ATMega8535 Gambar 1.1 Konfigurasi Pin ATMega8535 1.2.3 Peta Memori ATMega8535 ATMega8535 memiliki dua jenis memori yaitu Data Memory dan Program Memory ditambah satu fitur tambahan yaitu EEPROM Memory untuk penyimpan data. • Program Memory ATMega8535 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 pertamakali diaktifkan. Application Flash Section digunakan untuk menyimpan program aplikasi yang dibuat user. AVR tidak dapat menjalankan program aplikasi ini sebelum menjalankan program Boot Loader. Besarnya memori Boot Flash Section dapat diprogram 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. Gambar 1.2 Peta Program Memory
  • 5. Basic AVR Tutorial by Hendawan Soebhakti Page 5 of 68 Electrical Engineering – Batam Polytechnic • Data Memory Gambar berikut menunjukkan peta memori SRAM pada ATMega8535. Terdapat 608 lokasi address data memori. 96 lokasi address digunakan untuk Register File dan I/O Memory sementara 512 lokasi address lainnya digunakan untuk internal data SRAM. Register File terdiri dari 32 general purpose working register, I/O register terdiri dari 64 register. Gambar 1.3 Peta Data Memory • EEPROM Data Memory ATMega8535 memiliki EEPROM sebesar 512 byte untuk menyimpan data. Lokasinya terpisah dengan sistem address register, data register dan control register yang dibuat khusus untuk EEPROM. 1.3 Status Register (SREG) Status Register adalah register yang memberikan informasi yang dihasilkan dari eksekusi instuksi aritmatika. Informasi ini berguna untuk mencari alternatif alur program sesuai dengan kondisi yang dihadapi. Bit 7 – I : Global Interrupt Enable Jika bit Global Interrupt Enable diset, maka fasilitas interupsi dapat dijalankan. Bit ini akan clear ketika ada interrupt yang dipicu dari hardware, setelah program interrupt dieksekusi, maka bit ini harus di set kembali dengan instruksi SEI. Bit 6 – T : Bit Copy Storage Instruksi bit copy BLD dan BST menggunakan bit T sebagai sumber atau tujuan dalam operasi bit. Bit 5 – H : Half Carry Flag
  • 6. Basic AVR Tutorial by Hendawan Soebhakti Page 6 of 68 Electrical Engineering – Batam Polytechnic Bit 4 – S : Sign Bit Bit S merupakan hasil exlusive or dari Negative Flag N dan Two’s Complement Overflow Flag V. Bit 3 – V : Two’s Complement Overflow Flag Digunakan dalam operasi aritmatika Bit 2 – N : Negative Flag Jika operasi aritmatika menghasilkan bilangan negatif, maka bit ini akan set. Bit 1 – Z : Zero Flag Jika operasi aritmatika menghaslkan bilangan nol, maka bit ini akan set. 1.4 Bahasa Assembly AVR Bahasa yang dipakai untuk memprogram mikrokontroler AVR adalah bahasa assembly AVR atau bahasa C. Dalam buku ini semua program ditulis dalam bahasa assembly AVR. Berikut adalah contoh sebuah program aplikasi untuk mikrokontroler AVR : .include “m8535def.inc” .org 0x0000 rjmp main Inisialisasi program main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0xff out ddra,r16 Program utama out PortA,r16 cbi PortA,0 cbi PortA,1 stop: rjmp stop Sebuah program harus terdiri dari dua bagian, yaitu inisialisasi program dan program utama. Inisialisasi program harus disertakan agar program utama dapat berjalan. Berikut adalah urutan langkah inisialisasi program : 1. Menentukan jenis mikrokontroler yang digunakan dengan cara memasukkan file definisi device (m8535def.inc) ke dalam program utama. .include “m8535def.inc” ; 2. Menuliskan original address program, yaitu 0x0000. Kemudian dilanjutkan dengan instruksi rjmp / relative jump ke label main. Hal ini dimaksudkan agar program memory tidak tumpang tindih dengan data memory. .org 0x0000 rjmp main 3. Menentukan isi Stack Pointer dengan address terakhir RAM (RAMEND). Untuk ATMega8535 yaitu 0x025F. Ini dimaksudkan agar program utama mulai ditulis setelah address terakhir RAM. main: ldi r16,low(RAMEND) ; low byte address RAM = 5F out SPL,r16 ldi r16,high(RAMEND) ; high byte address RAM = 02 out SPH,r16
  • 7. Basic AVR Tutorial by Hendawan Soebhakti Page 7 of 68 Electrical Engineering – Batam Polytechnic BAB II Operasi Port Input Output 2.1 Register I/O Setiap port ATMega8535 terdiri dari 3 register I/O yaitu DDRx, Portx dan PINx. • DDRx (Data Direction Register) Register DDRx digunakan untuk memilih arah pin. Jika DDRx = 1 maka Pxn sebagai pin output Jika DDRx = 0 maka Pxn sebagai input. • Portx (Port Data Register) Register Portx digunakan untuk 2 keperluan yaitu untuk jalur output atau untuk mengaktifkan resistor pullup. 1. Portx berfungsi sebagai output jika DDRx = 1 maka : Portxn = 1 maka pin Pxn akan berlogika high. Portxn = 0 maka pin Pxn akan berlogika low. 2. Portx berfungsi untuk mengaktifkan resistor pullup jika DDRx = 0 maka : Portxn = 1 maka pin Pxn sebagai pin input dengan resistor pull up. Portxn = 0 maka pin Pxn sebagai output tanpa resistor pull up. Tabel 2.1 Konfigurasi Port DDRxn Portxn I/O Pull up Comment 0 0 Input No Tri state (Hi-Z) 0 1 Input Yes Pull up aktif 1 0 Output No Output Low 1 1 Output No Output High Catatan : x menunjukkan nama port (A,B,C,D) n menunjukkan nomor bit (0,1,2,3,4,5,6,7) Nilai awal (initial value) seluruh register I/O adalah 00h. • PINx (Port Input Pin Address) Digunakan sebagai register input. 2.2 Instruksi I/O in : membaca data I/O port ke dalam register contoh : in r16,PinA out : menulis data register ke I/O port contoh : out PortA,r16 ldi : (load immediate) : menulis konstanta ke register sebelum konstanta tersebut dikeluarkan ke I/O port contoh : ldi r16,0xff sbi : (set bit in I/O) : membuat logika high pada sebuah bit I/O port contoh : sbi PortB,7 cbi : (clear bit in I/O) : membuat logika low pada sebuah bit I/O port contoh : cbi PortB,5 sbic : (skip if bit in I/O is clear) : lompati satu instruksi jika bit I/O port dalam kondisi clear/low contoh : sbic PortA,3 sbis : (skip if bit in I/O is set) : lompati satu instruksi jika bit I/O port dalam kondisi set/high contoh : sbis PortB,3
  • 8. Basic AVR Tutorial by Hendawan Soebhakti Page 8 of 68 Electrical Engineering – Batam Polytechnic Contoh Program 1: .include "m8535def.inc" .org 0x00 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0x00 out ddra,r16 ; PortA as input ldi r16,0xff out ddrb,r16 ; PortB as output out ddrc,r16 ; PortC as output ulang: in r16,PortA out PortB,r16 ldi r16,0x0f out PortC,r16 cbi PortC,0 sbic PortA,5 cbi PortC,1 sbi PortC,6 sbis PortA,5 sbi PortC,7 ldi r16,0x00 out PortB,r16 out PortC,r16 rjmp ulang Latihan : 1. Buatlah program agar dapat membaca data pada PortC dan mengeluarkan data tersebut pada PortA. 2. Buatlah program agar PortA mengeluarkan data 20h jika PortB,1 berlogika 0. 3. Buatlah program agar PortA mengeluarkan data 15h jika PortC,1 dan PortD,2 berlogika 1, selain kondisi tersebut PortA mengeluarkan data 00h.
  • 9. Basic AVR Tutorial by Hendawan Soebhakti Page 9 of 68 Electrical Engineering – Batam Polytechnic Jawaban Latihan no 3: .include "m8535def.inc" .org 0x00 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0xff out ddra,r16 ; PortA as output ldi r16,0x00 out ddrc,r16 ; PortC as output out ddrd,r16 ; PortD as output ldi r16,0x00 ldi r17,0x15 ulang: sbis PortC,1 rjmp ulang1 sbis PortD,2 rjmp ulang1 out PortA,r17 rjmp ulang ulang1: out PortA,r16 rjmp ulang
  • 10. Basic AVR Tutorial by Hendawan Soebhakti Page 10 of 68 Electrical Engineering – Batam Polytechnic BAB III Operasi Aritmatika 3.1 Operasi Aritmatika Instruksi Aritmatika add : Menambahkan isi dua register. Contoh : add r15,r14 ; r15=r15+r14 adc : Menambahkan isi dua register dan isi carry flag Contoh : adc r15,r14 ; r15=r15+r14+C sub : Mengurangi isi dua register. Contoh : sub r19,r14 ; r19=r19-r14 mul : Mengalikan dua register. Perkalian 8 bit dengan 8 bit menghasilkan bilangan 16 bit yang disimpan di r0 untuk byte rendah dan di r1 untuk byte tinggi. Untuk memindahkan bilangan 16 bit antar register digunakan instruksi movw (copy register word) Contoh : mul r21,r20 ; r1:r0=r21*r20 3.2 Contoh Program • Penjumlahan .include "m8535def.inc" .org 0x00 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0x80 ldi r17,0x80 add r16,r17 ldi r18,0x02 adc r16,r18 here: rjmp here • Pengurangan .include "m8535def.inc" .org 0x00 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0x09 ldi r17,0x06 sub r16,r17 ldi r17,0x03 sub r16,r17 ldi r17,0x06 sub r16,r17 here: rjmp here
  • 11. Basic AVR Tutorial by Hendawan Soebhakti Page 11 of 68 Electrical Engineering – Batam Polytechnic • Perkalian .include "m8535def.inc" .org 0x00 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,5 ldi r17,100 mul r16,r17 movw r17:r16,r1:r0 ; Copy r1:r0 to r17:r16 here: rjmp here • Pembagian .include "m8535def.inc" .org 0x00 .def drem8u =r15 ;remainder/sisa .def dres8u =r16 ;result/hasil .def dd8u =r16 ;dividend/yang dibagi .def dv8u =r17 ;divisor/pembagi .def dcnt8u =r18 ;loop counter rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi dd8u,4 ldi dv8u,2 rcall div8u here: rjmp here ; div8u: sub drem8u,drem8u ;clear remainder and carry ldi dcnt8u,9 ;init loop counter d8u_1: rol dd8u ;shift left dividend dec dcnt8u ;decrement counter brne d8u_2 ;if done ret ;return d8u_2: rol drem8u ;shift dividend into remainder sub drem8u,dv8u remainder = remainder - divisor brcc d8u_3 ;if result negative add drem8u,dv8u ;restore remainder clc ;clear carry to be shifted into result rjmp d8u_1 ;else d8u_3: sec ;set carry to be shifted into result rjmp d8u_1
  • 12. Basic AVR Tutorial by Hendawan Soebhakti Page 12 of 68 Electrical Engineering – Batam Polytechnic Latihan : Buatlah program untuk menyelesaikan persamaan matematika berikut ini : 1. r21=r22+5 2. r21=r22-5 3. r16:r17=r21*5 4. r16:r17=(r21+5)*(r22-5)
  • 13. Basic AVR Tutorial by Hendawan Soebhakti Page 13 of 68 Electrical Engineering – Batam Polytechnic BAB IV Operasi Logika 4.1 Operasi Logika Instruksi Logika and : Untuk meng-and-kan dua register Contoh : and r23,r27 ; r23=r23 and r27 andi : Untuk meng-and-kan register dengan konstanta immediate Contoh : andi r25,0b11110000 or : Untuk meng-or-kan dua register Contoh : or r18,r17 ; r18=r18 or r17 ori : Untuk meng-or-kan register dengan konstanta immediate Contoh : ori r15,0xfe inc : Untuk menaikkan satu isi sebuah register Contoh : inc r14 dec : Untuk menurunkan satu isi sebuah register Contoh : dec r15 clr : Untuk mengosongkan (membuat jadi nol) isi register Contoh : clr r15 ; r15=0x00 ser : Set all bit in register. Membuat jadi satu isi register Contoh : ser r16 ; r16=0xff 4.2 Contoh Program • Operasi Logika .include "m8535def.inc" .org 0x00 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0b01110111 ldi r17,0b00001111 and r16,r17 ori r16,0b00001000 clr r16 inc r16 ser r16 dec r16 here: rjmp here
  • 14. Basic AVR Tutorial by Hendawan Soebhakti Page 14 of 68 Electrical Engineering – Batam Polytechnic Latihan : 1. Buatlah program untuk memecahkan persoalan berikut : PinA 0xf0 PinB PortC r20 2. Buatlah program dengan ketentuan sbb : Input PortA,1 PortA,0 Aksi 0 0 Clear isi r20 dan r21 0 1 Isi r20 dengan 0 kemudian naikkan isi r20 sampai nilainya = 10, jika sudah sampai 10 ulangi lagi dari 0 1 0 Isi r21 dengan 10 kemudian turunkan isi r21 sampai 0, jika sudah 0 ulangi lagi dari 10. 1 1 Set isi r20 dan r21 Jawaban no 2: .include "m8535def.inc" .org 0x00 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 mulai: sbic PortA,1 ; skip if PortA,1 = 0 rjmp cek10_11 rjmp cek00_01 cek10_11: ; PortA,1=1 sbic PortA,0 ; PortA,1=1, PortA,0=0 (10) rjmp setAll ; ulang: ldi r21,10 dec r21 dec r21 dec r21 dec r21 dec r21 dec r21 dec r21 dec r21 dec r21 dec r21 rjmp ulang setAll: ser r20 ser r21 rjmp mulai ; cek00_01: ; PortA,1=0 sbis PortA,0 ; skip if PortA,0=1 rjmp clearAll
  • 15. Basic AVR Tutorial by Hendawan Soebhakti Page 15 of 68 Electrical Engineering – Batam Polytechnic ulang2: ldi r20,0 inc r20 inc r20 inc r20 inc r20 inc r20 inc r20 inc r20 inc r20 inc r20 inc r20 rjmp ulang2 clearAll: clr r20 clr r21 rjmp mulai
  • 16. Basic AVR Tutorial by Hendawan Soebhakti Page 16 of 68 Electrical Engineering – Batam Polytechnic BAB V Percabangan 5.1 Operasi Percabangan Instruksi Percabangan sbic (skip if bit in I/O is cleared) : Skip jika bit I/O yang diuji clear sbis (skip if bit in I/O is set) : Skip jika bit I/O yang diuji set sbrc (skip if bit in register is clear) : Skip jika bit dalam register yang diuji clear cp (compare) : Membandingkan isi dua register mov (move) : Meng-copy isi dua register cpi (compare with immediate) : Membandingakan isi register dengan konstanta tertentu. breq (branch if equal) : Lompat ke label tertentu jika suatu hasil perbandingan adalah sama. brne (branch if not equal) : Lompat ke label tertentu jika suatu hasil perbandingan adalah tidak sama. rjmp (relative jump) : Lompat ke label tertentu. rcall (relative call) : Memanggil subrutin. ret (return) : Keluar dari sub rutin. 5.2 Contoh Program • Operasi Percabangan .include "m8535def.inc" .org 0x00 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 clr r16 ; r16=0x00 naik: inc r16 ; increment r16 cpi r16,5 ; r16=5 ? breq lagi ; branch to lagi if r16 = 5 rjmp naik ; jump to naik if r16 ≠ 5 lagi: ldi r18,5 ; r18 = 5 dec r16 ; decrement r16 cp r16,r18 ; compare r16 & r18 brne lompat ; branch to lompat if r16=r18 rjmp lagi ; jump to lagi if r16≠r18 lompat: rcall rutin1 rcall rutin2 henti: rjmp henti rutin1: mov r17,r16 ret rutin2: mov r19,r18 ret
  • 17. Basic AVR Tutorial by Hendawan Soebhakti Page 17 of 68 Electrical Engineering – Batam Polytechnic Latihan : Buatlah program delay dari flowchart berikut ini : Mulai Isi r16 dengan 0x0A r16=0? Kurangi 1 isi r16 Tdk Ya Kurangi 1 isi r17 r17=0?Tdk Selesai Ya Isi r17 dengan 0x05
  • 18. Basic AVR Tutorial by Hendawan Soebhakti Page 18 of 68 Electrical Engineering – Batam Polytechnic BAB VI Interupsi Interupsi adalah kondisi yang memaksa mikrokontroler menghentikan sementara eksekusi program utama untuk mengeksekusi rutin interrupt tertentu / Interrupt Service Routine (ISR) Setelah melaksanakan ISR secara lengkap, maka mikrokontroler akan kembali melanjutkan eksekusi program utama yang tadi ditinggalkan. Main Program Time (a). Program execution without interrupts Main ISR Main ISR Main ISR Main (b). Program execution with interrupts Time Pada Atmega 8535 terdapat 21 sumber interupsi yaitu : Tabel 6.1 Interrupt Vector pada ATmega 8535 Vector No Program Address Source Interrupt Definition 1 0x0000 RESET External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset 2 0x0001 INT0 External Interrupt Request 0 3 0x0002 INT1 External Interrupt Request 1 4 0x0003 TIMER2 COMP Timer/Counter2 Compare Match 5 0x0004 TIMER2 OVF Timer/Counter2 Overflow 6 0x0005 TIMER1 CAPT Timer/Counter1 Capture Event 7 0x0006 TIMER1 COMPA Timer/Counter1 Compare Match A 8 0x0007 TIMER1 COMPB Timer/Counter1 Compare Match B 9 0x0008 TIMER1 OVF Timer/Counter1 Overflow 10 0x0009 TIMER0 OVF Timer/Counter0 Overflow 11 0x000A SPI, STC Serial Transfer Complete 12 0x000B USART, RXC USART, Rx Complete 13 0x000C USART, UDRE USART Data Register Empty 14 0x000D USART, TXC USART, Tx Complete 15 0x000E ADC ADC Conversion Complete 16 0x000F EE_RDY EEPROM Ready 17 0x0010 ANA_COMP Analog Comparator 18 0x0011 TWI Two-wire Serial Interface 19 0x0012 INT2 External Interrupt Request 2 20 0x0013 TIMER0 COMP Timer/Counter0 Compare Match 21 0x0014 SPM_RDY Store Program Memory Ready
  • 19. Basic AVR Tutorial by Hendawan Soebhakti Page 19 of 68 Electrical Engineering – Batam Polytechnic SM2 7 SE 6 SM1 5 SM0 4 ISC11 3 ISC10 2 ISC01 1 ISC00 0 MCUCR / MCU Control Register Bit Symbol Fuction 7,5,4 SM2..0 Sleep Mode Select Bits. Digunakan untuk memilih mode sleep MCU SM2 SM1 SM0 Sleep Mode 0 0 0 Idle 0 0 1 ADC Noise Reduction 0 1 0 Power-down 0 1 1 Power-save 1 0 0 Reserved 1 0 1 Reserved 1 1 0 Standby 1 1 1 Extended Standby 6 SE Sleep Enable. Digunakan untuk mengaktifkan mode Sleep dengan memberikan logika 1 pada SE sebelum Sleep dijalankan. Setelah Wake-up harus segera diberi logika 0. 3,2 ISC11, ISC10 Interrupt Sense Control 1 Bit. Digunakan untuk memilih jenis pulsa trigger External Interrupt 1 (INT1). ISC11 ISC10 Description 0 0 The low level of INT1 generates an interrupt request. 0 1 Any logical change on INT1 generate an interrupt request 1 0 The falling edge of INT1 generate an interrupt request. 1 1 The rising edge of INT1 generate an interrupt request. 1,0 ISC01, ISC00 Interrupt Sense Control 0 Bit. Digunakan untuk memilih jenis pulsa trigger External Interrupt 0 (INT0). ISC01 ISC00 Description 0 0 The low level of INT0 generates an interrupt request. 0 1 Any logical change on INT0 generate an interrupt request 1 0 The falling edge of INT0 generate an interrupt request. 1 1 The rising edge of INT0 generate an interrupt request.
  • 20. Basic AVR Tutorial by Hendawan Soebhakti Page 20 of 68 Electrical Engineering – Batam Polytechnic INT1 7 INT0 6 INT2 5 - 4 - 3 - 2 IVSEL 1 IVCE 0 GICR / General Interrupt Control Register Bit Symbol Fuction 7 INT1 External Interrupt Request 1 Enable. Digunakan untuk mengaktifkan INT1 dengan syarat bit I pada SREG juga diset . 6 INT0 External Interrupt Request 0 Enable. Digunakan untuk mengaktifkan INT0 dengan syarat bit I pada SREG juga diset . 5 INT1 External Interrupt Request 2 Enable. Digunakan untuk mengaktifkan INT2 dengan syarat bit I pada SREG juga diset . 4,3,2 - Reserved 1 IVSEL Interrupt Vector Select. Jika IVSEL = 0 maka interrupt vector ditempatkan pada start address flash memory Jika IVSEL = 1 maka interrupt vector ditempatkan pada awal bootloader dalam flash memory. 1 IVCE Interrupt Vector Change Enable. Digunakan untuk mengaktifkan perubahan interrupt vector .
  • 21. Basic AVR Tutorial by Hendawan Soebhakti Page 21 of 68 Electrical Engineering – Batam Polytechnic Contoh Program : Interrupt 0 .include "m8535def.inc" .org 0x0000 rjmp main .org 0x0001 rjmp ex_int0 main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0xff out ddrd,r16 out PortD,r16 set_int: ldi r17,0b01000000 out GICR,r17 ldi r17,0b00000000 out MCUCR,r17 sei loop: rjmp loop ex_int0: push r16 in r16,SREG push r16 ldi r17,0xff out ddra,r17 out PortA,r17 pop r16 out SREG,r16 pop r16 reti
  • 22. Basic AVR Tutorial by Hendawan Soebhakti Page 22 of 68 Electrical Engineering – Batam Polytechnic BAB VII Timer/Counter 1. Prescaler Timer pada dasarnya hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama dengan frekuensi crystal yang dipasang atau dapat diperlambat menggunakan prescaler dengan faktor 8, 64, 256 atau 1024. Berikut penjelasannya : Sebuah AVR menggunakan crystal dengan frekuensi 8 MHz dan timer yang digunakan adalah timer 16 bit, maka maksimum waktu timer yang bisa dihasilkan adalah : TMAX = 1/fCLK x (FFFFh+1) = 0.125uS x 65536 = 0.008192 S Untuk menghasilkan waktu timer yang lebih lama dapat digunakan prescaler, misalnya 1024, maka maksimum waktu timer yang bisa dihasilkan adalah : TMAX = 1/fCLK x (FFFFh+1) x N = 0.125uS x 65536 x 1024 = 8.388608 S Ketika presacaler digunakan, waktu timer dapat diperpanjang namun tingkat ketelitiannya menjadi turun. Misalnya dengan prescaler 1024 nilai timer akan bertambah 1 setiap kelipatan 1024 pulsa dan membutuhkan waktu 1/fCLK x 1024 = 0.125uS x 1024 = 128 uS bandingkan tingkat resolusi ini jika tanpa precsaler (0.125uS). 2. Timer 16 Bit Normal Mode Pada mode normal, TCNT1 akan menghitung naik dan membangkitkan interrupt Timer/Counter 1 ketika nilainya berubah dari 0xFFFF ke 0x0000. Seringkali kita menganggap untuk menggunakan timer cukup dengan memasukkan nilai yang diinginkan ke TCNT1 dan menunggu sampai terjadi interrupt. Ini menjadi benar pada timer yang menghitung mundur, tetapi untuk timer yang menghitung maju, maka anda harus memasukkan nilai 65536-(timer value) ke dalam TCNT1. Gambar 7.1 Blok Diagram Timer 16 Bit
  • 23. Basic AVR Tutorial by Hendawan Soebhakti Page 23 of 68 Electrical Engineering – Batam Polytechnic 3. Register Timer 16 Bit • TCNT1 Timer/Counter1 Register digunakan untuk menyimpan nilai timer yang diinginkan. TCNT1 dibagi menjadi 2 register 8 bit yaitu TCNT1H dan TCNT1L. • TIMSK & TIFR Timer Interrupt Mask Register (TIMSK) dan Timer Interrupt Flag (TIFR) Register digunakan untuk mengendalikan interrupt mana yang diaktifkan dengan cara melakukan setting pada TIMSK dan untuk mengetahui interrupt mana yang sedang terjadi. OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0 TIMSK / Timer/Counter Interrupt Mask Register Bit Symbol Fuction 7 OCIE2 Timer/Counter2 Output Compare Match Interrupt Enable. 6 TOIE2 Timer/Counter2 Overflow Interrupt Enable. 5 TICIE1 Timer1 Input Capture Interrupt Enable 4 OCIE1A Timer/Counter1A Output Compare Match Interrupt Enable. 3 OCIE1B Timer/Counter1B Output Compare Match Interrupt Enable. 2 TOIE1 Timer/Counter1 Overflow Interrupt Enable. 4 OCIE0 Timer/Counter0 Output Compare Match Interrupt Enable. 0 TOIE0 Timer/Counter0 Overflow Interrupt Enable. 7 6 5 4 3 2 1 0
  • 24. Basic AVR Tutorial by Hendawan Soebhakti Page 24 of 68 Electrical Engineering – Batam Polytechnic OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0 TIFR / Timer/Counter Interrupt Flag Register Bit Symbol Fuction 7 OCF2 Output Compare Flag2. 6 TOV2 Timer/Counter2 Overflow Flag. 5 ICF1 Timer1 Input Capture Interrupt Flag 4 OCF1A Output Compare Flag1A. 3 OCF1B Output Compare Flag1B. 2 TOV1 Timer/Counter1 Overflow Flag. 4 OCF0 Output Compare Flag0. 0 TOV0 Timer/Counter0 Overflow Flag. 7 6 5 4 3 2 1 0 • TCCR1B Timer/Counter1 Control Register B digunakan untuk mengatur mode timer, prescaler dan pilihan lainnya. CS12..10: Clock Select bits ; Tiga bit pemilih prescaler timer/counter 1 dan hubungannya dengan clock eksternal pada pin T1. 4. Perhitungan Waktu Timer
  • 25. Basic AVR Tutorial by Hendawan Soebhakti Page 25 of 68 Electrical Engineering – Batam Polytechnic ) N T (h)FFFF(1TCNT timer CLKf× −+= Dimana : TCNT : Nilai timer (Hex) CLKf : Frekuensi clock (crystal) yang digunakan (Hz) timerT : Waktu timer yang diinginkan (detik) N : Prescaler (1, 8, 64, 256, 1024) 1+FFFFh : Nilai max timer adalah FFFFh dan overflow saat FFFFh ke 0000h Contoh : Diinginkan sebuah timer 16 bit bekerja selama 1 detik, dengan frekuensi clock sebesar 11,0592MHz dan presecaller 1024 maka diperoleh nilai TCNT sebesar : hDDTCNT hAhTCNT dhTCNT FFFFhTCNT 05 30210000 1080010000 1024 110592001 )1 = −= −=             × −+= Dengan demikian nilai TCNTH = D5h dan TCNTL = D0h 5. Maksimum Waktu Timer Timer 16 bit AVR8535 dapat menghasilkan waktu tunda maksimum sebesar 6,068055555 detik pada frekuensi 11,0592MHz h0001 (FFFFh)h)10000( FFFFhFFFFh)(1TCNT = −= −+= Dengan nilai maksimum FFFFh maka akan dihasilkan waktu timer selama : detik0680555555,6T )10800(T65535 ) 1024 11059200T (FFFFh timer timer timer = ×= × =
  • 26. Basic AVR Tutorial by Hendawan Soebhakti Page 26 of 68 Electrical Engineering – Batam Polytechnic 7. Mengaktifkan Timer Setelah tahu nilai yang harus dituliskan ke TCNT1 maka anda harus mengaktifkan bit interrupt terkait dan global interrupt enable. Berikut adalah flowchart apa yang terjadi pada timer : Langkah yang perlu dilakukan adalah : • Aktifkan TOIE1 pada TIMSK • Masukkan nilai timer ke TCNT1 misalnya : D5D0h • Set prescaler pada 1024 ( set bit CS12 dan CS10 pada TCCR1B) • Aktifkan bit global interrupt pada SREG • Tunggu. Atau lakukan hal yang lain. Semua perhitungan dan pengecekan flag dilakukan oleh hardware.
  • 27. Basic AVR Tutorial by Hendawan Soebhakti Page 27 of 68 Electrical Engineering – Batam Polytechnic Contoh Program : .include "m8535def.inc" .equ timer_value = 0xD5D0 .org 0x0000 rjmp mulai mulai: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ulang: ldi r16,0xff out ddra,r16 out PortA,r16 rcall timer1d ldi r16,0x00 out PortA,r16 rcall timer1d rjmp ulang timer1d: ldi r16,0b00000100 ;aktifkan enable interupt out TIMSK,r16 ldi r16,high(timer_value) ;masukkan nilai timer out TCNT1H,r16 ldi r16,low(timer_value) out TCNT1L,r16 ldi r16,0b00000101 ;masukkan prescaler 1024 out TCCR1B,r16 looptimer: in r17,TIFR sbrs r17,TOV1 ;tunggu sampai timer1 overflow set rjmp looptimer ldi r16,0b00000100 ;TOV1 dinolkan dengan memberi logika 1 out TIFR,r16 ret
  • 28. Basic AVR Tutorial by Hendawan Soebhakti Page 28 of 68 Electrical Engineering – Batam Polytechnic BAB VIII Pengendalian Motor Stepper 1. Dasar Motor Stepper Motor stepper adalah sebuah peralatan elektromekanik yang mengubah pulsa elektrik menjadi pergerakan mekanik. Shaft atau kumparan motor stepper berputar per step ketika pulsa elektrik dimasukkan ke kumparan tersebut dengan urutan yang benar. Urutan pemberian pulsa ke motor stepper akan menyebabkan arah putaran yang berbeda. Sedangkan besarnya frekuensi dari pulsa akan mempengaruhi kecepatan putaran motor stepper. Motor Stepper Unipolar Gambar 2.1 Motor Stepper Unipolar Motor stepper unipolar baik tipe 5 atau 6 kabel biasanya dihubungkan seperti pada gambar 2.1, dengan sebuah center tap pada tiap kumparan. Pada penggunaannya, center tap dihubungkan ke supply positif, dan dua ujung kumparan lainnya dihubungkan ke ground. Bagian rotor motor pada gambar 2.1 dibuat dari magnet permanent dengan 6 kutub, 3 kutub utara dan 3 kutub selatan. Seperti terlihat pada gambar, arus mengalir dari center tap kumparan 1 ke terminal a menyebabkan kutub stator yang atas menjadi berkutub utara dan kutub stator yang bawah berkutub selatan. Kondisi ini menyebabkan rotor berada pada posisi seperti gambar 2.1. Jika arus pada kumparan 1 dimatikan dan kumparan 2 dinyalakan, maka rotor akan berputar 30 derajat, atau 1 step. Untuk berputar secara kontinyu, kita hanya perlu menghubungkan supplay power ke 2 kumparan secara berurutan. Dengan asumsi bahwa logika 1 berarti arus mengalir pada kumparan motor, maka berikut adalah urutan yang harus dipenuhi agar motor dapat berputar sebanyak 24 step atau 2 putaran : Kumparan 1a 1000100010001000100010001 Kumparan 1b 0010001000100010001000100 Kumparan 2a 0100010001000100010001000 Kumparan 2b 0001000100010001000100010 waktu --->
  • 29. Basic AVR Tutorial by Hendawan Soebhakti Page 29 of 68 Electrical Engineering – Batam Polytechnic N S 1 2 2 1 S N N S N S N S 1 2 2 1 S N NS N S S N 1 2 2 1 S N N S NS S N 1 2 2 1 S N N S N S Step 1 Step 2 Step 3 Step 4 N S 1 2 2 1 N S 1 2 2 1 S N N S NS S N 1 2 2 1 S N N S N S S N 1 2 2 1 S N N S N S Step 5 Step 6 Step 7 Step 8 S N NS N S N S 1 2 2 1 N S 1 2 2 1 S N N S N S S N 1 2 2 1 S N NS N S S N 1 2 2 1 S N N S N S Step 9 Step 10 Step 11 Step 12 S N N S NS Gambar 2.2 Bergeraknya Motor Stepper Step Angle / SA Motor stepper bergerak per step. Setiap bergerak satu step, motor stepper akan berputar beberapa derajat sesuai dengan step anglenya. Step angle tergantung dari jumlah kutub magnet motor stepper. Jumlah putaran yang diperlukan agar motor stepper bergerak 1 putaran penuh (360 0 ) adalah : Step = 3600 / Step Angle Misalnya, sebuah motor stepper memiliki SA=1,80 maka untuk untuk berputar satu putaran penuh memerlukan jumlah step sebanyak : 360 / 1,8 = 200 step
  • 30. Basic AVR Tutorial by Hendawan Soebhakti Page 30 of 68 Electrical Engineering – Batam Polytechnic Skema Rangkaian Driver Motor Stepper +12V MOTOR STEPPER TIP 122 1N4001 10K 1K TIP 122 1N4001 10K 1K 1N4001 1K TIP 122 10K 10K TIP 122 1N4001 1K PA.1 PA.3 PA.2 PA.0 Gambar 2.3 Skema Rangkaian Driver Motor Stepper 2. Kendali Arah Putaran Arah putaran motor stepper ditentukan oleh arah urutan aktifasi kumparannya. Secara program, ini bisa dilakukan dengan mengubah arah pergeseran bit. Jika arah pergesarannya ke kiri, maka motor stepper akan berputar kearah kiri pula (CCW) Jika arah pergeserannya ke kanan, maka motor stepper akan berputar ke arah kanan (CW) Arah Putaran CW Arah Putaran CCW .include "m8535def.inc" .org 0x0000 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0xff out ddra,r16 ldi r19,0x08 Step: out PortA,r19 rcall delay ror r19 cpi r19,0x01 brne Step out PortA,r19 rcall delay ldi r19,0x08 rjmp Step .include "m8535def.inc" .org 0x0000 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0xff out ddra,r16 ldi r19,0x01 Step: out PortA,r19 rcall delay rol r19 cpi r19,0x08 brne Step out PortA,r19 rcall delay ldi r19,0x01 rjmp Step
  • 31. Basic AVR Tutorial by Hendawan Soebhakti Page 31 of 68 Electrical Engineering – Batam Polytechnic delay: ldi r20,0x02 dl1: ldi r21,0xff dl2: ldi r22,0xff dl3: dec r22 cpi r22,0x00 brne dl3 dec r21 cpi r21,0x00 brne dl2 dec r20 cpi r20,0x00 brne dl1 ret delay: ldi r20,0x02 dl1: ldi r21,0xff dl2: ldi r22,0xff dl3: dec r22 cpi r22,0x00 brne dl3 dec r21 cpi r21,0x00 brne dl2 dec r20 cpi r20,0x00 brne dl1 ret Pada program, jika instruksi ror r19 diganti menjadi rol r19 Maka arah putaran motor stepper akan berubah. 3. Kendali Posisi Derajat putaran motor stepper ditentukan oleh banyaknya jumlah pergeseran aktifasi kumparannya. Secara program, ini bisa dilakukan dengan mengubah jumlah pergeseran bit. Pada motor stepper dengan SA=1,80 , agar motor stepper bergerak 450 maka diperlukan pergeseran step sebanyak : 45/1,8 =25 step .include "m8535def.inc" .org 0x0000 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0xff out ddra,r16 ldi r19,0x08 ldi r17,25 Loop: rcall Step dec r17 cpi r17,0 brne Loop Stop: nop rjmp Stop Step: cpi r19,0x01 brne Shift out PortA,r19 rcall delay ldi r19,0x08 ret Shift: out PortA,r19 rcall delay ror r19 ret
  • 32. Basic AVR Tutorial by Hendawan Soebhakti Page 32 of 68 Electrical Engineering – Batam Polytechnic delay: ldi r20,0x02 dl1: ldi r21,0xff dl2: ldi r22,0xff dl3: dec r22 cpi r22,0x00 brne dl3 dec r21 cpi r21,0x00 brne dl2 dec r20 cpi r20,0x00 brne dl1 ret Jika instruksi ldi r17,25 diganti menjadi ldi r17,50 maka posisi akhir motor stepper adalah 900 4. Kendali Kecepatan Kecepatan motor stepper ditentukan oleh kecepatan aktifasi kumparannya. Secara program, ini bisa dilakukan dengan mengubah delay waktu pergeseran tiap bitnya. Semakin cepat delay waktunya, kecepatan motor stepper juga akan bertambah. .include "m8535def.inc" .org 0x0000 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0xff out ddra,r16 ldi r19,0x08 Step: out PortA,r19 rcall delay ror r19 cpi r19,0x01 brne Step out PortA,r19 rcall delay ldi r19,0x08 rjmp Step delay: ldi r20,0x20 dl1: ldi r21,0xff dl2: ldi r22,0xff dl3: dec r22 cpi r22,0x00 brne dl3 dec r21 cpi r21,0x00 brne dl2 dec r20 cpi r20,0x00
  • 33. Basic AVR Tutorial by Hendawan Soebhakti Page 33 of 68 Electrical Engineering – Batam Polytechnic brne dl1 ret Jika instruksi ldi r20,0x20 menjadi ldi r20,0x02 maka kecepatan motor stepper akan bertambah. 5. Kendali Torsi Torsi motor stepper ditentukan oleh banyaknya jumlah kumparan yang aktif pada saat yang sama. Torsi akan bertambah besar jika 2 kumparan aktif pada saat yang sama. Secara program, ini bisa dilakukan dengan mengubah kondisi bit. .include "m8535def.inc" .org 0x0000 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0xff out ddra,r16 ldi r19,0x4c Step: out PortA,r19 rcall delay ror r19 cpi r19,0x09 brne Step out PortA,r19 rcall delay ldi r19,0x4c rjmp Step delay: ldi r20,0x20 dl1: ldi r21,0xff dl2: ldi r22,0xff dl3: dec r22 cpi r22,0x00 brne dl3 dec r21 cpi r21,0x00 brne dl2 dec r20 cpi r20,0x00 brne dl1 ret Jika instruksi ldi r19,0x4c cpi r19,0x09 diubah menjadi ldi r19,0x08 cpi r19,0x01 maka torsi motor stepper akan turun menjadi setengahnya.
  • 34. Basic AVR Tutorial by Hendawan Soebhakti Page 34 of 68 Electrical Engineering – Batam Polytechnic BAB IX Liquid Crystal Display 1. Konfigurasi Pin LCD 16x2 LIQUID CRYSTAL DISPLAY 16 CHARACTER X 2 LINES 1 16 VSS VDD VO RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 A K Gambar 9.1 Konfigurasi Pin LCD 16 Karakter x 2 Baris Pin No. Symbol Level Description 1 VSS 0V Ground 2 VDD 5V Supply voltage for logic 3 VO (Variable) Operating voltage for LCD 4 RS H/L H : Data, L : Instruction code 5 R/W H/L H : Read, L : Write 6 E H, H->L Chip Enable signal 7 DB0 H/L Data bit 0 8 DB1 H/L Data bit 1 9 DB2 H/L Data bit 2 10 DB3 H/L Data bit 3 11 DB4 H/L Data bit 4 12 DB5 H/L Data bit 5 13 DB6 H/L Data bit 6 14 DB7 H/L Data bit 7 15 A 4,2 – 4,6 V LED + 16 K 0V LED -
  • 35. Basic AVR Tutorial by Hendawan Soebhakti Page 35 of 68 Electrical Engineering – Batam Polytechnic 2. Rangkaian Skematik Mikrokontroler dan LCD 16x2 +5V +5V +5V 2x16 LCD DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 A KVSS VCC VEE RS RW E R1 5K D1 1N4001 PA.4 PA.6 PA.0 PA.1 PA.2 PA.3 Gambar 9.2 Rangkaian Skematik LCD 3. Fungsi Register LCD Modul display LCD sudah dilengkapi dengan sebuah kontroler yang memiliki dua register 8 bit yaitu instruction register (IR) dan data register (DR). IR menyimpan kode instruksi, seperti display clear, cursor shift dan informasi address untuk display data RAM (DDRAM) dan character generator (CGRAM). RS R/W Operation 0 0 Menulis instruksi ke IR, seperti display clear, cursor shift 0 1 Membaca busy flag (DB7) dan address counter (DB0 s/d DB7) 1 0 Menulis data ke DDRAM atau CGRAM 1 1 Membaca data dari DDRAM atau CGRAM Busy Flag (BF) Busy flag = 1 saat kontroler sedang mengerjakan instruksi, selama instruksi tersebut belum selesai dikerjakan, kontroler tidak akan menerima instruksi apapun. Ketika RS=0 dan R/W=1, busy flag mengeluarkan logika 1 pada DB7. Instruksi berikutnya akan siap diterima ketika busy flag = 0. Address Counter (AC) Address counter berisi address DDRAM dan CGRAM. Display Data RAM (DDRAM) DDRAM menyimpan data display dalam bentuk kode karakter 8 bit. Kapasitasnya adalah 80 karakter. Berikut adalah posisi address DDRAM pada LCD 16x2 : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F Character Generator ROM (CGROM) CGROM akan menghasilkan karakter dengan format 5x8 dot atau 5x10 dot. Lihat tabel Format Karakter CGROM
  • 36. Basic AVR Tutorial by Hendawan Soebhakti Page 36 of 68 Electrical Engineering – Batam Polytechnic Character Generator RAM (CGRAM) Dengan CGRAM, user dapat membuat sendiri format karakter yang diinginkan. Untuk format 5x8 dot bisa dibuat 8 karakter, untuk format 5x10 dapat dibuat 4 karakter. Lihat tabel 4. Hubungan CGRAM Address, DDRAM dan Pola Karakter
  • 37. Basic AVR Tutorial by Hendawan Soebhakti Page 37 of 68 Electrical Engineering – Batam Polytechnic 5. Pola Karakter CGROM
  • 38. Basic AVR Tutorial by Hendawan Soebhakti Page 38 of 68 Electrical Engineering – Batam Polytechnic 6. Tabel Instruksi Kode InstruksiInstruksi RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Deskripsi Clear display 0 0 0 0 0 0 0 0 0 1 Menghapus semua tampilan pada display Return home 0 0 0 0 0 0 0 0 1 * Set DDRAM address ke ‘00h’ dan kembalikan cursor ke posisi awal. Isi DDRAM tidak berubah Entry mode set 0 0 0 0 0 0 0 1 I/D S Menentukan auto increment / decrement DDRAM address karakter atau cursor berikutnya yang akan ditulis ke display. Display ON/OFF control 0 0 0 0 0 0 1 D C B Set display (D), cursor (C), dan cursor blinking (B) ON/OFF Cursor or Display shift 0 0 0 0 0 1 S/C R/L * * Menentukan pergeseran display atau cursor serta menentukan arah pergeseran display Function set 0 0 0 0 1 DL N F * * Menentukan panjang data interface (DL: 8 atau 4 bit), jumlah baris (N: 1 atau 2 baris) dan tipe font (F: 5x10 atau 5x7 dot) Set CGRAM address 0 0 0 1 ACG Set CGRAM address Set DDRAM address 0 0 1 ADD Set DDRAM address Read Busy Flag and address 0 1 BF AC Mengetahui apakah LCD sedang mengerjakan instruksi atau tidak. Isi address counter juga dapat dibaca Write data to RAM 1 0 D7 D6 D5 D4 D3 D2 D1 D0 Menulis data ke internal RAM (DDRAM/CGRAM) Read data from RAM 1 1 D7 D6 D5 D4 D3 D2 D1 D0 Membaca data dari internal RAM (DDRAM/CGRAM) I/D = 1 : Increment C = 1 : Cursor ON R/L = 1 : Right Shift F = 1 : 5x7 dots I/D = 0 : Decrement C = 0 : Cursor OFF R/L = 0 : Left Shift F = 0 : 5x10 dots S = 1 : DisplayShift B = 1 : Blink ON DL = 1 : 8 bits BF = 1 : Busy S = 0 : No Display Shift B = 0 : Blink OFF DL = 0 : 4 bits BF = 0 : Can Accept Data D = 1 : Display ON S/C = 1 : Display Shift N = 1 : 2 Lines ACG : CGRAM Address D = 0 : Display OFF S/C = 0 : Cursor Move N = 0 : 1 Line ADD : DDRAM Address
  • 39. Basic AVR Tutorial by Hendawan Soebhakti Page 39 of 68 Electrical Engineering – Batam Polytechnic 7. Inisialisasi LCD Power On Tunggu = 15 mS setelah VCC naik sampai 4,5V RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 1 * * * * Tunggu = 4,1 mS RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 1 * * * * Tunggu = 100 uS RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 1 * * * * RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 N F * * 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 I/ D S Inisialisasi selesai Function Set (Interface 8 bit) BF belum bisa dicek sebelum instruksi ini Function Set (Interface 8 bit) BF belum bisa dicek sebelum instruksi ini Function Set (Interface 8 bit) BF belum bisa dicek sebelum instruksi ini BF bisa dicek setelah instruksi-instruksi berikut. Jika BF tidak dicek, tundaan waktu tiap instruksi harus lebih lama dari waktu eksekusi instruksi. Function Set (Interface 8 bit) Display OFF Display Clear Entry Mode Set Interface 8 bit
  • 40. Basic AVR Tutorial by Hendawan Soebhakti Page 40 of 68 Electrical Engineering – Batam Polytechnic Power On Tunggu = 15 mS setelah VCC naik sampai 4,5V RS R/W DB7 DB6 DB5 DB4 0 0 0 0 1 1 Tunggu = 4,1 mS RS R/W DB7 DB6 DB5 DB4 0 0 0 0 1 1 Tunggu = 100 uS RS R/W DB7 DB6 DB5 DB4 0 0 0 0 1 1 RS R/W DB7 DB6 DB5 DB4 0 0 0 0 1 0 0 0 0 0 1 0 0 0 N F * * Inisialisasi selesai Function Set (Interface 8 bit) BF belum bisa dicek sebelum instruksi ini Function Set (Interface 8 bit) BF belum bisa dicek sebelum instruksi ini Function Set (Interface 8 bit) BF belum bisa dicek sebelum instruksi ini BF bisa dicek setelah instruksi-instruksi berikut. Jika BF tidak dicek, tundaan waktu tiap instruksi harus lebih lama dari waktu eksekusi instruksi. Function Set (Interface 4 bit) Display OFF Display Clear Entry Mode Set Interface 4 bit 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 I/D S Function Set (Interface 4 bit)
  • 41. Basic AVR Tutorial by Hendawan Soebhakti Page 41 of 68 Electrical Engineering – Batam Polytechnic 8. Contoh Program .include "m8535def.inc" .equ timer_value = 0xffca .equ timer_value100 = 0xfbaf .cseg .org 0x0000 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0xff out ddra,r16 rcall InitLCD Start: ldi r17,0x01 rcall SLcd Loopx: ldi ZL,low(2*text) ldi ZH,high(2*text) rcall WM1LCD ldi ZL,low(2*text2) ldi ZH,high(2*text2) rcall WM2LCD end: rjmp Loopx ;----------------------- ; Write Message to LCD ;----------------------- WM1LCD: ldi r17,0x80 ;1st line, 1st col rcall SLcd rjmp Wr1 WM2LCD: ldi r17,0xC0 rcall SLcd Wr1: clr r1 LoopWr1: lpm ;load program memory mov r19,r0 cpi r19,0 brne NextCHR ret NextCHR: rcall WLCD ;write character adiw ZL,1 ;get next char rjmp LoopWr1 ;----------------------- ; Inisialisasi LCD ;----------------------- InitLCD: ldi r20,8 LoopDelay: rcall delay5mS dec r20 cpi r20,0 brne LoopDelay ldi r17,0x03 ;Function set out PortA,r17 sbi PortA,6 ;E=1 cbi PortA,6 ;E=0 rcall delay5mS
  • 42. Basic AVR Tutorial by Hendawan Soebhakti Page 42 of 68 Electrical Engineering – Batam Polytechnic ldi r17,0x03 ;Function set out PortA,r17 sbi PortA,6 ;E=1 cbi PortA,6 ;E=0 rcall delay100uS ldi r17,0x02 ;Function set:4 bit operation out PortA,r17 sbi PortA,6 ;E=1 ; rcall delay100uS cbi PortA,6 ;E=0 ldi r17,0x28 ;Function set:4 bit op;2lines rcall SLcd ldi r17,0x08 ;Turn Off LCD rcall SLcd ldi r17,0x0C ;Turn On LCD rcall SLcd ldi r17,0x01 ;Clear Display rcall SLcd ldi r17,0x06 ;Entry mode set; Inc addr rcall SLcd ret ;----------------------- ; Rutin kirim instruksi ;----------------------- SLcd: mov r18,r17 andi r18,$F0 ;Get high nibble swap r18 out PortA,r18 sbi PortA,6 ;E=1 cbi PortA,6 ;E=0 ; mov r18,r17 andi r18,$0F ;Get low nibble out PortA,r18 sbi PortA,6 ;E=1 cbi PortA,6 ;E=0 rcall delay100uS ret ;----------------------- ; Rutin kirim karakter ;----------------------- WLcd: mov r18,r19 andi r18,$F0 ;Get high nibble swap r18 out PortA,r18 sbi PortA,4 ;RS=1 sbi PortA,6 ;E=1 cbi PortA,6 ;E=0 ; mov r18,r19 andi r18,$0F ;Get low nibble out PortA,r18
  • 43. Basic AVR Tutorial by Hendawan Soebhakti Page 43 of 68 Electrical Engineering – Batam Polytechnic sbi PortA,4 ;RS=1 sbi PortA,6 ;E=1 cbi PortA,6 ;E=0 rcall delay100uS ret ;----------------------- ; Rutin delay 5ms ;----------------------- delay5ms: ldi r16,0b00000100 out TIMSK,r16 ldi r16,high(timer_value) out TCNT1H,r16 ldi r16,low(timer_value) out TCNT1L,r16 ldi r16,0b00000101 out TCCR1B,r16 loop: in r21,TIFR sbrs r21,TOV1 rjmp loop ldi r16,0b00000100 out TIFR,r16 ret ;----------------------- ; Rutin delay 100uS ;----------------------- delay100us: ldi r16,0b00000100 out TIMSK,r16 ldi r16,high(timer_value100) out TCNT1H,r16 ldi r16,low(timer_value100) out TCNT1L,r16 ldi r16,0b00000001 out TCCR1B,r16 loop1: in r21,TIFR sbrs r21,TOV1 rjmp loop1 ldi r16,0b00000100 out TIFR,r16 ret ; "12345678901234567890" text: .db "Hello World",0 text2: .db "How Are You?",0
  • 44. Basic AVR Tutorial by Hendawan Soebhakti Page 44 of 68 Electrical Engineering – Batam Polytechnic Catatan Tambahan : Register X, Register Y dan Register Z Register R26…R31 memiliki fungsi tambahan sebagai register serbaguna. Register-register ini dapat berfungsi sebagai register 16 bit yang dapat menyimpan address pada operasi pemindahan data dalam mode indirect addressing. Fungsinya seperti register Data Pointer / DPTR pada MCS-51. Register 16 bit ini adalah register X, Y dan Z seperti gambar berikut : Gambar 9.3 Register X, Y dan Z LPM (Load Program Memory) Load 1 byte isi address yang ditunjukkan oleh register Z ke R0. Instruksi ini mirip dengan instruksi mov A,@DPTR pada MCS-51. Contoh : ldi ZL,low(2*text) ; ZL=00h ldi ZH,high(2*text) ; ZH=10h lpm ; r0=”H” (Karakter H) mov r19,r0 ; r19=”H” .org 1000h text: .db "Hello World",0
  • 45. Basic AVR Tutorial by Hendawan Soebhakti Page 45 of 68 Electrical Engineering – Batam Polytechnic BAB X Pengendalian Motor DC 1. Motor DC Setiap arus yang mengalir melalui sebuah konduktor akan menimbulkan medan magnet. Arah medan magnet dapat ditentukan dengan kaidah tangan kiri. Ibu jari tangan menunjukkan arah aliran arus listrik sedangkan jari-jari yang lain menunjukkan arah medan magnet yang timbul, seperti yang ditunjukkan oleh gambar 10.1 berikut ini. Gambar 10.1 Kaidah Tangan Kiri Jika suatu konduktor yang dialiri arus listrik ditempatkan dalam sebuah medan magnet, kombinasi medan magnet akan ditunjukkan oleh gambar 10.2. Arah aliran arus listrik dalam konduktor ditunjukkan dengan tanda “x” atau “.”. Tanda “x” menunjukkan arah arus listrik mengalir menjauhi pembaca gambar, tanda “.” menunjukkan arah arus listrik mengalir mendekati pembaca gambar. Gambar 10.2 Konduktor Berarus Listrik Dalam Medan Magnet
  • 46. Basic AVR Tutorial by Hendawan Soebhakti Page 46 of 68 Electrical Engineering – Batam Polytechnic Pada gambar sebelah kiri, arah medan magnet pada sisi atas yang dihasilkan oleh konduktor berlawanan dengan arah medan magnet yang dihasilkan oleh magnet permanen. Sementara pada sisi sebelah bawah, arah medan magnet yang dihasilkan oleh konduktor searah dengan arah medan magnet yang dihasilkan oleh magnet permanen. Dengan kata lain, pada sisi sebelah atas kerapatan fluks magnet lebih sedikit dari pada sisi sebelah bawah. Sebuah gaya dorong akan menyebabkan konduktor bergerak ke sisi sebelah atas. Pada gambar sebelah kanan, arah medan magnet pada sisi atas yang dihasilkan oleh konduktor searah dengan arah medan magnet yang dihasilkan oleh magnet permanen. Sementara pada sisi sebelah bawah, arah medan magnet yang dihasilkan oleh konduktor berlawanan dengan arah medan magnet yang dihasilkan oleh magnet permanen. Dengan kata lain, pada sisi sebelah bawah kerapatan fluks magnet lebih sedikit dari pada sisi sebelah atas. Sebuah gaya dorong akan menyebabkan konduktor bergerak ke sisi sebelah bawah. Pada sebuah motor dc, konduktor dibentuk menjadi sebuah loop sehingga ada dua bagian konduktor yang berada didalam medan magnet pada saat yang sama, seperti diperlihatkan pada gambar 10.3. Konfigurasi konduktor seperti ini akan menghasilkan distorsi pada medan magnet utama dan menghasilkan gaya dorong pada masing-masing konduktor. Pada saat konduktor di tempatkan pada rotor, gaya dorong yang timbul akan menyebabkan rotor berputar searah dengan jarum jam, seperti diperlihatkan pada gambar 10.3. Gambar 10.3 Bergeraknya Sebuah Motor Sebuah cara lagi untuk menunjukkan hubungan antara arus listrik yang mengalir didalam sebuah konduktor, medan magnet dan arah gerak, adalah kaidah tangan kanan untuk motor seperti yang diperlihatkan pada gambar 10.4.
  • 47. Basic AVR Tutorial by Hendawan Soebhakti Page 47 of 68 Electrical Engineering – Batam Polytechnic Gambar 10.4 Kaidah Tangan Kanan Untuk Motor Kaidah tangan kanan untuk motor menunjukkan arah arus yang mengalir didalam sebuah konduktor yang berada dalam medan magnet. Jari tengah menunjukkan arah arus yang mengalir pada konduktor, jari telunjuk menunjukkan arah medan magnet dan ibu jari menunjukkan arah gaya putar. Adapun besarnya gaya yang bekerja pada konduktor tersebut dapat dirumuskan dengan : F = B.L.I (Newton) Dimana : B = kerapatan fluks magnet (weber) L = panjang konduktor (meter) I = arus listrik ( ampere) Gambar 10.5 Konstruksi Dasar Motor DC
  • 48. Basic AVR Tutorial by Hendawan Soebhakti Page 48 of 68 Electrical Engineering – Batam Polytechnic Pada gambar 10.5 diatas tampak sebuah konstruksi dasar motor dc, pada gambar diatas terlihat bahwa pada saat terminal motor diberi tegangan dc, maka arus elektron akan mengalir melalui konduktor dari terminal negatif menuju ke terminal positif. Karena konduktor berada diantara medan magnet, maka akan timbul medan magnet juga pada konduktor yang arahnya seperti terlihat pada gambar 10.5 diatas. Arah garis gaya medan magnet yang dihasilkan oleh magnet permanen adalah dari kutub utara menuju ke selatan. Sementara pada konduktor yang dekat dengan kutub selatan, arah garis gaya magnet disisi sebelah bawah searah dengan garis gaya magnet permanen sedangkan di sisi sebelah atas arah garis gaya magnet berlawanan arah dengan garis gaya magnet permanen. Ini menyebabkan medan magnet disisi sebelah bawah lebih rapat daripada sisi sebelah atas. Dengan demikian konduktor akan terdorong ke arah atas. Sementara pada konduktor yang dekat dengan kutub utara, arah garis gaya magnet disisi sebelah atas searah dengan garis gaya magnet permanen sedangkan di sisi sebelah bawah arah garis gaya magnet berlawanan arah dengan garis gaya magnet permanen. Ini menyebabkan medan magnet disisi sebelah atas lebih rapat daripada sisi sebelah bawah. Dengan demikian konduktor akan terdorong ke arah bawah. Pada akhirnya konduktor akan membentuk gerakan berputar berlawanan dengan jarum jam seperti terlihat pada gambar 10.5 diatas. 2. Kendali Arah Putaran Gambar 10.6 Arah Putaran Motor DC Dari gambar 10.6 diatas, agar arah putaran motor dc berubah, maka polaritas tegangan pada terminal motor harus dibalik.
  • 49. Basic AVR Tutorial by Hendawan Soebhakti Page 49 of 68 Electrical Engineering – Batam Polytechnic 1 1 2 2 M1 MOTOR DC Q1 TIP120 Q3 TIP120 Q2 TIP120 Q4 TIP120 1 1 2 2R1 10K 1 1 2 2R3 10K 1 1 2 2 R2 10K 1 1 2 2R4 10K +12V Anoda 1 Katoda 2 NC 3 Emiter 4 Kolektor 5 NC 6 IC1 4N25 Anoda 1 Katoda 2 NC 3 Emiter 4 Kolektor 5 NC 6 IC2 4N25 BIT0 BIT1 +12V +12V 1 1 2 2R6 680 R7 680 Q5 BC548 1A 1 1B 2 1Y 3 2A 4 2B 5 2Y 6 G 7 3Y 8 3B 9 3A 10 4Y 11 4B 12 4A 13 Vcc 14 IC3 74LS00 BIT0 BIT1 1 1 2 2R5 1K VCC Gambar 10.7 Rangkaian Driver Motor DC Tabel 10.1 Tabel Kebenaran Rangkaian Driver Motor DC Input BIT 1 BIT 0 Aksi Motor 0 0 Berhenti 0 1 Berputar searah jarum jam 1 0 Berputar berlawanan arah jarum jam 1 1 Berhenti
  • 50. Basic AVR Tutorial by Hendawan Soebhakti Page 50 of 68 Electrical Engineering – Batam Polytechnic Contoh Program : .include "m8535def.inc" .org 0x0000 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0xff out ddra,r16 Run: ldi r19,0b00000010 out PortA,r19 rcall delay ldi r19,0b00000000 out PortA,r19 rcall delay ldi r19,0b00000001 out PortA,r19 rcall delay ldi r19,0b00000011 out PortA,r19 rcall delay rjmp Run delay: ldi r20,0x10 dl1: ldi r21,0xff dl2: ldi r22,0xff dl3: dec r22 cpi r22,0x00 brne dl3 dec r21 cpi r21,0x00 brne dl2 dec r20 cpi r20,0x00 brne dl1 ret
  • 51. Basic AVR Tutorial by Hendawan Soebhakti Page 51 of 68 Electrical Engineering – Batam Polytechnic 3. Kendali Kecepatan (PWM) Pulse Width Modulation (PWM) adalah sebuah cara memanipulasi lebar dari pulsa dalam perioda yang konstan untuk mendapatkan tegangan rata-rata yang berbeda. 20 % 50% 90 % Gambar 2.8 Sinyal PWM dengan Berbagai Duty Cycle Pada gambar 2.8 menunjukkan tiga sinyal PWM yang berbeda. Sinyal yang paling atas menunjukkan sinyal PWM dengan duty cycle 10%. Artinya sinyal on selama 20% dari perioda sinyal dan off selama 80 % sisanya. Gambar yang lainnya menunjukkan sinyal dengan duty cycle 50% dan 90%. Ketiga sinyal PWM tersebut akan menghasilkan sinyal analog yang berbeda. Sebagai contoh jika supply tegangan sebesar 9V dan duty cycle 20%, maka menghasilkan 1,8V. VS io vo 0 t1 T Gambar 2.9 Pulsa PWM VS T t V 1 o = V0 : Tegangan Output (Volt) VS : Tegangan Pulsa PWM (Volt) t1 : Perioda pulsa high (Secon) T : Periode pulsa (Secon)
  • 52. Basic AVR Tutorial by Hendawan Soebhakti Page 52 of 68 Electrical Engineering – Batam Polytechnic Contoh Program : .include "m8535def.inc" .equ timer_value1000 = 0xd4cd .org 0x0000 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0xff out ddra,r16 ldi r16,0x00 out PortA,r16 Loop: sbi PortA,0 ;Output Bit Pulse rcall Pulse cbi PortA,0 ;Output Bit Pulse rcall P_1mS rjmp Loop Pulse: ldi r16,0b00000001 ;No prescaling untuk timer1 out TCCR1b,r16 ldi r16,0b00000101 ;Presaling 1024 untuk timer0 out TCCR0,r16 ldi r16,0b00000101 ;Timer0&1 overflow interrupt enable out TIMSK,r16 ldi r16,high(timer_value1000) ;Nilai timer1 out TCNT1H,r16 ldi r16,low(timer_value1000) ;Nilai timer1 out TCNT1L,r16 ldi r18,$f6 ;Bilangan hex, $f6 = 0xf6 out TCNT0,r18 ;Nilai timer0 P_300uS: in r17,TIFR ;Baca Timer Interrupt Flag Register sbrs r17,TOV0 ;Tunggu sampai timer0 overflow set rjmp P_300uS ldi r16,0b00000001 ;TOV0 dinolkan dg memberi logika 1 out TIFR,r16 ret P_1mS: in r19,TIFR ;Baca Timer Interrupt Flag Register sbrs r19,TOV1 ;Tunggu sampai timer1 overflow set rjmp P_1mS ldi r16,0b00000100 ;TOV1 dinolkan dg memberi logika 1 out TIFR,r16 ret
  • 53. Basic AVR Tutorial by Hendawan Soebhakti Page 53 of 68 Electrical Engineering – Batam Polytechnic Catatan Tambahan : Timer/Counter0 Control Register – TCCR0 CS : Select bit Timer Interrupt Mask Register – TIMSK Timer Interrupt Flag Register - TIFR Timer/Counter1 Control Register B – TCCR1B
  • 54. Basic AVR Tutorial by Hendawan Soebhakti Page 54 of 68 Electrical Engineering – Batam Polytechnic
  • 55. Basic AVR Tutorial by Hendawan Soebhakti Page 55 of 68 Electrical Engineering – Batam Polytechnic BAB IX Motor Servo 1. Dasar Motor Servo Motor Servo terdiri dari sebuah motor DC, serangkaian gear, sebuah potensiometer, sebuah output shaft dan sebuah rangkaian kontrol elektronik. Biasanya, motor servo berbentuk kotak segi empat dengan sebuah output shaft motor dan konektor dengan 3 kabel yaitu power, kontrol dan ground. Gear motor servo ada yang terbuat dari plastic, metal atau titanium. Didalam motor servo terdapat potensiometer yang digunakan sebagai sensor posisi. Potensiometer tersebut dihubungkan dengan output shaft untuk mengetahui posisi aktual shaft. Ketika motor dc berputar, maka output shaft juga berputar dan sekaligus memutar potensiometer. Rangkaian kontrol kemudian dapat membaca kondisi potensiometer tersebut untuk mengetahui posisi aktual shaft. Jika posisinya sesuai dengan yang diinginkan, maka motor dc akan berhenti. Sudut operasi motor servo (Operating Angle) bervariasi tergantung jenis motor servo. Ada 2 jenis motor servo yaitu : • Motor Servo Standard Yaitu motor servo yang mampu bergerak CW dan CCW dengan sudut operasi tertentu, misalnya 600 , 900 atau 1800 . • Motor Servo Continuous Yaitu motor servo yang mampu bergerak CW dan CCW tanpa batasan sudut operasi (berputar secara kontinyu). Gambar 9.1 Konstruksi Motor Servo Sumber : http://www.servocity.com Motor servo dikendalikan dengan cara mengirimkan sebuah pulsa yang lebar pulsanya bervariasi. Pulsa tersebut dimasukkan melalui kabel kontrol motor servo. Sudut atau posisi shaft motor servo akan diturunkan dari lebar pulsa. Biasanya lebar pulsanya antara 1.1 ms sampai 1.9 ms dengan periode pulsa sebesar 20 mS.
  • 56. Basic AVR Tutorial by Hendawan Soebhakti Page 56 of 68 Electrical Engineering – Batam Polytechnic Periode 20 ms Lebar Pulsa 1.1 ms (min) – 1.9 (max) Lebar pulsa akan mengakibatkan perubahan posisi pada servo. Misalnya sebuah pulsa 1.5 ms akan memutar motor pada posisi 900 (posisi netral). Agar posisi servo tetap pada posisi ini, maka pulsa harus terus diberikan pada servo. Jadi meskipun ada gaya yang melawan, servo akan tetap bertahan pada posisinya. Gaya maksimum servo tergantung dari rentang torsi servo. Lebar Pulsa 1.1 ms 00 Lebar Pulsa 1.5 ms 900 Lebar Pulsa 1.9 ms 1800 Gambar 9.2 Lebar Pulsa dan Posisi Servo Ketika sebuah pulsa yang dikirim ke servo kurang dari 1.5 ms, servo akan berputar counterclockwise menuju ke posisi tertentu dari posisi netral. Jika pulsa yang dikirim lebih dari 1.5 ms, servo akan berputar clockwise menuju ke posisi tertentu dari posisi netral. Setiap servo memiliki spesifikasi lebar pulsa minimum dan maksimum sendiri-sendiri, tergantung jenis dan merk servo. Umumnya antara 1.1 ms sampai 1.9 ms. Parameter lain yang berbeda antara servo satu dengan servo lainnya adalah kecepatan servo untuk berubah dari posisi satu ke posisi lainnya (Operating Speed).
  • 57. Basic AVR Tutorial by Hendawan Soebhakti Page 57 of 68 Electrical Engineering – Batam Polytechnic Gambar 9.3 HSR-5995TG Ultra Torque Sumber : http://www.servocity.com Detailed Specifications Control System: +Pulse Width Control 1500usec Neutral Required Pulse: 3.3-7.4 Volt Peak to Peak Square Wave Operating Voltage Range: 4.8-7.4 Volts Operating Temperature Range: -20 to +60 Degree C (-68F to +140F) Operating Speed (6.0V): 0.15sec/60 degrees at no load Operating Speed (7.4V): 0.12sec/60 degrees at no load Stall Torque (6.0V): 333.29oz/in. (24kg.cm) Stall Torque (7.4V): 416.61oz/in. (30kg.cm) Standing Torque (6.0V): 433.27oz/in. (31.2kg.cm) 5 degree deflection Standing Torque (7.4V): 541.59oz/in. (39kg.cm) 5 degree deflection Operating Angle: 90 Deg. one side pulse traveling 400usec 360 Modifiable: Yes Direction: Clockwise/Pulse Traveling 1500 to 1900usec Idle Current Drain (6.0V): 3mA at stop Idle Current Drain (7.4V): 3mA at stop Current Drain (6.0V): 300mA/idle and 4.2 amps at lock/stall Current Drain (7.4V): 380mA/idle and 5.2 amps at lock/stall Dead Band Width: 2usec Motor Type: Coreless Metal Brush Potentiometer Drive: 6 Slider Indirect Drive Bearing Type: Dual Ball Bearing MR106 Gear Type: 4 Titanium Gears Connector Wire Length: 11.81" (300mm) Dimensions: 1.57" x 0.78"x 1.45" (40 x 20 x 37mm) Weight: 2.18oz (62g)
  • 58. Basic AVR Tutorial by Hendawan Soebhakti Page 58 of 68 Electrical Engineering – Batam Polytechnic 2. Kendali Posisi Untuk mengendalikan motor servo dapat digunakan 2 buah timer pada AVR yaitu : • Timer 1 digunakan untuk menjaga agar periode pulsa PWM sebesar 20mS • Timer 0 digunakan untuk menghasilkan lebar pulsa high untuk menentukan posisi servo Pada contoh program dibawah ini motor servo akan diberi pulsa high selama 1.5mS setiap 20mS sekali. Posisi motor servo ada di posisi netral / centre. .include "m8535def.inc" .equ timer_value20 = 0xf280 ;timer 20mS .equ timer_value = 0xc0 ;timer 1.5mS .org 0x0000 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 sbi DDRD,5 ;PortD.5 as output ldi r16,25 Loop: sbi PortD,5 rcall Pulse cbi PortD,5 rcall P20mS dec r16 cpi r16,0 brne Loop Stop: nop rjmp Stop ;----------------------------------------------------------- ; Generate pulse 1.5mS Servo position at centre ;----------------------------------------------------------- Pulse: ldi r16,0b00000011 ;Prescaling 64 untuk timer1 out TCCR1b,r16 ldi r16,0b00000101 ;Presaling 1024 untuk timer0 out TCCR0,r16 ldi r16,0b00000101 ;Timer0&1 overflow interrupt enable out TIMSK,r16 ldi r16,high(timer_value20) ;Nilai timer1 = 20mS out TCNT1H,r16 ldi r16,low(timer_value20) ;Nilai timer1 out TCNT1L,r16 ldi r18,0xf0 ;Bilangan hex, 0xf0 = timer 1.5 mS out TCNT0,r18 ;Nilai timer0 P_1500uS: in r17,TIFR ;Baca Timer Interrupt Flag Register sbrs r17,TOV0 ;Tunggu sampai timer0 overflow set rjmp P_1500uS ldi r16,0b00000001 ;TOV0 dinolkan dg memberi logika 1 out TIFR,r16 ret P20mS:in r19,TIFR ;Baca Timer Interrupt Flag Register sbrs r19,TOV1 ;Tunggu sampai timer1 overflow set
  • 59. Basic AVR Tutorial by Hendawan Soebhakti Page 59 of 68 Electrical Engineering – Batam Polytechnic rjmp P20mS ldi r16,0b00000100 ;TOV1 dinolkan dg memberi logika 1 out TIFR,r16 ret Catatan Tambahan : • Timer/Counter1 Control Register B - TCCR1B Digunakan untuk mengatur mode timer, prescaler dan pilihan lainnya. CS12..10: Clock Select bits ; Tiga bit pemilih prescaler timer/counter 1 dan hubungannya dengan clock eksternal pada pin T1. Contoh Program dilakukan setting sbb : ldi r16,0b00000011 ;enable Timer 1 with 64 prescaler out TCCR1B,r16
  • 60. Basic AVR Tutorial by Hendawan Soebhakti Page 60 of 68 Electrical Engineering – Batam Polytechnic • Timer/Counter0 Control Register – TCCR0 CS02..00: Clock Select bits ; Tiga bit pemilih prescaler timer/counter 0 dan hubungannya dengan clock eksternal pada pin T0. Pada Contoh Program dilakukan setting sbb : ldi r16,0b00000100 ;Presaling 256 untuk timer0 out TCCR0,r16 • Perhitungan Timer Timer 1 menghasilkan 20 mS : TCNT=(1+FFFFh)-((Ttimer x fclk)/N) TCNT=10000h-((0.2 x 11059200)/64) TCNT=10000h-3456d TCNT=10000h-0D80h TCNT=F280h Timer 0 menghasilkan 1.5mS : TCNT=(1+FFh)-((Ttimer x fclk)/N) TCNT=100h-((0.0015 x 11059200)/256) TCNT=100h-64.8d TCNT=100h-40h TCNT=C0h Dimana : TCNT : Nilai timer (Hex) fclk : Frekuensi clock (crystal) yang digunakan (Hz) Ttimer : Waktu timer yang diinginkan (detik) N : Prescaler (1, 8, 64, 256, 1024)
  • 61. Basic AVR Tutorial by Hendawan Soebhakti Page 61 of 68 Electrical Engineering – Batam Polytechnic BAB X Keypad 1. Konfigurasi Keypad Pada dasarnya keypad adalah sejumlah tombol yang disusun sedemikian rupa sehingga membentuk susunan tombol angka dan beberapa menu lainnya. Berikut adalah contoh konfigurasi keypad 4x4 : 1 2 3 4 5 6 7 8 9 0CAN ENT COR MEN Kolom1 Kolom2 Kolom3 Kolom4 Baris1 Baris2 Baris3 Baris4 Gambar 10.1 Konfigurasi Keypad 4x4 2. Cara Mengakses Keypad Berikut ini adalah cara menghubungkan keypad ke mikrokontroler : 1 2 3 4 5 6 7 8 9 0CAN ENT COR MEN B1 B2 B3 B4 K1 K2 K3 K4 PD.0 PD.1 PD.2 PD.3 PD.7 PD.6 PD.5 PD.4 ATmega8535 Gambar 10.2 Menghubungkan Keypad ke Microkontroler
  • 62. Basic AVR Tutorial by Hendawan Soebhakti Page 62 of 68 Electrical Engineering – Batam Polytechnic Untuk mengetahui tombol mana yang ditekan maka kita harus melakukan proses scanning pada keypad dengan langkah sebagai berikut : Langkah 1 : a. Set kondisi Port D = 11101111 b. Baca kondisi Port D : • Jika PD.0 = 0 maka Tombol 1 ditekan • Jika PD.1 = 0 maka Tombol 4 ditekan • Jika PD.2 = 0 maka Tombol 7 ditekan • Jika PD.3 = 0 maka Tombol CAN ditekan Langkah 2 : a. Set kondisi Port D = 11011111 b. Baca kondisi Port D : • Jika PD.0 = 0 maka Tombol 2 ditekan • Jika PD.1 = 0 maka Tombol 5 ditekan • Jika PD.2 = 0 maka Tombol 8 ditekan • Jika PD.3 = 0 maka Tombol 0 ditekan Langkah 3 : a. Set kondisi Port D = 10111111 b. Baca kondisi Port D : • Jika PD.0 = 0 maka Tombol 3 ditekan • Jika PD.1 = 0 maka Tombol 6 ditekan • Jika PD.2 = 0 maka Tombol 9 ditekan • Jika PD.3 = 0 maka Tombol ENT ditekan Langkah 4 : a. Set kondisi Port D = 01111111 b. Baca kondisi Port D : • Jika PD.0 = 0 maka Tombol COR ditekan • Jika PD.1 = 0 maka Tombol MEN ditekan • Jika PD.2 = 0 maka Tombol UP ditekan • Jika PD.3 = 0 maka Tombol DOWN ditekan • Jika kondisi PD.0 ..PD.3 = 1 maka tidak ada penekanan tombol 1 2 3 4 5 6 7 8 9 0CAN ENT COR MEN PD.4 PD.5 PD.6 PD.7 0 1 1 1 1 1 1 1 PD.0 PD.1 PD.2 PD.3 1 2 3 4 5 6 7 8 9 0CAN ENT COR MEN PD.4 PD.5 PD.6 PD.7 1 0 1 1 1 1 1 1 PD.0 PD.1 PD.2 PD.3 1 2 3 4 5 6 7 8 9 0CAN ENT COR MEN PD.4 PD.5 PD.6 PD.7 1 1 0 1 1 1 1 1 PD.0 PD.1 PD.2 PD.3 1 2 3 4 5 6 7 8 9 0CAN ENT COR MEN PD.4 PD.5 PD.6 PD.7 1 1 1 0 1 1 1 1 PD.0 PD.1 PD.2 PD.3
  • 63. Basic AVR Tutorial by Hendawan Soebhakti Page 63 of 68 Electrical Engineering – Batam Polytechnic Contoh Program : .include "m8535def.inc" .def temp =r22 .def dly =r23 .def dly1 =r24 .def Key =r25 .equ col1 =0b11101111 ;Column 1 .equ col2 =0b11011111 ;Column 2 .equ col3 =0b10111111 ;Column 3 .equ col4 =0b01111111 ;Column 4 .org 0x0000 rjmp main main: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ldi r16,0xff out ddra,r16 ;PortA as output ldi r16,0xf0 ;PD[7:4]=output PD[3:0]=input out ddrd,r16 loopx: rcall check_keys rjmp loopx ;------------------------- ; Check keypad sub routine ;------------------------- check_keys: ldi temp,col1 ;Enable column1 out PORTD,temp rcall delay sbic PIND,PD0 ; Pressed key No1 ? rjmp key4 ; if Not, check next key ldi key,0x01 ; if yes... out PortA,key ret ; key=0x01 key4: sbic PIND,PD1 ; Pressed key No4 ? rjmp key7 ; if Not, check next key ldi key,0x04 ; if yes... out PortA,key ret ; key=0x04 key7: sbic PIND,PD2 ; Pressed key No7 ? rjmp keyCAN ; if Not, check next key ldi key,0x07 ; if yes... out PortA,key ret ; key=0x07 keyCAN: sbic PIND,PD3 ; Pressed key CAN ? rjmp key2 ; if Not, check next key ldi key,0x0A ; if yes... out PortA,key ret ; key=0x0A key2: ldi temp,col2 ; Disable the first column... out PORTD,temp ; and enable the second rcall delay sbic PIND,PD0 ; Pressed key No2 ?
  • 64. Basic AVR Tutorial by Hendawan Soebhakti Page 64 of 68 Electrical Engineering – Batam Polytechnic rjmp key5 ; if Not... ldi key,0x02 ; if yes... out PortA,key ret ; key=0x02 key5: sbic PIND,PD1 ; Pressed key No5 ? rjmp key8 ; if Not... ldi key,0x05 ; if yes... out PortA,key ret ; key=0x05 key8: sbic PIND,PD2 ; Pressed key No8 ? rjmp key0 ; if Not... ldi key,0x08 ; if yes... out PortA,key ret ; key=0x08 key0: sbic PIND,PD3 ; Pressed key No0 ? rjmp key3 ; if Not... ldi key,0x00 ; if yes... out PortA,key ret ; key=0x00 key3: ldi temp,col3 ; Disable 2nd column... out PORTD,temp ; and enable the 3th rcall delay sbic PIND,PD0 ; Pressed key No3 ? rjmp key6 ; if Not... ldi key,0x03 ; if yes... out PortA,key ret ; key=0x03 key6: sbic PIND,PD1 ; Pressed key No6 ? rjmp key9 ; if Not... ldi key,0x06 ; if yes... out PortA,key ret ; key=0x06 key9: sbic PIND,PD2 ; Pressed key No9 ? rjmp keyENT ; if Not... ldi key,0x09 ; if yes... out PortA,key ret ; key=0x09 keyENT: sbic PIND,PD3 ; Pressed key ENT ? rjmp keyCOR ; if Not... ldi key,0x0B ; if yes... out PortA,key ret ; key=0x0B keyCOR: ldi temp,col4 ; out PORTD,temp rcall delay sbic PIND,PD0 ; Pressed key COR ? rjmp keyMEN ; if Not... ldi key,0x0C ; if yes... out PortA,key ret ; key=0x0C keyMEN: sbic PIND,PD1 ; Pressed key MEN ? rjmp keyUP ; if Not... ldi key,0x0D ; if yes... out PortA,key ret ; key=0x0D
  • 65. Basic AVR Tutorial by Hendawan Soebhakti Page 65 of 68 Electrical Engineering – Batam Polytechnic keyUP: sbic PIND,PD2 ; Pressed key UP ? rjmp keyDW ; if Not... ldi key,0x0E ; if yes... out PortA,key ret ; key=0x0E keyDW: sbic PIND,PD3 ; Pressed key DOWN ? rjmp check_keys ; if Not... ldi key,0x0F ; if yes... out PortA,key ret ; key=0x0F ;------------------------ ; Delay sub routine ;------------------------ delay: ldi dly,0x10 dl1: ldi dly1,0xff dl2: dec dly1 cpi dly1,0x00 brne dl2 dec dly cpi dly,0x00 brne dl1 ret
  • 66. Basic AVR Tutorial by Hendawan Soebhakti Page 66 of 68 Electrical Engineering – Batam Polytechnic BAB XI Serial USART 1. Inisialisasi USART Berikut register yang perlu disetting untuk mengatur komunikasi serial USART : UBRR (USART Baud Rate Register) UCSRB (USART Control and Status Register B) UCSRC (USART Control and Status Register C) UBRR Digunakan untuk menentukan baud rate USART. Rumus : UBRR = (fosc/16xbaudrate)-1 UCSRB Digunakan untuk mengaktifkan penerimaan dan pengiriman data USART RXEN : Jika di set 1 maka akan mengaktifkan penerimaan TXEN : Jika di set 1 maka akan mengaktifkan pengiriman RXCIE : Jika di set 1 maka akan mengaktifkan interupsi penerimaan UCSRC Digunakan untuk mengatur mode komunikasi USART URSEL : Jika di set 1 maka register UCSRC bisa diakses, sebab alamat register UCSRC dan UBRR sama UCSZ2..UCSZ0 : Menentukan ukuran karakter yang dikirimkan. Jika UCSZ2..UCSZ0 = 000 maka ukuran karakter 5 bit Jika UCSZ2..UCSZ0 = 001 maka ukuran karakter 6 bit Jika UCSZ2..UCSZ0 = 010 maka ukuran karakter 7 bit Jika UCSZ2..UCSZ0 = 011 maka ukuran karakter 8 bit Jika UCSZ2..UCSZ0 = 100-110 tidak digunakan Jika UCSZ2..UCSZ0 = 111 maka ukuran karakter 9 bit Contoh inisialisasi USART :
  • 67. Basic AVR Tutorial by Hendawan Soebhakti Page 67 of 68 Electrical Engineering – Batam Polytechnic .equ fclock =11059200 .equ baud_rate =19200 .equ ubbr_value =(fclock / (16*baud_rate)) - 1 init_usart: ldi temp,high(ubbr_value) out UBRRH,temp ldi temp,low(ubbr_value) out UBRRL,temp ldi temp,(1<<RXEN)|(1<<TXEN)|(1<<RXCIE) out UCSRB,temp ldi temp,(1<<URSEL)|(3<<UCSZ0) out UCSRC,temp 2. Pengiriman Data Pengiriman data dilakukan per byte menunggu UDR kosong (UDR = register tempat menyimpan data USART, menjadi satu dengan register UBRR). Jika kosong, maka bit UDRE(USART Data Register Empty) pada UCSRA akan set 1 sehingga siap menerima data baru yang akan dikirim. Contoh pengiriman USART : usart_tx: sbis UCSRA,UDRE rjmp usart_tx out UDR,txbyte 3. Penerimaan Data Penerimaan data dilakukan dengan memeriksa bit RXC (USART Receive Complete) pada register UCSRA. RXC akan set 1 jika ada data yang siap dibaca. Data yang diterima akan disimpan pada register UDR. Contoh penerimaan USART : usart_rx: sbis UCSRA,RXC rjmp usart_rx in rxbyte,UDR
  • 68. Basic AVR Tutorial by Hendawan Soebhakti Page 68 of 68 Electrical Engineering – Batam Polytechnic Contoh Program : .include"m8535def.inc" .def temp =r16 .def txbyte =r17 .def rxbyte =r18 .equ fclock =11059200 .equ baud_rate =19200 .equ ubbr_value =(fclock / (16*baud_rate)) - 1 .org 0x0000 rjmp main main: ldi temp,low(ramend) out spl,temp ldi temp,high(ramend) out sph,temp rcall init_usart loop: ldi zl,low(2*msg) ldi zh,high(2*msg) load: lpm mov txbyte,r0 cpi txbyte,0 breq done rcall usart_tx inc zl rjmp load done: rjmp done init_usart: ldi temp,high(ubbr_value) out UBRRH,temp ldi temp,low(ubbr_value) out UBRRL,temp ldi temp,(1<<RXEN)|(1<<TXEN)|(1<<RXCIE) out UCSRB,temp ldi temp,(1<<URSEL)|(3<<UCSZ0) out UCSRC,temp ret usart_tx: sbis UCSRA,UDRE rjmp usart_tx out UDR,txbyte ret usart_rx: sbis UCSRA,RXC rjmp usart_rx in rxbyte,UDR ret msg: .db "******Welcome To Politeknik Batam******",13,10,0 Keterangan : angka 13,10 adalah kode ASCII untuk Enter. Jadi pesan akan ditampilkan pada baris baru di editor Hyper Terminal. Angka 0 menunjukkan akhir karakter dari pesan yang dikirim.