Anda di halaman 1dari 45

Board Pelatihan Mikrokontroler

Pelatihan menggunakan board khusus untuk latihan yang menggunakan


mikrokontroler Atmel jenis ATMEGA16 dengan frekuensi crystal oscilator
sebesar 16 MHz. Beberapa fitur dan komponen yang ada pada board ini
antara lain :
1. LCD 16x2 yang tersambung pada PORTC
2. Trimpot untuk mengatur kontras LCD
3. Delapan LED dan Resistor tersambung pada PORTB
4. Delapan Push Button tersambung pada PORTD
5. Satu Seven Segment tersambung pada PORTA
6. Sensor Suhu LM35 tersambung pada PORTA.1
7. Potensiometer tersambung pada PORTA.7
8. LDR tersambung pada PORTA.0
9. Rangkaian Power Supply IC 7805
10. Tombol Reset dan Tombol Power
11. RTC dengan SDA tersambung pada PORTD.6 dan SCL pada PORTD.7
12. Buzzer tersambung pada PORTA.6

awesome technology
CODE VISION AVR
WORKSPACE

Untuk memudahkan dalam pembuatan kode, ada beberapa window yang bisa
membantu kita seperti terlihat dibawah ini.

 Code Navigator berisi nama project, file, header yang digunakan dan
list error dan warning yang terjadi jika source code dicompile.
 Code Information berisi library yang digunakan,variabel definisi,Typedefs,
global dan static variable serta fungsi yang sudah dideklarasikan.
 Clipboard history menampilkan riwayat copy kita, ini sangat berguna
untuk menyalin register atau intruksi yang ada pada Code Wizard AVR.
 Message berisi list dan tipe error dan warning jika source code telah
dicompile.

awesome technology
MEMBUAT PROJECT BARU

Untuk memulai membuat program pertama harus membuat project dahulu contoh
kali ini adalah kita membuat tulisan yang tampil pada LCD.langkahnya sebagai
berikut.

1. Pilih File -> New atau bisa langsung mengklik icon .

2. Pilih Project kemudian klik Ok

3. Pilih Yes untuk menggunakan fitur CodeWizardAVR.

awesome technology
4. Isi Keterangan pada kolom chip seperti dibawah

5. Pilih LCD pada PORTC sesuai dengan board pelatihan.

awesome technology
6. Kemudian pilih File -> Generate, Save and Exit

7. Buat folder Pelatihan Mikrokontroler 2015 dan buat folder


lagi didalamnya latihan1 kemudian save file disana dengan nama
latihan1

Klik save kemudian beri nama yang sama untuk kedua langkah
save selanjutnya.

8. Kode hasil dari CodeWizardAVR terlihat seperti dibawah ini

awesome technology
9. Kode untuk menampilkan tulisan pada LCD bisa ditulis seperti ini

Kode ini ditulis didalam looping while(1) dibawah komentar //place your
code here

10. Setelah itu pilih project -> build all atau bisa dengan mengklik icon
11. Setelah di bulid all maka akan muncul keterangan seperti berikut

Tertulis No error maka kode yang ditulis sudah benar dan dapat
dijalankan.

awesome technology
12. Setelah ini lihat pada folder berikut.

Akan terlihat 2 file yaitu latihan1.rom dan latihan1.hex untuk melakukan


simulasi atau download program yang dibutuhkan adalah file berekstensi
.hex

awesome technology
Mendownload Program dengan PROGISP

1. Buka program progisp, lihat tanda pada Progisp bila berwarna silver maka
downloader belum terhubung kemudian slect chip yang digunakan

2. Setting Fuse&Lock pada LowValue = FF dan HighValue = DF

3. Pilih Load Flash untuk memasukkan program ke mikro

9
4. Cari file hex. Yang ingin di tanamkan ke mikro

5. Klik Auto, bila berhasil akan ada notif seperti ini

10
1. Bahasa C
Berikut ini penjelasan bahasa C dan aturan penulisan program dalam Bahasa C.
Untuk seterusnya, pada buku ini akan dibahas pemrograman mikrokontroler
AVR menggunakan bahasa C saja. Berikut ini penjelasan tentang bahasa C.

Penulisan Program dalam Bahasa C

#include <mega16.h> Preprocessor (#) :


#include <delay.h> Digunakan untuk
memasukan (include) text
#define IRsensor PINA.0
dari file lain dan
#define pompa PORTB.0 mendefinisikan macro

//variabel glodal
/*
unsigned int i,j;
…komentar untuk beberapa
baris
void main(void) ..*/
{
//variable local Atau jika untuk satu baris saja
Char data_rx; // …komentar…
DDRA=0x00;
PORTA=0xFF;
DDRB=0xFF; Inisialisasi
PORTB=0x00;
……
……

While(1)
{
……
…… Program Utama
…… Program akan berulang terus karena syarat while (1)
}; Akan selalu menghasilkan nilai benar (true)

Penjelasan:
Preprocessor (#) : Digunakan untuk memasukan (include) text dari file lain,
mendefinisikan macro yang dapat mengurangi beban kerja pemrograman dan
meningkatkan legibility source code (mudah dibaca).

11
#define : digunakan untuk mendefinisikan macro
Contoh: #define ALFA 0xff
#define SUM(a,b) a+b
#define sensor PINA.2
#define pompa PORTB.0

Komentar
Penulisan komentar untuk beberapa baris komentar sekaligus
/*
…komentar
..*/

Penulisan komentar untuk satu baris saja


// …komentar…

1.1 Identifiers
Identifier adalah nama yang diberikan pada variable, fungsi, label atau objek
lain. Identifier dapat mengandung huruf (A …Z, a…z) dan angka (0 … 9) dan
karakter ( … ). Identifiers bersifat case sensitive. Identifier dapat mencapai
maksimal 32 karakter.

1.2 Konstanta
Konstanta Integer dan long integer ditulis dalam bentuk decimal (1234), dalam
bentuk biner (0b101001), hexadecimal mempunyai awalan 0x (0xff), atau
dalam octal dengan awalan 0 (0777).
unsigned integer mempunyai akhiran U (10000U)
long integer mempunyai akhiran U (99L)
unsigned long integer mempunyai akhiran UL (99UL)
floating point mempunyai akhiran F (1.234F)
konstanta karakter harus di lingkungi oleh tanda kutip (‘a’)

1.3 Tipe Data


Tabel 1.1 Tipe Data
Tipe Ukuran (Bit) Range
Bit 1 0, 1 (Tipe data bit hanya dapat
digunakan untuk variable global.)
Char 8 -128 to 127
Unsigned char 8 0 to 255
Signed char 8 -128 to 127
Int 16 -32768 to 32767
Shirt int 16 -32768 to 32767

12
Unsigned int 16 0 to 65535
Signed int 16 -32768 to 326767
Long int 32 -2147483648 to 2147483647
Unsigned long int 32 0 to 4294967295
Signed long unit 32 -2147483648 to 2147483647
Float 32 ±1.175e-38 to ±3.402e38
Double 32 ±1.175e-38 to ±3.402e38

1.4 Operator
Tabel 1.2 Daftar Operator Kondisi
Operator Kondisi Keterangan
< Lebih kecil
<= Lebih kecil atau sama dengan
> Lebih besar
>= Lebih besar atau sama dengan
== Sama dengan
!= Tidak sama dengan

Tabel 1.3 Daftar Operator Aritmatika


Operator Aritmatika Keterangan
+ Penjumlahan
- Pengurangan
* Perkalian
/ Pembagian
% Sisa Bagi (modulus)

Tabel 1.4 Daftar Operator Logika


Operator Logika Keterangan
! Boolean NOT
&& Boolean AND
|| Boolean OR

Tabel 1.5 Daftar Operator Bitwise


Operator Bitwise Keterangan
~ Komplemen Bitwise
& Bitwise AND
| Bitwise OR
^ Bitwise Exclusive OR
>> Right Shift
<< Left Shift

13
Tabel 1.6 Daftar Operator Assignment
Operator Assignment Keterangan
= Untuk memasukan nilai
+= Untuk menambah nilai dari keadaan semula
-= Untuk mengurangi nilai dari keadaan semula
*= Untuk mengalikan nilai dari keadaan semula
/= Untuk melakukan pembagian terhadap
bilangan semula
%= Untuk memasukan nilai sisa bagi dari
pembagian bilangan semula
<<= Untuk memasukan shift left
>>= Untuk memasukan shift right
&= Untuk memasukan bitwise AND
^= Untuk memasukan bitwise XOR
\= Untuk memasukan bitwise OR

1.5 Program Kontrol


1.5.1 Percabangan
Perintah if dan if … else …
Perintah if dan if … else … digunakan untuk melakukan operasi
percabangan bersayarat. Fungsi-fungsi untuk menetapkan kondisi dapat dilihat
dalam table. Sintaks penulisan if dapat ditulis sebagai berikut:

if(<expression>) <statement>;
Sintaks perintah if … else .. dapat dituliskan sebagai berikut:
if(<expression>) <statement>;
else <statement2>;
Jika hasil testing expression memberikan hasil tidak nol statement1 akan
dilaksanakan. Pada keadaan sebaliknya statement2 yang akan dilaksanakan.
Sebaiknya pemanfataan perintah if untuk beberapa kondisi dilakukan dengan
menggunakan blok-blok.

Percabangan switch
Perintah percabangan if … else … dapat digantikan dengan perintah switch.
Dalam pernyataan switch, sebuah variable secara berurutan diuji oleh beberapa
konstanta bilangan bulat atau konstanta karakter. Sintaks perintah switch dapat
ditulis sebagai berikut:
Switch(variable)
{
case konstanta_1: statement;

14
break;
case konstanta_2: statement;
break;
case konstanta_n: statement;
break;
default: statement;
}

Hal-hal yang harus diperhatikan:


1. Switch hanya dapat memeriksa variable terhadap sebuah konstanta, sedangkan
if dapat memeriksa persyaratan perbandingan (lebih besar, lebih kecil, dan
seterusnya)
2. Tidak ada dua konstanta yang sama di dalam sebuah switch.
3. Perintah hasil yang lebih baik daripada perintah if … else … yang membentuk
tangga dan/atau bersarang.

1.5.2 Looping (Pengulangan)


Looping adalah pengulangan satu beberapa perintah sampai mencapai
keadaan tertentu. Ada tiga perintah looping, yaitu: for …, while …, dan do
…while… Sintaks loop for dapat dituliskan sebagai berikut:

For
Untuk pengulangan yang melakukan proses increment

for(nama_variable = nilai_awal;syarat_loop;nama_variable ++)


{
Statement_yang_diulang;
}

//untuk pengulangan yang melakukan proses decrement


for(nama_variable=nilai_awal;syarat_loop;nama_variable - -)
{
Statement_yang_diulang;
}
Syarat_loop adalah pernyataan relasional yang menyatakan syarat berhentinya
pengulangan, biasanya berkaitan dengan variable control, nama_variable++ dan
nama_variable--, menyatakan proses increment dan proses decrement pada
variable control.

While
Perintah while dapat melakukan looping apabila persyaratannya benar. Sintaks
perintah while dapat dituliskan sebagai berikut:

15
nama_variable = nilai_awal;
while (syarat_loop)
{
Statement_yang_akan_diulang;
nama_variable++;
}

do …while
Pemerintah while terlebih dahulu melakukan pengujian persyaratan sebelum
melakukan looping. Kadang-kadang hal ini menimbulkan kerepotan-kerepotan
yang tidak perlu, misalnya inisialisasi variable control. Salah satu solusi adalah
dengan menggunakan loop do …while.

nama_variable = nilai_awal;
do
{
statement_yang_akan_diulang;
nama_variable + +;
}
while(syarat_loop)

1.6 Array
Array adalah deretan variable yang berjenis sama dan mempunyai nama
yang sama.. setiap anggota deretan (elemen) diberi nomor yang disebut indeks,
dimulai dari indeks nol. Array diatur agar mempunyai lokasi memori yang
bersebelahan dengan alamat terkecil menunjuk elemen array pertama dan alamat
terbesar menunjukkan indeksnya. Bentuk deklarasi array adalah:
Tipe nama_array[ukuran]
int nilai[100];
nilai[1]=10;
nilai[2]=3;

1.7 Fungsi
Sebuah program yang besar dapar dipecah menjadi beberapa subprogram
yang terpisah yang melakukan fungsi tertentu. Subprogram yang seperti itu
disebut fungsi, sebagai contoh, sebuah program yang melakukan proses pengisian
data berulang kali dapat dilengkapi dengan sebuah fungsi yang bertugas untuk
melakukan proses pengisian data. Apabila program hendak melakukan proses
pengisian data, program dapat melakukan pemanggilan fungsi tersebut.

Fungsi adalah sebuah blok yang melingkupi beberapa perintah. Deklarasi fungsi
dapat dilakukan dengan cara:

16
Tipe nama_fungsi(argumen)
Parameter dalam fungsi dijelaskan sebagai berikut:
Tipe adalah nilai yang dihasilkan oleh fungsi, jika tidak dinyatakan, hasil
fungsi dianggap bertipe integer. Deklarasi tipe void dapat
dimanfaatkan untuk menghindari terjadinya nilai balik.

Argumen adalah deklarasi variable apa saja yang dibutuhkan fungsi dan bersifat
optional.

Fungsi dengan nilai balik


Fungsi ini memberikan hasil yang berupa nilai
Fungsi dengan nilai balik(return Value)
Contoh:
long luas()
{
int sisi=10;
return (sisi*sisi);
}

Fungsi tanpa nilai balik


Fungsi ini tidak memberikan hasil yang berupa nilai melainkan berupa sebuah
proses. Fungsi ini bertipe void.
Contoh:
void kedip()
{
PORTD=0;
delay_ms(500); //delay 500 ms
PORTD=255;
delay_ms(500);
PORTD=0;
delay_ms(500);
return;
}

Pernyataan Return
Pernyataan return dapat menyatakan dua hal:
1. Return mengakhiri jalannya fungsi dan kembali ke program utama.
2. Mengirim nilai balik.

Fungsi dapat ditulis pada akhir program dengan membuat sebuah prototype
function di bagian awal program. Cara menulis fungsi yang seperti itu
memberikan kemudahan kepada programmer untuk memeriksa dan membaca

17
ulang sebuah program yang besar.

Parameter dalam sebuah fungsi


Parameter dalam sebuah fungsi dibagi dua yaitu parameter formal dan
parameter actual. Parameter formal adalah parameter pada saat fungsi itu
dibuat, sedangkan parameter actual adalah parameter yang terdapat pada saat
pemanggilan fungsi.

Contoh:
//mendeklarasikan fungsi
long func(int param_1,int param_2);

//mendefenisikan fungsi, param_1 dan param_2 disebut parameter formal


long func(int param_1,int param_2)
{
return param_1*param_2
}

//memanggil fungsi dan mengisikan nilai yang dihasilkan ke sebuah variable x,


nilai 20 dan 30 disebut parameter actual x=func(20,30); //mengisikan
parameter_1=20 dan parameter_2=30

//hasil perkaliannya disimpan ke variable x

18
2. LED
LED (Light Emitting Diode) adalah salah satu jenis diode yang dapat
memancarkan cahaya ketika dialiri oleh arus listrik. Pada penggunaanyya, LED
biasanya digunakan sebagai indikator suatu peralatan. Kaki LED ada dua, yakni
kaki katoda (-) dan kaki anoda (+).
Jika LED disambungkan ke kaki mikrokontroller, maka dibutuhkan
resistor untuk membatasi arus yang masuk ke LED agar LED tidak putus. Besar
resistornya berkisar antara 300-200 ohm.
Pada mikrokontroller ATMEGA16 terdapat 32 port yang bisa berfungsi
sebagai GPIO (General Purpose Input Output). Fitur ini sangat berguna untuk
mengggunakan push button sebagai interface atau menggunakan indikator seperti
LED. Register yang mengatur hal ini adalah DDR (Data Direction Register).
Untuk menjadikan Port tersebut sebagai input, bisa kita isi register itu dengan nilai
0. Sedangkan untuk output diisi nilai 1.

Contoh:
 DDRA.0=0; //set PORTA ke-0 sebagai input
 DDRB.1=1; //set PORTB ke-1 sebagai output
Setelah mengatur fungsi dari tiap PORT sekarang kita bisa mengatur
keadaan tiap PORT.Keadaan tiap PORT berbeda antara input dan output.

Jika kita mengatur DDR sebagai input maka kita bisa memilih 2 keaadaan
antara tri-state dan pull-up.Keadaan tersebut bisa diatur melalui register PORT
jika diisi 0 maka masuk kategori tri state dan jika 1 maka masuk kategori pull-
up.untuk penggunaan push button diperlukan keadaan pull-up.contoh penulisan:
 DDRA=0; //set semua PORTA sebagai input
 PORTA.0=0;//set PORTA ke-0 dengan keadaan tri-state
 PORTA.1=1;//set PORTA ke-1 dengan keadaan pull-up
Setelah itu untuk membaca keadaan logika yang terjadi pada PORT
Mikrokontroller dapat menggunakan register PIN. Isi register ini berubah-ubah
sesuai dengan masukan logika yang ada pada kaki mikrokontroller.

Jika kita mengatur DDR sebagai output maka kita bisa memilih 2
keaadaan antara keluaran low(logika 0/false) dan keluaran high(logika
1/true).Keadaan tersebut bisa diatur melalui register PORT jika diisi 0 maka
masuk kategori low state dan jika 1 maka masuk kategori high.Pengaturan ini
cocok untuk mengatur H-Bridge motor DC,pengaturan indikator LED dll.contoh
penulisan:
 DDRB=0xff; //set semua PORTB sebagai output
 PORTB.0=0;//set PORTA ke-0 dengan keadaan low
PORTB.1=1;//set PORTA ke-1 dengan keadaan high

19
Pada board mikrokontroller, LED disambungkan pada PORTB, semua
kaki katoda (-) disambungkan ke ground, sehingga LED aktif high. Sehingga,
setting program LED pada codewizard adalah sebagai berikut

Gambar diatas adalah source code untuk menyalakan semua LED pada
PORTB. Untuk mematikan, tinggal ganti angka ‘1’ dengan angka ‘0’. Sebenarnya

20
ada beragam cara untuk memahami pemrograman mikrokontroller menggunakan
Bahasa C. Permasalahan yang sering muncul bagi pemula adalah “dari mana
dulu??”. Nah lo..dari mana?,, apa dulu yang dikerjakan?,,nulis apa dulu?,,oke..gak
usah bingung. Mari kita bahas satu per satu.
Membuat program/source code pada dasarnya adalah untuk memecahkan
masalah. Jadi, bagi orang-orang yang gak mau ketemu banyak masalah ya mau
nggak mau harus mau mengatasi masalah-masalah. Weleh-weleh,, bahasanya
tingkat tinggi gan,. Nah, ukuran berhasilnya suatu program itu diukur dari
permasalahan yang ada terpecahkan atau tidak. Urusan panjang pendeknya
program dan bentuk program tidak dipermasalahkan. Yang penting adalah
program tersebut dapat menyelesaikan masalah yang ada.

Praktik 1 Nyalakan LED


Yang ini itungannya termasuk gampang,, jadi gak usah terlalu panjang
lebar. Sebagian penjelasan sudah dijelaskan diatas. Nah, jika yang kita kehendaki
hanya Led pada PORTB.7 saja yang nyala..? ya tinggal diubah saja pada while(1)
nya..Jangan lupa, biner PORT adalah LSB. Sehingga, untuk menyalakan Led pada
PORTB.7 source code nya adalah seperti ini

Atau bisa juga seperti ini

Kalau lednya selang-seling ??

Untuk latihan selanjutnya, coba buat latihan led-led lain ya..udah gede kok

21
Praktik 2 Blinking LED
Hal yang paling penting ketika membuat program mikrokontroller yaitu
adalah mengetahui skematik. Kearah mana Led-Led itu nyambung. Jika kita tidak
tahu skematik ya dada wassalam. Gak bisa apa-apa. Coba lihat gambar diatas,
hayoo,..LED nyambung di port apa..? Yup.. benar, di Port B. Setelah itu ayo kita
pahami rangkainnya.
Dari skematik diatas dapat kita ketahui bahwa 8 buah LED terhubung di
PORTB.0 sampai PORTB.7. Led akan menyala jika output PORT berlogika ‘1’.
Oke,, hardware dah tahu..terus..??
Langkah selanjutnya adalah kita membuat/ membayangkan/ memikirkan/
melamunkan / logika berfikir bagaimana 8 led tersebut agar tampak nyala
bergantian. Nah, logikanya dapat begini..
*Alur = Pertama, nyalakan semua led yang terhubung pada portB.
Kemudian tunda selama beberapa saat. Setelah itu, matikan seluruh led dan tunda
selama beberapa saat. Nah, nyala – tunda – mati – tunda ini diulang-ulang terus
menerus atau istilahnya looping terus.
Setelah tahu skematik dan logika, yuk lanjut coding..

Penjelasannya adalah, fungsi diatas menggunakan header delay.h. Hal ini


dimaksudkan agar kita dapat memanggil fungsi delay nantinya. Owh iyaa,
0b11111111 itu dapat diganti dengan 0xff. Hasilnya sama aja, Cuma binernya
diganti dengan hexa.

Praktik 3 Running LED


Pada praktik ketiga ini, sebenarnya sama seperti praktik sebelumnya yaitu
menggunakan fungsi delay. Udah tau kan apa itu delay? Gak usah bingung, inti
programnya kita membuat led nyala bergantian dan secara berurutan. Begini
alurnya.

22
*Alur = Nyalakan led pada PORTB.0, yang lain matikan Tunda selama 1 detik
Nyalakan led pada PORTB.1, yang lain matikan Tunda selama 1 detik
Dan seterusnya…

Wah, kok panjang bangett,, tenang tenang, kita coba dengan array

23
Masih kurang pendekkk,,,nyooh..

Nah, kalau geser ke kiri ? ya tinggal ubah aja arahnya sama nyala awalnya..

24
Mudah kan,, hehe. Nah, kalau pengen lebih cepet tinggal ganti delaynya dengan
angka yang lebih kecil.

25
3. Push Button
Push button jarene Wikipedia adalah perangkat / saklar sederhana yang
berfungsi untuk menghubungkan atau memutuskan aliran arus listrik dengan
sistem kerja tekan. System kerja disini berarti saklar akan bekerja sebagai device
penghubung atau pemutus aliran arus listrik saat tombol ditekan, saat tombol tidak
ditekan akan kembali pada kondisi normal.

Untuk skematik rangkaiannya gak usah digambar, ngebak-ngebaki buku.


Pokoknya semua Push Button nyambung dengan PIND. Oke..?? Dalam
mikrokontroller, push button itu nyambungnya dari PIND ke push button lalu ke
ground. Sehingga, jika push button ditekan, maka kaki-kaki PIND akan
tersambung ke ground. Nah, jadi push button itu bekerja aktif low. Jadi, pada
codewizard, push button disetting sebagai input dan dipull-up.

Push Button LED

Praktik 1 Push Button dengan LED


Jadi, alurnya adalah seperti ini, PORTD dijadikan input dalam bentuk push
button, sedangkan PORTB dijadikan output dalam bentuk nyala led. Nah, gimana
source codenya..? mudah saja

26
Lah, lha kok kalau tombolnya dilepas lednya ikut-ikutan padam,,..? oke ganti
source code lagi

Monggo, silahkan ditekan-tekan push buttonnya yaa.

27
4. Buzzer
Buzzer adalah sebuah kompone elektronika yang berfungsi untuk
mengubah getaran listrik menjadi getaran suara. Berbeda dengan speaker yang
dapat memainkan beragam nada-nada, buzzer hanya bersuara “tiiiit” ketika dialiri
arus listrik. Pada modul ini, buzzer yang digunakan adalah buzzer 5v yang
disambungkan pada PORTA.5. Buzzer akan menyala jika diberi logika 1 (5v).
PORTA.5 DIGANTI
PORTA.0

Praktik 1 Buzzer sebagai nada pembuka


Buzzer juga bisa digunakan sebagai nada pembuka. Tujuannya untuk apa,,..??
Biar kelihatan keren lah proyek kita. Jadi, setiap sebelum memulai project baru,
tinggal copas codingan buzzer dibawah.

==>PORTA.6 diganti PORTB.0

28
5. SEVEN SEGMENT
Seven segment adalah salah satu perangkat output yang berguna untuk
menampilkan angka decimal. Seven segment biasanya digunakan pada jam-jam
digital, meteran elektronik serta perangkat-perangkat lain yang menampilkan
angka numeric. Ada 2 jenis seven segment, yakni Common Anoda dan Common
Cathoda. Namun, seven segment yang digunakan pada modul ini adalah Common
Anoda (Kaki + dijadikan satu).

Gambar 1.1 Skematik Seven Segment

Jangan lupa, setting PORT dan DDRA menjadi kek gini…


 PORT A keluaran logika 0
 PORT A diset sebagai Output

Nah, tabel untuk Seven Segment model Common Anoda adalah


Tabel 1 Konfigurasi Hexa Seven Segment Common Anoda
ANGKA h g f e d c b a Hex
0 1 1 0 0 0 0 0 0 C0h
1 1 1 1 1 1 0 0 1 F9h
2 1 0 1 0 0 1 0 0 A4h
3 1 0 1 1 0 0 0 0 B0h
4 1 0 0 1 1 0 0 1 99h
5 1 0 0 0 0 0 1 0 92h
6 1 0 0 0 0 0 1 0 82h
7 1 1 1 1 1 0 0 0 F8h
8 1 0 0 0 0 0 0 0 80h
9 1 0 0 1 0 0 0 0 90h

Jadi, untuk menghidupkan setiap segment pada seven segment butuh logika low
(active low). Jangan lupa pasang jumper “7 seg” pada modul kalau ingin
menggunakan seven segment.

29
Praktik 1 Menampilkan Angka
Untuk menampilkan sebuah angka, maka kita harus tahu pemetaan seven
segment mana yang harus menyala dan harus mati. Contoh, untuk menampilkan
angka “0”.

Maka, segment yang harus menyala adalah segment A,B,C,D,E,F. Nah, pada
common anoda untuk menyalakan segment cukup memberikan logika ‘0’ (low)
dan logika ‘1’ (high) untuk padam. Sehingga untuk membuat angka 0 codingnya
adalah seperti ini.


begitu pula dengan angka2 yang lain.

Praktik 2 Counter Up 0 sampai 9


Counter Up ini menggunakan delay. Untuk memanggil fungsi delay cukup
tulis kan

#include <delay.h>

30

Program pada while (1) diatas masih menggunakan sistem bilangan biner pada
penempatan PORT. Jika menggunakan hexadecimal maka source code pada
while(1) adalah

31
Praktik 3 Counter Up sampai 9 menggunakan Array
Biar codingan kita jadi sedikit, maka kita menggunakan array. Array
adalah suatu variable yang mempresentasikan daftar (list) atau kumpulan data
yang mempunyai tipe data sama. Dengan array, kita bisa mengatur nyala seven
segment sesuka hati kita, hanya dengan mengubah nilai di array itu, tanpa
mengubah kode utamanya. Jangan lupa panggil header delay.h.

32
Array diatas mempunyai nama “nyala” dengan jumlah indeks 10 (0 sampai 9)
dengan tipe data unsigned char.

nyala[0] = nyala ke 0 diberi nilai 0xC0


nyala[1] = nyala ke 1 diberi nilai 0xf9
….
nyala[9] = nyala ke 9 diberi nilai 0x90
dst…

Praktik 4 Push Button + Seven Segment


Pada praktik ketiga kali ini adalah menggunakan input pushbutton
kemudian ditampilkan pada seven segment. Fungsi yang digunakan kali ini adalah
#define dan if … then …

Source code diatas menggunakan dua fungsi, yakni fungsi #define dan !.
Maksud dari define adalah mendefinisikan sesuatu dengan sesuatu. Maksudnya,
kata-kata yang susah didefinisikan dengan kata-kata yang mudah-mudah saja,
misal PIND.0 kan susah dihafal, mending diganti jadi “satu”.
Sedangkan fungsi ! digunakan untuk mengganti nilai nol (0). Jadi misal
ada coding

33
if(!nol) itu artinya if (nol==0),
if(!satu) itu artinya if (satu==0),
dan seterusnya.
sebenarnya masih bisa dipecah lagi seperti ini
jika (PIND.0==0), maka seven segment menampilkan angka “0”
jika (PIND.1==0), maka seven segment menampilkan angka “1”

Nah, “0” itu artinya nyambung ke ground, lihat lagi skematik push button. Ini nih
logikanya.
*Alur = jika PIND.0 tersambung ke ground, maka seven segmen
membentuk angka nol. Jika PIND.1 tersambung ke ground, maka seven segment
membentuk angka 1, dan seterusnya.

6. LCD
LCD paling sering dipakai untuk piranti display pada aplikasi
mikrokontroller. Semua karakter dapat kita tampilkan ke LCD. LCD yang kita
pakai adalah lcd 16x2, maksudnya lcd mempunyai 16 kolom dan 2 baris.

Nah, untuk settingan di codewizard bisa dilihat dibawah ini

Setelah kita Generate, Save and Exit. Fungsi-fungsi yang digunakan untuk
menulis di lcd bisa dilihat di help

34
Praktik 1 Menampilkan karakter di lcd
Untuk menampilkan kata di lcd, maka hal pertama yang harus ditulis
adalah posisi koordinat mana tulisan itu akan muncul. Nah, seperti yang kita
ketahui, lcd dibagi menjadi 2 koordinat, yakni koordinat x dan koordinat y
(dimulai dari koordinat 0,0). Misal kita ingin menampilkan tulisan seperti ini

Maka, alur berfikir kita adalah sepeti ini


* Pergi ke koordinat x=0 dan y=0, tampikan “Pelatihan Mikro”.
Pergi ke koordinat x=0 dan y=1, tampilkan “HME 2015”.
Dan source cedenya adalah seperti ini :

Untuk selanjutnya tulisan pelatihan mikro bisa diganti dengan nama masing-masing

35
Praktik 2 LCD dengan switch … case …
Switch case biasanya digunakan untuk menuliskan state-state atau
membuat suatu menu-menu. I/O yang digunakan adalah pushbutton pada PIND
dan LCD pada PORT.C. Jangan lupa, PIND diset sebagai input dan pull-up.
*Alur = Jika PIND.0 ditekan, maka lcd menampilkan “PIND.0 ditekan”.
Jika PIND.1 ditekan, maka lcd menampilkan “PIND.1 ditekan”.

Beriku source codenya :

Hal yang perlu diperhatikan dalam menuliskan switch… case… adalah


adanya fungsi break; di setiap akhir menu case, fungsi ini dipanggil agar program
bisa keluar dari looping salah satu case.
Ingatt..program dalam Bahasa C itu mengalir dari atas ke bawah, terus
mengalir dari baris satu ke baris lainnya. Jika tidak kita panggil, maka program
hanya menjalankan fungsi di case tersebut.

36
Praktik 3 Menu lcd menggunakan metode label
Label adalah salah satu cara untuk membuat menu-menu pada
mikrokontroller. Penulisannya cukup sederhana saja, hanya menggunakan menu
dan goto…,
*Alur = Jika PIND.2 ditekan, maka di lcd menampilkan “PIND.2 ditekan”
Jika PIND.3 ditekan, maka di lcd menampikan “PIND.3 ditekan”
Cukup simple kan..hehe. Berikut source codenya

Sama dengan program menggunakan switch… case…, bedanya ini adalah


metode label, hanya menggunakan fungsi goto …. Selanjutnya dapat dikreasikan
sendiri dengan menu-menu yang lain di rumah masing-masing.

37
Praktik 4 Animasi Running teks
Latihan ini adalah latihan menggunakan dan mengubah-ubah letak tulisan
pada LCD yang dikendalikan oleh fungsi lcd_gotoxy(x,y); Maka, apabila kita
ingin membuat animasi running teks, kita cukup memanfaatkan koordinat x
dengan cara menggeser menggunakan looping “for”, Fungsi delay berfungsi untuk
menunda kerja mikrokontroller agar kita dapat melihat dengan jelas pergerakan
teks.

Build all dan masukkan file hex ke dalam board, dan lihat apa yang terjadi
pada tulisan lcd.

38
7. RTC
RTC itu merupakan IC yang gunanya untuk menyimpan waktu dan
tanggal. RTC (Real Time Clock). RTC adalah jam elektronik berupa chip yang
dapat menghitung waktu dan menyimpan data secara real time. RTC dilengkapi
dengan batere sebagai penyedia daya pada IC. RTC sangat akurat sebagai
pewaktu (timer) karena menggunakan osilator kristal.

Jadi, biar datanya tidak hilang, DS1307 menggunakan batere CMOS 3v


sebagai backup catudaya jika cartudaya utama dimatikan. Jalur data menggunakan
SDA/SCL atau protokol komunikasi I2C buatan phillips. Sebelumnya, setting
LCD dan I2C pada codewizard terlebih dahulu.

Kalau sudah, nah, bagaimana cara ngoding IC RTCnya..?? Biar gampang


dan sama-sama paham mari kita buka HELP. Kalau sudah, lihat di bagian indeks,
ketikkan ds 1307.h. Setelah itu, kita baca bersama-sama.

39
Praktik 1 Membuat Jam Digital
Untuk membuat jam digital, terlebih dahulu kita setting LCD pada PORTC
dan RTC pada PORTD.6 dan 7. Jika sudah, tuliskan source code dibawah ini. Oh
iyaa, download programnya dua kali yaa,, yang tak lingkari nanti ditambah //

40
8. ADC
Analog to Digital Converter (ADC) adalah pengubah atau pengkonversi
sinyal dari sinyal Analog ke Digital, yang jadi pertanyaan adalah kenapa sinyal
analog tersebut harus di ubah ke sinyal digital? Yaitu agar sinyal analog tersebut
bisa dibaca sebagai data dan kalo sudah dalam bentuk data maka kita dapat dengan
mudah mengolah data tersebut didalam perangkat digital.Perhitungan ADC
rumusnya

Vinput adalah tegangan masukan,Vref adalah tegangan referensi yang kita


pakai dan resolusi adalah resolusi dari ADC yang kita pakai.misal 8 bit berarti
(2^8)-1=255.
Pada ATMEGA16 sudah ada fitur ADC padanya sehingga kita tidak perlu
menambahkan IC ADC atau analog comparator ( kecuali tidak cukup ).ada 8 port
ADC pada Port A.cara mengaktifkan fitur ADC pada ATMEGA16 melalui code
wizard AVR adalah sebagai berikut.

Untuk mengaktifkannya isi checkbox tersebut sesuai dengan gambar di


atas.kita menggunakan ADC dengan resolusi 10 bit. Kalau ingin resolusi 8 bit yaa
tinggal di check use 8 bit. Tegangan referensi dari VCC atau power supply mikro
dan clock frequency 1000kHz.berikut ini code yang digenerate dari CVAVR.

41
Untuk mengetahui nilai ADC dari PORT.A tertentu dapat dilakukan
dengan memangggil fungsi read_adc();
Jika kita menginginkan data tegangan analig dari data digital yang kita
dapatkan bisa menggunakan rumus

Praktik 1 Potensiometer
Potensiometer adalah salah satu jenis resistor variable, maksudnya adalah
nilai resistansi dari potensiometer dapat diubah-ubah. Ada banyak macam
potensiometer, ada potensiometer geser, ada potensiometer linear, ada yang
logaritmik. Nah, potensiometer yang kita gunakan adalah potensiometer putar
logaritmik yang besarnya 10k ohm.

Dalam kehidupan sehari-hari, biasanya potensiometer digunakan untuk


mengatur equalizer amplifier. Nah, prinsip kerjanya dengan membesar dan
mengecilkan nilai resistansi yang ada pada potensiometer. Jika resistansi berubah,
otomatis nilai tegangan yang masuk kan berubah (ingat kata pak Ngatelan V=I.R).
Potensio di modul ini tersambung ke port A.7, sehingga untuk mengukur
nilai potensiometer tinggal di read_adc(7); Cekidot,, berikut programnya.

42
5

Praktik 2 Sensor suhu LM35


LM 35 adalah sensor suhu yang menggunakan tegangan sebagai output. Jadi,
output tegangan akan berubah seiring berubahnya suhu. Dari karakteristik ini,
maka kita bisa menggunakan fitur ADC untuk membaca suhu di sekitar kita.

43
Dari datasheet kita dapat ketahui bagaimana cara menggunakan lm35 dan
karakteristik teganganya. Terlihat bahwa ketika suhu naik 1 derajat celcius, maka
tegangan output akan bertambah sebesar 10mV. Oke,, lanjut silahkan buka
codewizard, pilih adc yang 10 bit dan LCD terus generate save and exit, terus lihat
penjelasan rumusnya di datasheet.

Maka aka nada kenaikan sebesar 0.01 v tiap derajat celcius.

Untuk mendapatkan suhu dalam derajat celcius, maak harus kita bagi dengan
factor skala 0.01. Dengan tegangan referensi 5v dan resolusi 10 bit atau 1023,
maka rumusnya menjadi

44
6 //adc=read_adc(6)

untuk ADC LDR caranya sama dengan ADC POTENSIO, Hanya Saja PIN yang digunakan
adalah PINA.7.

45

Anda mungkin juga menyukai