Anda di halaman 1dari 42

MODUL TRAINING

MICROCONTROLLER BASIC

ATMEGA16

Tim Trainer Mikrokontroler


2011
MODUL TRAINING MIKROKONTROLLER 201
0

DAFTAR ISI

BAB 1 INTRODUCTION 3
BAB 2 INPUT/OUTPUT & ADC 9
BAB 3 TIMER/COUNTER 21
BAB 4 PWM 27
BAB 5 LCD 31

Page | 2
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

BAB I
INTRODUCTION

1.1. Sistem Komputer


Pada level yang paling sederhana, komputer adalah mesin yang
didesain untuk mengolah, menyimpan, dan mendapatkan kembali sebuah data.
Data/informasi yang menjadi bagian operasi dari sebuah komputer adalah
berupa angka. Semua operasi yang bisa dilakukan komputer seperti: web
browsing, printing, dan image processing tidak lebih merupakan kegiatan
menahan, memindahkan dan mengubah/memanipulasi angka angka.
Sistem komputer dibagi menjadi dua kategori, yaitu:

a) Desktop komputer, mesin yang sering kita sebut sebagai “komputer”,


komputer yang ada di pikiran kita. Desktop komputer bisa
menjalankan beragam program dengan sistem yang diatur oleh suatu
operating sistem (OS) seperti: Windows dan Linux. Dengan
menjalankan aplikasi program yang berbeda, fungsi dari desktop
komputer juga berubah.

b) Embedded komputer, komputer yang terintegrasi dengan sistem lain


(ex: mekanika) dan digunakan untuk suatu fungsi tertentu. Seperti:
microwave oven, DVD player, mainan, handphone dll. Embedded
komputer pada umumnya didesain untuk satu aplikasi saja.

Sistem komputer disusun dari banyak komponen, seperti: processor,


memory, input/output peripheral dll. Berikut adalah gambar skema sistem
komputer sederhana.

Page | 3
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

Gambar 1.1: Sistem komputer sederhana


a) PROCESSOR

Processor/CPU (Central Processing Unit) adalah komponen dari


suatu sistem komputer yang melakukan proses manipulasi dan
pengolahan (eksekusi) data berdasarkan urutan instruksi dari
memory. Instruksi yang dijalankan oleh processor disebut dengan
opcodes atau machine-code.

Opcodes merupakan bahasa mesin berupa angka-angka yang


kadang sulit dimengerti oleh pengguna, untuk itu dibangun instruksi
operasi processor dalam bahasa assembly yang disebut dengan
mnemonic. Urutan dari kumpulan instruksi sebuah processor
disebut dengan program. Program yang dijalankan processor bisa
diubah sesuai dengan kebutuhan aplikasi, sehingga komputer
bersifat programmable.
b) MEMORY

Memory merupakan komponen sistem komputer yang berfungsi


untuk menyimpan data dan instruksi (program) yang dijalankan
oleh processor. Ada beberapa jenis memory yang biasa digunakan
oleh suatu sistem komputer,

1) RAM (Random Acces Memory), RAM adalah “Working


Memory” pada sistem komputer, dimana CPU dapat menuliskan

Page | 4
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
data untuk disimpan sementara. RAM bersifat ”volatile”, yang
berarti datanya akan hilang apabila catu daya dimatikan.

2) ROM (Read Only Memory), bersifat “non volatile”, yang


berarti data tidak akan hilang meskipun catu daya dimatikan.
Tujuan utama dari ROM adalah menyimpan kode/data yang
dibutuhkan pada saat start up.

c) PERANGKAT INPUT/OUTPUT

Perangkat input/output atau peripheral i/o digunakan oleh processor


untuk berkomunikasi dengan dunia luar. Contoh pemakaian
perangkat i/o adalah serial komunikasi pada keyboard, dan parallel
komunikasi pada printer. Perangkat i/o merupakan piranti
pengkondisi sinyal sebelum dapat diolah oleh processor atau
setelah diolah processor sehingga dapat dikeluarkan berupa output
data digital. Ada 3 cara input/output untuk berkomunikasi dengan
processor,:

1) Programmed i/o, processor mengirim dan menerima data pada


i/o sesuai instruksi.

2) Interrupt-driven i/o, sinyal dari luar mengatur eksekusi instruksi


processor. Sinyal luar akan menghentikan eksekusi program
yang dijalankan saat itu, dan menjalankan fungsi program
interrupt.

3) Direct Memory Acces (DMA), memungkinkan transfer data


langsung antara peripheral i/o dan memory tanpa keterlibatan
processor. Biasanya digunakan pada sistem yang membutuhkan
transfer data cepat.

1.2. Mikrokontroller
Mikrokontroller adalah piranti elektronik berupa IC (Integrated
Circuit) yang memiliki kemampuan manipulasi data (informasi) berdasarkan

Page | 5
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
suatu urutan instruksi (program) yang dibuat oleh programmer. Mikrokontroller
merupakan contoh suatu sistem komputer sederhana yang masuk dalam
kategori embedded komputer. Dalam sebuah struktur mikrokontroller akan
kita temukan juga komponen-komponen seperti: processor, memory, clock dll.

Gambar 1.2: contoh beberapa bentuk mikrokontroller ATMEL


Kegiatan desain otomasi merupakan kegiatan memetakan sinyal input
menjadi sinyal output berdasarkan suatu fungsi kontrol agar bisa
dimanfaatkan sesuai kebutuhan. Sasaran dari pelatihan ini adalah
peserta mampu menggunakan mikrokontroller untuk membangun
sendiri suatu sistem otomasi atau embedded system.
1.3. ATMEL AVR ATMEGA16
Sebelum belajar lebih dalam tentang aplikasi mikrokontroller, ada
baiknya kita bicarakan dulu tentang mikrokontroller yang kita gunakan. Pada
pelatihan ini dipilih mikrokontroller jenis ATMEL AVR RISC dengan
pertimbangan sebagai berikut:

a) ATMEL AVR RISC memiliki fasilitas dan kefungsian yang


lengkap dengan harga yang relatif murah.

Page | 6
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
b) Kecepatan maksimum eksekusi instruksi mikrokontroller mencapai
16 MIPS (Million Instruction per Second), yang berarti hanya
dibutuhkan 1 clock untuk 1 eksekusi instruksi.

c) Konsumsi daya yang rendah jika dibandingkan dengan kecepatan


eksekusi instruksi.

d) Ketersediaan kompiler C (CV AVR) yang memudahkan user


memprogram menggunakan bahasa C.

Dari kemampuan dan fasilitas yang dimiliki, AVR RISC cocok dipilih
sebagai mikrokontroller untuk membangun bermacam-macam aplikasi
embedded sistem. Oleh karena itu, dalam pelatihan ini juga dipilih
salah satu jenis AVR RISC sebagai dasar pelatihan yaitu ATMEGA
16. Chip AVR ATMEGA16 memiliki 40 pin kaki, berikut skema kaki
ATMEGA16

Gambar 1.3: skema mikrokontroller AVR RISC ATMEGA16

Page | 7
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
ATMEGA16 memiliki 4 buah port input/output 8 bit, yaitu PORT A,
PORT B, PORT C, dan PORT D. Selain sebagai input/output masing
masing port juga memiliki fungsi yang lain. Misalny PORTA dapat
difungsikan sebagai ADC (Analog to Digital Converter).Fungsi-
fungsi yang lain dapat dilihat pada datasheet ATMEGA16.
1.4. Pemrograman ATMEL AVR
Ada 2 cara untuk memprogram mikrokontroller ini, menggunakan
software AVR assembler yang berbasis pada bahasa assembly, dan
menggunakan software CV AVR (Code Vision AVR) yang berbasis pada
bahasa C. Pada pelatihan ini akan digunakan cara yang kedua dengan
pertimbangan kemudahan pembuatan program dari algoritma yang telah
dibangun.

Pelatihan ini tidak menitikberatkan penggunaan bahasa C pada CV


AVR, tapi lebih pada cara dan aplikasi dari mikrokontroller. Untuk itu peserta
diharapkan membaca sendiri petunjuk pemakaian software ini. Berikut
tampilan utama CVAVR.

Page | 8
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

Gambar 1.4: tampilan utama CV AVR

Page | 9
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

BAB 2
INPUT/OUTPUT & ADC

2.1 Input/Output
Fasilitas input/output merupakan fungsi mikrokontroller untuk dapat
menerima sinyal masukan (input) dan memberikan sinyal keluaran (output).
Sinyal input maupun sinyal output adalah berupa data digital 1 (high, mewakili
tegangan 5 volt) dan 0 (low, mewakili tegangan 0 volt). Mikrokontroller
ATMEGA16 memiliki 4 buah PORT 8 bit bidirectional yang dapat difungsikan
sebagai PORT input maupun PORT output yaitu PORTA, PORTB , PORTC,
dan PORT D. Register digunakan untuk mengatur fungsi dari pin-pin pada tiap
port. Register dapat dianalogikan sebagai kumpulan switch on/off yang
digunakan untuk mengaktifkan fungsi apa yang akan dipakai dari port
mikrokontroller. Pada setiap port pin terdapat 3 buah register 8 bit: DDRxn,
PORTxn, dan PINxn.

Register DDRxn digunakan untuk menentukan arah dari pin yang


bersangkutan. Jika DDRxn diberikan nilai 1 (high), maka pin digunakan
sebagai output. Jika DDRxn diberikan nilai 0 (low), maka pin difungsikan
sebagai input.

Register PORTxn digunakan untuk mengaktifkan pull-up resistor


(pada saat pin difungsikan sebagai input), dan memberikan nilai keluaran pin
high/low (pada saat difungsikan sebagai output). PINxn merupakan register
yang berfungsi untuk mengetahui keadaan tiap-tiap pin pada mikrokontroller.
Perangkat keras yang dibutuhkan untuk mendemonstrasikan aplikasi
input/output adalah sebagai berikut:
a) Led Array (output indicator)
Gambar 1.5: skema led output indicator
b) Push-button array (input signal)

Page | 10
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

Aplikasi Praktik
Berikut adalah beberapa aplikasi praktik yang nantinya dapat lebih
menjelaskan fungsi dan fasilitas input/output. Peserta diharapkan mengikuti
petunjuk langkah demi langkah.
Project 1: Output
● Setting Hardware
a) Hubungkan PORTC dengan led array.

b) Hubungkan SPI port pada universal board dengan port USB


Laptop menggunakan downloader/ USB ASP.

● Programming
a) Buka CV AVR., pilih File->New->Project.

b) Klik YES ketika terdapat option untuk meggunakan


codeWizardAVR.

c) Pilih chip yang akan digunakan ATMEGA16 dengan harga


clock 12 Mhz.

d) Klik tab Ports, pilih tab Port C seperti pada gambar, ubah
setting bit 0 – bit 7 sebagai out.

Hasil setting ini berpengaruh pada nilai register DDRxn, dan PORTxn.

e) Setting selesai, untuk mengenerate program pilih File >>


Generate, Save, and Exit.

f) Buat direktori dengan nama io1.

g) Save file CV AVR dengan nama io1.cwp pada direktori io1.

h) Save file .C dengan nama io1.c pada direktori io1.

i) Save file project dengan nama io1.prj pada direktori io1.

Page | 11
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

Listing Program
a) Sekarang perhatikan kode bahasa C pada bagian setting register
DDRxn, dan PORTxn, tampak sebagai berikut:
b)

c) DDRC = 0xFF yang berarti 8 bit port C difungsikan sebagai output.


PORTC = 0x00 berarti nilai awalan output adalah 0(low).
d) Nilai register PORTC diatas adalah nilai awalan pada saat
mikrokontroller start-up, kita bisa mengubah nilai output port C dengan
mengubah nilai register PORTC pada looping while.

e)

Page | 12
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
f) PORTC = 0xCD, nilai output port C adalah CD dalam bentuk hexa atau
11001101 dalam bentuk biner.
g) Program chip dengan memilih menu Project >> Make atau dengan
menekan shift + F9. Jika pada kode masih terdapat kesalahan/error akan
terlihat pada message.

h) Klik Program, jika ada kesalahan periksa kembali setting hardware.


i) Perhatikan led array, lampu led akan menyala 11001101 jika diurut dari
Port7- Port0.
j) Ulangi langkah 2 sampai 6 dengan memberikan nilai PORTC yang
berbeda beda pada looping while. Perhatikan perubahan nyala led pada
led array.

Project 2: Input
● Setting Hardware
Page | 13
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
a) Hubungkan PORTC dengan led array.

b) Hubungkan PORTB universal board dengan push button array.

c) Hubungkan SPI port pada universal board dengan port USB


Laptop menggunakan downloader.

● Programming
a) Buka CV AVR., pilih File->New->Project.

b) Klik YES ketika terdapat option untuk meggunakan


codeWizardAVR.

c) Pilih chip yang akan digunakan ATMEGA16 dengan harga clock


12Mhz.

d) Setting port C sebagai output (out).

e) Setting port B sebagai Input (in) dan aktifkan pull-up resistor.


(lihat gambar)

Page | 14
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

f) Setting selesai, untuk mengenerate program pilih File >> Generate,


Save, and Exit.

g) Buat direktori dengan nama io2.

h) Save file CV AVR dengan nama io2.cwp pada direktori io2.

i) Save file .C dengan nama io2.c pada direktori io2.

j) Save file project dengan nama io2.prj pada direktori io2.

Listing Program
a) Perhatikan setting register port B dan port C.

Page | 15
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
Port B difungsikan sebagai input (DDRB = 0x00) dengan 8 bit pull-
up resistor diaktifkan (PORTB=0xFF). Port C difungsikan sebagai
output (DDRC=0xFF) dengan nilai awalan pada tiap bit 1 (high).

b) Pada listing kode diatas kita telah men-set port B sebagai input
dengan pull-up resistor dan port C sebagai output. Untuk dapat
menunjukkan funggsi input mikrokontroller tambahkan listing kode
berikut pada bagian looping while.

maksud dari listing program diatas adalah kita menscan


register PINB terus menerus dari PINB.0 – PINB.7.
Perhatikan bahwa untuk membaca perubahan keadaan input
dari push-button dibaca pada register PINxn bukan pada
register PORTxn maupun DDRxn.

c) Program chip dengan memilih menu project >> make atau


dengan menekan shift + F9. Jika pada kode masih terdapat
kesalahan/error akan terlihat pada message.

Page | 16
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

d) Klik Program, jika ada kesalahan periksa kembali setting


hardware.

e) Jika langkah langkah diatas telah dilakukan dengan benar, maka


led pada port C akan menyala sesuai dengan push-button yang
ditekan pada port B.

2.2 ADC (Analog to Digital Converter)

ADC (Analog to Digital Converter) adalah salah satu fasilitas


mikrokontroller ATMEGA16 yang berfungsi untuk mengubah data analog
menjadi data digital. ADC memiliki 2 karakter prinsip, yaitu kecepatan
sampling dan resolusi. Kecepatan sampling suatu ADC menyatakan seberapa
sering sinyal analog dikonversikan ke bentuk sinyal digital pada selang waktu
Page | 17
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
tertentu. Kecepatan sampling biasanya dinyatakan dalam sample per second
(SPS).

Gambar 4.1: ADC dengan kecepatan sampling rendah dan kecepatan sampling
tinggi
Resolusi ADC menentukan ketelitian nilai hasil konversi ADC.
Sebagai contoh: ADC 8 bit akan memiliki output 8 bit data digital, ini berarti
sinyal input dapat dinyatakan dalam 255 (2n – 1) nilai diskrit. ADC 12 bit
memiliki 12 bit output data digital, ini berarti sinyal input dapat dinyatakan
dalam 4096 nilai diskrit. Dari contoh diatas ADC 12 bit akan memberikan
ketelitian nilai hasil konversi yang jauh lebih baik daripada ADC 8 bit.

Prinsip kerja ADC adalah mengkonversi sinyal analog ke dalam


bentuk besaran yang merupakan rasio perbandingan sinyal input dan tegangan
referensi. Sebagai contoh, bila tegangan referensi 5 volt, tegangan input 3 volt,

Page | 18
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
rasio input terhadap referensi adalah 60%. Jadi, jika menggunakan ADC 8 bit
dengan skala maksimum 255, akan didapatkan sinyal digital sebesar 60% x 255
= 153 (bentuk decimal) atau 10011001 (bentuk biner).

ADC pada ATMEGA16 adalah jenis 10 bit successive


approximation dengan tegangan referensi maksimum 5 volt. Register-register
yang harus di setting adalah ADMUX, ADCSRA, dan SFIOR.

Aplikasi Praktik
● Setting Hardware
a) Hubungkan kaki tengah potensiometer pada channel 1 port A
(PORTA.0), dua kaki lainnya pada ground dan Vcc.

b) Hubungkan PORTB universal board dengan port OUTPUT pada


input/output board ( led array).

● Programming
a) Buka CV AVR., pilih File->New->Project.

b) Klik YES ketika terdapat option untuk meggunakan


codeWizardAVR.

c) Pilih chip yang akan digunakan ATMEGA16 dengan harga clock


12 Mhz.

d) Setting port B sebagai output (out).

e) Setting port A sebagai ADC, klik tab ADC kemudian setting


seperti pada gambar.

Page | 19
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

Page | 20
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

f) Setting selesai, untuk mengenerate program pilih File >>


Generate, Save, and Exit.

g) Buat direktori dengan nama adc.

h) Save file CV AVR dengan nama adc pada direktori adc.

i) Save file .C dengan nama adc.c pada direktori adc.

j) Save file project dengan nama adc.prj pada direktori adc.

Listing Program
a) Perhatikan setting register port B. Kita telah men-set port B
sebagai output.

b) Perhatikan bagian listing kode ADC

Page | 21
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

terlihat setting register-register yang mempengaruhi, yaitu


ADMUX, ADCSRA, SFIOR.

c) Sekarang kita mendeklarasikan variable unsigned char didalam


fungsi main. Dipilih unsigned char karena tadi pada saat setting
ADC (langkah ke 5) kita meng-enable-kan box use 8 bit, yang
berarti kita memilih ADC 8 bit. Berikut pendeklarasian variabelnya.

d) Nilai hasil konversi ADC ditempatkan dengan nama variable


adc_data[n]. Berikut listing kode untuk mendapatkan nilai hasil
konversi ADC dan menampilkannya pada 8 bit output port B.

e) Program chip dengan memilih menu project >> make atau


dengan menekan shift + F9. Jika pada kode masih terdapat
kesalahan/error akan terlihat pada message.

Page | 22
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

f) Klik Program, jika ada kesalahan periksa kembali setting


hardware.

g) Putar putar potensiometer, jika langkah langkah diatas telah


benar output pada led array akan menunjukkan nilai dari ADC.

Page | 23
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

Page | 24
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

BAB 3
TIMER/COUNTER

Timer dan counter adalah dua fasilitas yang memiliki perangkat yang sama,
seperti halnya register penampungnya (TCNTx). Ketika difungsikan sebagai
timer, maka register penampung tersebut berisikan jumlah waktu yang
terlampaui tiap selang waktu tertentu. Besar selang waktu tersebut dapat
disetting sesuai dengan kebutuhan. Jika dipakai sebagai counter, maka register
penampung tersebut digunakan untuk menyimpan data hasil perhitungan
terakhir. Saat difungsikan sebagai counter, maka masuk melewati pin TO dan
T1. Register untuk mengatur kapan timer difungsikan sebagai timer dan kapan
sebagai counter adalah TCCRx.

ATMEGA16 memiliki fasilitas 3 buah timer/counter yaitu timer/counter0 8


bit, timer/counter1 16 bit, dan timer/counter2 8 bit. 8 bit dan 16 bit adalah
jumlah data yang bisa ditampung pada register penampungnya. Pada bab ini
akan didemonstrasikan 2 aplikasi praktik, dengan tujuan peserta bisa
membedakan fungsi dari timer dan counter pada mikrokontroller.

Register–register yang digunakan untuk mengatur timer dan counter bisa dilihat
pada DATASHEET ATMEGA16.

TIMER
Menghitung Timer
T(timer0) = Tosc*N*(256-TCNT0)
T(timer1) = Tosc*N*(65536-TCNT1)
T(timer2) = Tosc*N*(256-TCNT2)
Tosc = 1/fosc

T(timer) : Waktu inerval interupt timer


Tosc : Periode clock
fosc : Frekuensi clock
Page | 25
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
N : Skala clock (ada dalam datasheet)

Menghitung Timer dengan menggunakan CVAVR


T(timer0 interupt) = (1/clock value)*(256 – Timer value)
PROJECT 1
MEMBUAT LED BERKEDIP SETIAP 1 DETIK

• Setting hardware
1. Hubungkan PORTC universal board dengan port OUTPUT pada
input/output board (led array).
2. Hubungkan SPI port pada universal board dengan port USB menggunakan
downloader.

Page | 26
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
1. Dengan menggunakan cara yang sama seperti sebelumnya pada
CVAVR set timer0 seperti pada gambar. Timer0 akan mengalami
overflow interupt setiap 1ms dan gunakan PORTC sebagai output.
T(timer0 interupt) = (1/clock value)*(256 – Timer value)

1/46,875kHz * (256 – 209) = 1,00266 ms≈ 1ms

2. Untuk mencapai nilai 1 detik maka diperlukan 1000 kali siklus. Dengan
menambahkan program pada fungsi interrupt [TIM0_OVF] sebagai
berikut.

Program ini akan dieksekusi tiap 1ms dan setiap eksekusi nilai varibel
cacah akan ditambah terus menerus sampai mencapai nilai 1000. Ketika
sudah mencapai nilai 1000 maka varibel data nilainya akan berubah
menjadi kebalikannya dan varibel cacah akan direset kembali menjadi
nol. Proses akan terus terulang.

3. Gunakan PORTC sebagai output dengan menambahkan program


berikut

Page | 27
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

Program ini adalah program utama yang mana program ini akan
mengeluarkan nilai varibel data ke PORTC.

4. Program dan Jalankan pada KIT.

PROJECT 2
Dengan menggunakan cara dan ketentuan yang sama gunakan timer 1 untuk
membuat LED berkedip tiap 2 detik.
Nb. Perhitungan Timer 1
T(timer1 interupt) = (1/clock value)*(65536 – Timer value)

COUNTER

PROJECT 3
• Setting hardware
1. Hubungkan PORTC universal board dengan port OUTPUT pada
input/output board (led array).
2. Hubungkan SPI port pada universal board dengan port USB menggunakan
downloader.

Pada project ini kita akan belajar prinsip kerja counter dengan menggunakan
input dari luar.
1. Hubungkan PORTB.0/T0 dengan pushbutton.
2. Seting pada CVAVR sesuai dengan gambar dan gunakan PORTC
sebagai output. Anda bisa memilih penambahan nilai akan dieksekusi
pada saat tepi naik atau tepi turun.
3. Tambahkan program berikut pada fungsi interrupt [TIM0_OVF]
Page | 28
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

Fungsi ini akan dieksekusi ketika tombol T0 ditekan. Ketika T0 ditekan


nilai TCNT0 akan bertambah, karena nilai TCNT0 awal adalah FEh
maka ketika ditambah satu akan terjadi overflow dan interupsi akan
terjadi.

4. Gunakan PORTC sebagai output


dan tuliskan program berikut pada
fungsi utama

Page | 29
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

Program ini berfungsi mengeluarkan nilai variabel data ke PORTC.


5. Program dan jalankan pada KIT

PROJECT 4
Buatlah program dimana nilai dari PORTC akan bertambah jika tombol T1
ditekan sebanyak lima kali! Gunakan Timer1 sebagai counter.

Page | 30
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
BAB 4
PWM (Pulse Width Modulation)

PWM (Pulse Width Modulation) adalah teknik mendapatkan efek sinyal


analog dari sebuah sinyal digital yang terputus-putus. PWM dapat dibangkitkan
hanya dengan menggunakan digital i/o yang difungsikan sebagai output

Gambar 4.1 Contoh PWM dengan duty cycle 50%.

Pada contoh gelombang diatas, perbandingan waktu antara sinyal high


(1) dan sinyal low (0) adalah sama. Gelombang diatas dikatakan memiliki duty
cycle 50%. Duty cycle adalah perbandingan antara lebar sinyal high (1) dengan
lebar keseluruhan siklus (cycle). Jika amplitudo gelombang PWM adalah 5
volt, maka tegangan rata rata (seolah olah analog) yang kita dapatkan adalah
2,5 volt. Berikut contoh gelombang PWM dengan duty cycle 10%, jika
amplitudo gelombang 5 volt maka akan didapatkan tegangan rata rata analog
0,5 volt.

Gambar 4.2 Contoh PWM dengan duty cycle 10%


Pada ATMEGA 16 ada 2 cara membangkitkan PWM, yang pertama
PWM dapat dibangkitkan dari port input/outputnya yang difungsikan sebagai
output. Yang kedua adalah dengan memanfaatkan fasilitas PWM dari fungsi
timer/counter yang telah disediakan. Dengan adanya fasilitas ini proses
pengaturan waktu high/low sinyal digital tidak akan mengganggu urutan
program lain yang sedang dieksekusi oleh processor. Selain itu, dengan
menggunakan fasilitas ini kita tinggal memasukkan berapa porsi periode waktu

Page | 31
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
on dan off gelombang PWM pada sebuah register. OCR1A, OCR1B dan
OCR2 adalah register tempat mengatur duty cycle PWM.
Pada bab ini akan diperagakan bagaimana cara mendapatkan sinyal
analog dari sebuah sinyal digital dengan menggunakan teknik PWM.

Aplikasi Praktik
● Setting Hardware
0 1. Hubungkan PORTD.4 dan PORTD.5 pada port OUTPUT input/output-
board
1 2. Hubungkan SPI port pada universal board dengan port USB Laptop
menggunakan downloader.

● Programming
0 1. Buka CV AVR., pilih File->New->Project.
1 2. Klik YES ketika terdapat option untuk meggunakan codeWizardAVR.
2 3. Pilih chip yang akan digunakan ATMEGA16 dengan harga clock 16
Mhz.
3 4. Setting PORTD.4 (OC1B) dan PORTD.5 (OC1A) sebagai output
(out).

Page | 32
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

4
5 5. Klik tab Timers, pilih tab timer1 kemudian setting seperti pada
gambar. Perhatikan setting mode non-inverted pada out A dan
mode inverted pada out B.

Page | 33
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

6
0 6. Setting selesai, untuk mengenerate program pilih File >> Generate,
Save, and Exit.
7 7. Buat direktori dengan nama pwm.
8 8. Save file CV AVR dengan nama pwm pada direktori pwm.
9 9. Save file .C dengan nama pwm.c pada direktori pwm.
10. Save file project dengan nama pwm.prj pada direktori pwm.

● Project Setting
1 1. Terlihat pada tampilan CV AVR kode yang telah digenerate. Konfigurasi
project dengan memilih menu project >> configure.
2 2. Pilih tab after make, aktifkan program the chip.

● Listing Program

Page | 34
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
0 1. Kita telah menyetting PORTD.4 dan PORTD.5 sebagai output, dengan
nilai awal 0 (low).
1

0 2. Perhatikan register yang mempengaruhi, sama seperti register pada


timer/counter pada bab sebelumnya.

0 3. Untuk mengatur porsi on dan off kita berikan nilai pada register OCR1A
dan OCR1B pada looping while. Nilai maksimum dari OCR1A dan
OCR1B adalah 1023 (10bit) seperti pada setting kita sebelumnya (langkah
5). Tuliskan listing kode seperti dibawah,

Page | 35
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
4. Kita telah memberikan nilai 800 pada OCR1A dan 800 pada OCR1B (skala
1023).
1 5. Program chip dengan memilih menu project >> make atau dengan
menekan shift + F9. Jika pada kode masih terdapat kesalahan/error akan
terlihat pada message.
2 6. Klik Program the chip, jika ada kesalahan periksa kembali setting
hardware.
3 7. Amati nyala lampu pada input/output-board.
4 8. Ulangi dengan memberikan nilai OCR1A dan OCR1B yang berbeda
beda.

10

Page | 36
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

BAB 5
LCD

Pada software CodeVisionAVR telah disediakan beberapa rutin


standar yang dapat langsung digunakan. Anda dapat melihat lebih detil pada
manual dari CodeVisionAVR. Beberapa contoh fungsi yang telah disediakan
antara lain adalah:

1) Fungsi LCD:
Berada pada header lcd.h yang harus di-include-kan sebelum
digunakan. Sebelum melakukan include terlebih dahulu disebutkan pada port
mana LCD akan diletakkan. Hal ini juga dapat dengan mudah dilakukan dengan
menggunakan CodeWizardAVR.

Fungsi-fungsi untuk mengakses LCD diantaranya adalah :


• unsigned char lcd_init(unsigned char lcd_columns)
Untuk menginisialisasi modul LCD, menghapus layar dan meletakkan posisi
karakter pada baris ke-0 kolom ke-0. Jumlah kolom pada LCD harus disebutkan
(misal, 16). Kursor tidak ditampakkan. Nilai yang dikembalikan adalah 1 bila
modul LCD terdeteksi, dan bernilai 0 bila tidak terdapat modul LCD. Fungsi ini
harus dipanggil pertama kali sebelum menggunakan fungsi yang lain.

• void lcd_clear(void)
Menghapus layar LCD dan meletakkan posisi karakter pada baris ke-0 kolom
ke-0.
Page | 37
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

• void lcd_gotoxy(unsigned char x, unsigned char y)


Meletakkan posisi karakter pada kolom ke-x baris ke-y. Nomor baris dan kolom
dimulai dari nol.
• void lcd_putchar(char c)
Menampilkan karakter c pada LCD.
• void lcd_puts(char *str)
Menampilkan string yang disimpan pada SRAM pada LCD.

2) Fungsi Delay:
Menghasilkan delay dalam program-C. Berada pada header delay.h
yang harus di-includekan sebelum digunakan. Sebelum memanggil fungsi,
interrupsi harus dimatikan terlebih dahulu, bila tidak maka delay akan lebih
lama dari yang diharapkan. Juga sangat penting untuk menyebutkan frekuensi
clock chip IC AVR yang digunakan pada menu Project-Configure-C Compiler-
Code Generation.
Fungsi delay yang disediakan adalah:
• void delay_us(unsigned int n)
menghasilkan delay selama n μ-detik, n adalah nilai konstan
• void delay_ms(unsigned int n)
menghasilkan delay selama n mili-detik, n adalah nilai konstan. Kedua fungsi
tersebut secara otomatis akan me-reset watchdog-timer setiap 1 milidetik
dengan mengaktifkan instruksi wdr.

Aplikasi Praktik
● Setting Hardware
a) Hubungkan PORTC universal board dengan push button
(port INPUT pada input/output-board) menggunakan kabel pita.

b) Hubungkan PORT D universal board dengan LED Array


(port INPUT pada input/output-board) menggunakan kabel pita.

Page | 38
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0
c) Hubungkan PORTB universal board dengan LCD pin
menggunakan kabel pita.

d) Hubungkan SPI port pada universal board dengan port


USB Laptop menggunakan downloader.

e) Hidupkan saklar power, led power pada universal board


harus dalam keadaan nyala.

● Programming
a) Buka CV AVR., pilih File->New->Project.

b) Klik YES ketika terdapat option untuk meggunakan codeWizardAVR

c) Pilih chip yang akan digunakan ATMEGA16 dengan harga clock 4


Mhz. kemudian pilih tab Ports, secara default port merupakan pin input,
lakukan seting untuk portD sebagai output, lalu pilih tab LCD, gunakan
portB karena pada board LCD terhubung dengan portB.

Page | 39
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

d) Setting selesai, untuk mengenerate program pilih File >> Generate, Save, and
Exit.

e) Simpan pada direktori e:\embedded. Beri nama source file, nama


project file, dan nama codewizard project file anda.

f) Pada header program tambahkan include berikut.

g) Pada main program sisipkan perintah berikut

Page | 40
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

h) Sebelum melakukan kompilasi, lakukan seting berikut untuk pertama


kali saja. Pilih Project >> Configure. Pastikan pada tab C Compiler
nama chip dan clock telah sesuai dengan IC yang terpasang pada
board. Dan pada tab After Make pilih Program the Chip. Lalu tekan
tombol OK. Pilih Settings >> Programmer, pilih Kanda System
STK200+/300 untuk AVR Chip.Programmer Type. Lalu tekan tombol
OK.

i) Secara bertahap anda dapat melakukan check syntax, compile, dan


make. Atau langsung pilih Project >> Make. Bila tidak ada error maka
akan muncul kotak dialog informasi. Siapkan board, nyalakan suplai
tegangannya, hubungkan kabel download dari PC ke board. Kemudian
tekan tombol Program.
j) Bila tidak ada kesalahan maka pada layar LCD akan ditampilkan tulisan
“Tekan
pushbutton”. Cobalah menekan pushbutton (sebelah kanan), maka pada
layer LCD akan ditampilkan tulisan “PB1 ditekan” dan LED menyala.
Apabila push-button dilepas maka tampilan layar LCD kembali seperti
semula dan LED padam.

Page | 41
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA
MODUL TRAINING MIKROKONTROLLER 201
0

Page | 42
WORKSHOP HIMPUNAN MAHASISWA ELEKTRO – FAKULTAS TEKNIK
UNIVERSITAS BRAWIJAYA