Anda di halaman 1dari 85

MODUL

PRAKTIKUM
MIKROKONTROLER DAN INTERFACING
Modul ajar ini dibiayai dari dana DIPA
Nomor : 0622/023-04.2.01/15/2012 tanggal 9 Desember 2011
Politeknik Negeri Malang

Oleh :
Ir. Azam Muzakhim Imammuddin, MT
NIP. 196705041994031004

POLITEKNIK NEGERI MALANG


2012

HALAMAN PENGESAHAN
MODUL AJAR
1.

2.

3.

4.
5.

Judul Modul Ajar

Digunakan Pada Mata Kuliah

:
:
:
:
:
:
:
:
:
:
:
:
:
:
:

Semester
Penulis Utama
1. Nama Lengkap
2. NIP
3. Pangkat/golongan
4. Jabatan
5. Program Studi
6. Jurusan
Jumlah AnggotaTim Penulis
a. Nama Anggota 1
b. Nama Anggota 2
Bidang Ilmu
Sumber Dana

Praktikum Mikrokontroler dan


Interfacing
Praktikum Mikrokontroler dan
Interfacing
(3) tiga
Ir. Azam Muzakhim Imammuddin, MT
196705041994031004
IV/a
Staf Pengajar
Teknik Telekomunikasi
Teknik Elektro
- orang
.....
.....
Mikroprosesor
Modul ajar ini dibiayai dengan dana
DIPA Nomor : 0622/02304.2.01/15/2012 tanggal 9 Desember
2011
Politeknik Negeri Malang
Malang, 10 Nopember 2012

Menyetujui,
Ketua Jurusan Teknik Elektro

Penulis Utama,

Supriatna Adhisuwignjo. S.T., M.T.


NIP. 19710108 199903 1 001

Ir. Azam Muzakhim I., M.T.


NIP. 19670405 199403 1 004

Mengetahui,
Direktur
Politeknik Negeri Malang

Ir. Tundung Subali Patma, M.T.


NIP. 19590424 1988031 002

SURAT PERNYATAAN
Yang bertanda tangan di bawah ini:
Nama Lengkap
NIP
Bidang Ilmu
Pangkat/Golongan
Jabatan Fungsional
Jurusan/Program Studi
Perguruan Tinggi

:
:
:
:
:
:
:

Ir. Azam Muzakhim Imammuddin, MTnuri, ST.


196705041994031004
Mikroprosesor
IV/aI
Lektor Kepala
Teknik Elektro/Teknik Telekomunikasi
Politeknik Negeri Malang

Dengan ini menyatakan bahwa:


1.

Naskah modul ajar bidang ilmu Mikroprosesor dengan judul:


PRAKTIKUM MIKROKONTROLER DAN INTERFACING

2.

Belum pernah diterbitkan dan bebas dari plagiarisme.


Bersedia menuntaskan naskah modul ajar sesuai waktu yang ditentukan.

Demikian surat pernyataan ini dibuat dengan sebenarnya.


Malang, 10 Nopember 2012
Disahkan oleh,
Ketua Jurusan Teknik Elektro

Yang membuat,

Supriatna Adhisuwignjo. S.T., M.T.


NIP. 19710108 199903 1 001

Ir. Azam Muzakhim I., M.T.


NIP. 19670405 199403 1 004

Mengetahui:
Direktur

Ir. Tundung Subali Patma, M.T.


NIP 19590424 198803 1 002

KATA PENGANTAR

Segala puji dan syukur bagi Allah SWT, atas segala berkat rahmat dan
nikmat Nya dengan terselesaikannya modul ajar bidang ilmu Mikroprosesor
dengan judul PRAKTIKUM MIKROKONTROLER DAN INTERFACING
di Jurusan Teknik Elektro program Studi Telekomunikasi.
Dan pada kesempatan ini tak lupa kami sampaikan terima kasih kepada:

Direktur Politeknik Negeri Malang

Ketua Jurusan Teknik Elektro

Ketua Program Studi Teknik Telekomunikasi

Dan rekan-rekan pengajar jurusan Teknik Elektro terutama Program Studi


Telekomunikasi Politeknik Negeri Malang
Dan semoga hal ini dapat bermanfaat bagi kita semua

Malang, 10 Nopember 2012

Penulis

DAFTAR ISI

halaman
KATA PENGANTAR

DAFTAR ISI

ii

DAFTAR TABEL

iii

DAFTAR GAMBAR

iv

BAB I

DASAR MIKROKONTROLER

1.1. Pendahuluan

1.2. Mikrokontroler ATMega 16

1.3. Bahasa C

BAB II

1.3.1. Struktur Bahasa C

1.3.2. Indentifiers

1.3.3. Konstanta

1.3.4. Tipe Data

10

1.3.5. Operator

10

1.3.6. Kontrol Aliran Program

12

CODEVISION AVR DAN PROTEUS

16

2.1. Codevision AVR

16

2.1.1. Tata Cara Menggunakan CodeWizard

18

2.1.2. Penulisan Program Bahasa C di CodeVision AVR

23

2.2. Proteus

29

2.2.1. Langkah-Langkah Menggunakan Proteus


BAB III INPUT-OUTPUT

30
38

3.1.

Teori Dasar Input-Output

38

3.2.

Tampilan Seven Segmen

40

3.3. Cara Menggunakan Progisp AVR Programmer

42

3.4. Percobaan I Input Output

44

3.5. Percobaan II Input Output

45

BAB IV ANALOG TO DIGITAL CONVERTER (ADC)

46

4.1. ADC Dalam ATMega 16

46

4.2. LM35

51

Halaman
4.3. LDR

52

4.4. Tata Cara Inisialisasi ADC dengan CodeWizard

53

4.5. Percobaan I ADC

55

4.6. Percobaan II ADC

56

4.7. Percobaan III ADC

56

4.8. Percobaan IV ADC

57

BAB V UNIVERSAL SYNCHRONOUS AND ASYNCHRONOUS


SERIAL RECEIVER TRANSMITTER (USART)

58

5.1. USART Dalam ATMega 16

58

5.2. Cara Inisialisasi USART dengan Code Wizard

66

5.3. Percobaan I USART ATMega16

69

5.4. Percobaan II USART ATMega16

72

5.5. Percobaan III USART ATMega 16

72

DAFTAR PUSTAKA

73

DAFTAR TABEL

Halaman
Tabel 1.1. Fungsi Alternatif Pin-Pin Port B

Tabel 1.2. Fungsi Alternatif Pin-Pin Port C

Tabel 1.3. Fungsi Alternatif Pin-Pin Port D

Tabel 1.4. Tipe Data dalam Bahasa C

10

Tabel 1.5. Daftar Operator Kondisi

11

Tabel 1.6. Daftar Operator Aritmatika

11

Tabel 1.7. Daftar Operator Logika

11

Tabel 1.8. Daftar Operator Bitwise

11

Tabel 1.9. Daftar Operator Assignment

12

Tabel 3.1. Nilai Port C untuk menampilkan angka 0 sampai 9

41

Tabel 4.1. Pilihan Tegangan Referensi ADC

48

Tabel 4.2. Kanal Input ADC untuk jenis Single Ended Input

49

Tabel 4.3. Frekuensi clock ADC

50

Tabel 5.1.Pengaturan bit-bit UPM

64

Tabel 5.2. Kombinasi UCSZ2 sampai UCSZ0 untuk Pengaturan


Ukuran Karakter

65

Tabel 5.3. Pengaturan Bit UCPOL

65

Tabel 5.4. Perhitungan Baud Rate dan nilai Register UBRR

66

DAFTAR GAMBAR

Halaman
Gambar 1.1. Blok Diagram ATMega 16

Gambar 1.2. Konfigurasi Pin ATMega 16

Gambar1.3. Peta Memori Program ATMega 16

Gambar 1.4. Peta Memori Data

Gambar 1.5. Flowcart Perintah if

12

Gambar 1.6. Flowcart Perintah if else

13

Gambar 1.7. Flowcart Perintah while

14

Gambar 1.8. Flowcart Perintah do while

14

Gambar 1.9. Flowcart Perintah for

15

Gambar 2.1. Tampilan Awal Program CodeVisionAVR

18

Gambar 2.2. Langkah Awal Pembuatan Program

19

Gambar 2.3. Tampilan Setelah Pilihan File >> New

19

Gambar 2.4. Tampilan Setelah Tombol Ok dipilih

19

Gambar 2.5. Tampilan Berikutnya Setelah Pilihan Yes

20

Gambar 2.6. Menu Pertama CodeWizard untuk Pemilihan Mikrokontroler 20


Gambar 2.7. Menu Port pada CodeWizard

21

Gambar 2.8. Proses Pembuatan Program

21

Gambar 2.9. Proses Pemberian Nama file .c

22

Gambar 2.10. Proses pemberian nama file Project

22

Gambar 2.11. Tampilan untuk Penyimpanan file .cwp

22

Gambar 2.12. Tampilan Awal CodeVisionAVR Setelah Menggunakan


CodeWizard

23

Gambar 2.13. Tampilan Header file dan Deklarasi variabel Global

25

Gambar 2.14. Tampilan Penulisan Program Utama

26

Gambar 2.15. Cara melakukan Kompilasi Program

27

Gambar 2.16. Informasi Hasil Kompilasi

27

Gambar 2.17. Cara Melakukan Build Program

28

Gambar 2.18. Tampilan Infromasi setelah Proses Build Program

28

Gambar 2.19. Beberapa ToolBar Program Proteus

29

halaman
Gambar 2.20. Tampilan setelah tombol P di-klik

30

Gambar 2.21. Menu Terminals Mode

30

Gambar 2.21. Tampilan saat memasukkan Keyword ATMega16

31

Gambar 2.22. Meletakkan ATMega di dalam Sheet

31

Gambar 2.23. Tampilan saat Pengambilan Komponen LED-YELLOW

32

Gambar 2.24. Tampilan Saat pengambilan Resistor

32

Gambar 2.25. Rangkaian Mikrokontroler ATMega16, Resistor dan LED

33

Gambar 2.26. Tampilan saat mengambil DIPSW-8

33

Gambar 2.27. Tampilan Komponen Mode untuk Resistor Pack

34

Gambar 2.28. Rangkaian Percobaan I Input Output

34

Gambar 2.29. Tampilan Setelah ATMega 16 di-klik

35

Gambar 2.30. Tampilan Saat Mengambil File hex untuk di unduhkan ke


ATMega16

35

Gambar 2.31. Setting Clock ATMega 16

36

Gambar 2.32. Tampilan Saat Tombol Play ditekan

36

Gambar 3.1. Register-Register PORTA

39

Gambar 3.2. Tampilan Seven Segmen

41

Gambar 3.3 Tampilan ProgIsp

42

Gambar 3.4. Hasil Perubahan mikrokontroler yang digunakan

42

Gambar 3.5. Tampilan Saat hardware sudah terpasang

43

Gambar 3.6. Tampilan Menu Open Load Flash

43

Gambar 3.7. Rangkain ATMega16 untuk Percobaan Input-Output

44

Gambar 3.8. Rangkaian Mikrokontoler ATMega16


dengan LED dan 7 Segmen

44

Gambar 3.9. Flowcart untuk menampilkan Nim 1


dan Nim2 pada 7 Segmen

45

Gambar 4.1. Blok Diagram ADC ATMega 16

46

Gambar 4.2. Bit-bit dalam Register ADMUX

48

Gambar 4.3. Format Hasil Konversi Bila DLAR sama dengan 0

48

Gambar 4.4. Format Hasil Konversi Bila DLAR sama dengan 1

49

Gambar 4.5. Bit-bit dalam register ADCSRA

49

halaman
Gambar 4.6. Rangkaian Sensor Suhu dalam Celcius

51

Gambar 4.7. Salah Satu Bentuk Fisik LM35

51

Gambar 4.8. Karakteristik dan Simbol LDR

52

Gambar 4.9. LDR

52

Gambar 4.10. ADC dengan CodeWizard

53

Gambar 4.11. Lanjutan Inisialisasi ADC dengan CodeWizard

54

Gambar 4.12. Fungsi adc_read(adc_input)

54

Gambar 4.13. Cara Menggunakan fungsi read_adc()

55

Gambar 3.14. Rangkain ATMega16 untuk percobaan ADC

55

Gambar 4.15. Percobaan Menggunakan LDR

56

Gambar 4.16. Setting Volt Referensi sebesar 2,56 Volt

57

Gambar 5.1. Blok Diagram USART pada ATMega 16

59

Gambar 5.2. Register UDR

60

Gambar 5.3. Bit-Bit Register UCSRA

60

Gambar 5.4. Bit-bit Register UCSRB

62

Gambar 5.5. Bit-bit Register UCSRC

63

Gambar 4.6. Bit-bit Register UBRRH dan UBRRL

65

Gambar 5.7. Inisialisasi USART dengan Code Wizard

67

Gambar 5.8. Inisialisasi USART Lanjutan

67

Gambar 5.9. Fungsi interrput [USART_RXC] dan getchar(void)

68

Gambar 5.10. Letak Penulisan Program Terima Data Serial

69

Gambar 5.11. Letak Program Kirim Data Serial

69

Gambar 5.12, Rangkaian Percobaan USART ATMega16

70

Gambar 5.13. Rangkaian Percobaan II USART ATMega16

72

DAFTAR PUSTAKA

73

10

BAB I
DASAR PEMROGRAMAN MIKROKONTROLER
Capaian Pembelajaran:
Setelah membaca dan mengkaji bab ini, pembaca akan mampu:
Menjelaskan tentang Mikrokontroler ATMega16 dan fasilitas-fasilitas yang
dimiliknya;
Menjelaskan stuktur dasar bahasa pemrograman C untuk pemrograman
ATMega16

1.1.

Pendahuluan
Mikrokontroler adalah merupakan suatu chip tunggal yang berisi

mikroprosesor dan memori program yang biasanya bersifat Read Only Memory
(ROM), memori serbaguna atau biasa disebut Random Access Memory (RAM),
Unit Input-Output, Unit Timer/Counter dan beberapa fasilitas yang lain seperti
Analog to Digital Converter (ADC), Electrical Eresable Programmable ROM
(EEPROM) dan lain-lain. Mikrokontroler dapat juga dianggap mikrokomputer,
hal ini karena hanya dengan satu chip/Integrated Circuit(IC) sudah memiliki unitunit yang setara dengan semua komputer.
Salah satu perusahaan yang mengembangkan mikrokontroler adalah Atmel
dengan jenis mikrokontroler AVR (Alf and Vegards Risc prosesor) yang
dibangun dengan arsitektur Reduced Intruction Set Computing (RISC) 8 bit yang
mengemas semua instruksi dalam kode 16-bit dengan sebagian besar instruksi
dikerjakan/dieksekusi dalam 1 (satu) siklus clock. Dan bila dibandingkan dengan
MCS51 untuk mengerjakan satu instruksi membutuhkan 12 siklus clock. Hal ini
terjadi karena kedua jenis mikrokontroler tersebut memiliki arsitektur yang
berbeda. AVR berteknologi RISC (Reduced Instruction Set Computing),
sedangkan seri MCS 51 berteknologi CISC (Complex Instruction Set Computing).
Atmel mengelompokkan AVR menjadi 4 keluarga yaitu keluarga ATtiny,
keluarga AT90Sxx, keluarga ATMega dan AT86RFxx. Yang membedakan antara
kelompok adalah kapasitas memori, kemampuan peripheral, dan fungsinya.
Sedangkan dari segi arsitektur dan instruksi yang digunakan hampir sama. Dan

11

yang memiliki fasilitas yang lengkap adalah keluarga ATMega. Salah satu yang
termasuk dalam keluarga ATMega adalah ATMega 16.

1.2.

Mikrokontroler ATMega 16
ATMega 16 adalah sebuah mikrokontroler CMOS 8 bit yang berdaya

rendah yang berbasiskan arsitektur pengembangan RISC dengan satu instruksi


dikerjakan dalam satu clock dengan mencapai kecepatan throughputs mendekati 1
MIPS per MHz yang dapat membuat perancangan system yang lebih
mengoptimalkan konsumsi daya dibandingkan dengan kecepatan proses.
ATMega 16 merupakan prosessor AVR yang menggabungkan instruksi set
yang banyak dengan 32 register umum. Yang ke semua 32 register secara
langsung

dihubungkan

dengan

Aritmatika

Logika

Unit

(ALU),

yang

memungkinkan dua buah register yang independen untuk diakses dalam satu
instruksi dieksekusi dalam satu siklus clock. Yang dihasilkan dari arsitektur AVR
adalah kode yang lebih efisien dengan capaian throughputs hingga sepuluh kali
lebih cepat dari konvensional CISC mikrokontroler.
ATmega16 ini menyediakan beberapa fitur sebagai berikut: 16 Kbyte InSystem Programmable Flash, Memori program dengan kemampuan Baca-TulisSementara, 512 byte EEPROM, 1 Kbyte SRAM, 32 jalur I/O, 32 register kerja,
antarmuka JTAG untuk Boundaryscan, dukungan dan pemrograman On-chip
Debugging, tiga Timer / Counter fleksibel dengan mode perbandingan, Interupsi
Internal dan Eksternal, sebuah programmable serial USART, Dua-kawat Serial
Interface

berorientasi byte, serial USART (Universal Synchronous and

Asynchronous serial Receiver and Transmitter) yang dapat diprogram,8 kanal 10bit ADC, 4 saluran PWM (Pulse Width Modulation), Master Slave (SPI) Serial
Interface dan Watchdog Timer yang dapat diprogram dengan osilator internal,
port serial SPI, dan enam pilihan mode daya rendah.
Mikrokontroler ini diproduksi dengan menggunakan teknologi nonvolatile
memori Atmel yang canggih. Dilengkapi dengan OnChip ISP (In System
Programming) Flash memori program yang memungkinkan untuk sistem
diprogram ulang melalui interface SPI serial oleh seorang programmer atau
dengan program Boot On-chip yang berjalan pada inti AVR. Atau melalui

12

program boot yang dapat menggunakan interface untuk men-download aplikasi


program di Flash memori Aplikasi. Software di bagian flash Boot akan terus
berjalan sedangkan bagian flash Aplikasi diperbarui, sehingga menyediakan
proses Baca - Tulis saat mikrokontroler beroperasi.
Oleh karena menggabungkan sebuah CPU RISC 8-bit dengan In-System
Self Programmable Flash pada sebuah chip monolitik, sehingga Atmel
ATmega16 adalah mikrokontroler kuat yang sangat fleksibel, hemat biaya dan
solusi untuk banyak aplikasi control.
Gambar 1.1 menunjukkan Blok Diagram dari ATMega 16. Sedangkan
untuk konfigurasi Pin ATMega 16 ditunjukkan dalam Gambar 1.2.

Gambar 1.1. Blok Diagram ATMega 16 (ATMega,20120;3)

13

Gambar 1.2. Konfigurasi Pin ATMega 16(ATMega16,2010;2)


Dengan Penjelasan Pin Gambar 1.2. sebagai berikut:
- VCC

Sumber Catu Daya Digital

- GND

Ground

- Port A (PA7 -

Port A berfungsi sebagai input-input analog untuk A/D

PA0)

Converter.
Port A juga berfungsi sebagai 8-bit bidirectional port I / O,
jika A/D Converter tidak digunakan. pin port juga
menyediakan internal pull-up resistor yang dipilih untuk
setiap bitnya.

- Port B (PB7
PB0)

Port B adalah 8-bit bidirectional I /O port dengan internal


pull-up resistor (dipilih untuk setiap bit).
Masing-masing Pin Port B juga berfungsi seperti yang

14

ditunjukkan dalam Tabel 1.1


- Port C (PC7 -

Port C adalah 8-bit bidirectional I / O port dengan internal


pull-up resistor (dipilih untuk setiap bit).

PC0)

Masing-masing Pin Port C juga berfungsi seperti yang


ditunjukkan dalam Tabel 1.2
- Port D (PD7 -

Port D adalah 8-bit bidirectional I / O port dengan internal


pull-up resistor (dipilih untuk setiap bit).

PD0)

Masing-masing Pin Port D juga berfungsi seperti yang


ditunjukkan dalam Tabel 1.3
- RESET

Input Reset. Reset akan terjadi saat logika 0 diberikan


selama lebih dari lebar pulsa minimum. Aktif Rendah

- XTAL1

Input Rangkaian Osilator Clock Internal

- XTAL2

Input Rangkaian Osilator Clock Internal

- AVCC

AVCC adalah tegangan suplai pin untuk Port A dan A / D


Konverter. Pin Ini harus secara eksternal terhubung ke
VCC, meskipun ADC tidak digunakan. Jika ADC
digunakan, harus dihubungkan ke VCC melalui filter lowpass.

- AREF

Pin Analog Referensi untuk A/D Konverter

Tabel 1.1. Fungsi Alternatif Pin-Pin Port B (ATMega,2010;58)


Pin
PB7
PB6
PB5
PB4
PB3
PB2
PB1
PB0

Fungsi Alternatif
SCK (SPI Bus Serial Clock)
MISO (SPI Bus Master Input/Slave Output)
MOSI (SPI Bus Master Output/Slave Input)
SS (SPI Slave Select Input)
AIN1 (Analog Comparator Negative Input)
OC0 (Timer/Counter0 Output Compare Match Output)
AIN0 (Analog Comparator Positive Input)
INT2 (Input Eksternal Interupsi 2)
T1 (Timer/Counter1 External Counter Input)
T0 (Timer/Counter0 External Counter Input)
XCK (USART External Clock Input/Output)

15

Tabel 1.2. Fungsi Alternatif Pin-Pin Port C (ATMega16, 2010:61)


Pin
PC7
PC6
PC5
PC4
PC3
PC2
PC1
PC0

Fungsi Alternatif
TOSC2 (Timer Oscillator Pin 2)
TOSC1 (Timer Oscillator Pin 1)
TDI (JTAG Test Data In)
TDO (JTAG Test Data Out)
TMS (JTAG Test Mode Select)
TCK (JTAG Test Clock)
SDA (Two-wire Serial Bus Data Input/Output Line)
SCL (Two-wire Serial Bus Clock Line)

Tabel 1.3. Fungsi Alternatif Pin-Pin Port D (ATMega16, 2010;63)


Pin

Fungsi Alternatif

PD7

OC2 (Timer/Counter2 Output Compare Match Output)

PD6

ICP1 (Timer/Counter1 Input Capture Pin)

PD5

OC1A (Timer/Counter1 Output Compare A Match


Output)

PD4

OC1B (Timer/Counter1 Output Compare B Match


Output)

PD3

INT1 (External Interrupt 1 Input)

PD2

INT0 (External Interrupt 0 Input)

PD1

TXD (USART Output Pin)

PD0

RXD (USART Input Pin)

ATMega 16 memiliki dua memori utama yaitu Memori Program dan


Memori Data dengan tambahan juga memiliki memori EEPROM untuk tempat
penyimpanan data.
ATMega 16 memiliki 16 Kbyte Flash memori untuk penyimpanan
program yang dibagi menjadi dua bagian yaitu bagian Boot program dan bagian
aplikasi program. Flash memori program memiliki daya tahan sedikitnya 10.000
proses tulis atau hapus. Dan untuk menjangkau Flash memori program ATMega
16 memiliki Register Program Counter (PC) selebar 13 bit. Yang menjangkau 8K
lokasi memori program. Sedangkan pada bagiah Boot program dilengkapi dengan

16

Boot lock bits yang digunakan untuk melindungi software yang telah ada di dalam
ATMega 16. Gambar 1.3 menunjukkan peta memori program dalam ATMega 16.

Gambar.1.3. Peta Memori Program ATMega 16(ATMega16,2010;16)


ATMega 16 Memiliki Memori Data yang terdiri dari 1120 lokasi alamat
dari Register File, I/O Memori dan data SRAM internal. 96 lokasi alamat pertama
digunakan oleh Regiter File dan I/O Memori dan 1024 lokasi alamat digunakan
untuk data SRAM Internal. Dan 96 lokasi alamat Register File dan I/O Memori
terdiri dari 32 register umum untuk kerja dan 64 Register yang digunakan untuk
I/O. Dan gambar 1.4. menunjukkan Peta Memori Data. Dan sebagai tambahan
terdapat 512data memori EEPROM di dalam ATMega 16 byte. Yang diorganisasi
secara terpisah, yang setiap byte dapat dibaca dan ditulis. EEPROM memiliki
ketahanan sedikitnya 100.000 siklus tulis atau menghapus.

Gambar 1.4. Peta Memori Data(ATMega16,2010;17)

17

1.3.

Bahasa C
Pada saat ini sudah dikembangkan bahwa untuk membuat pemrograman

mikrokontroler menggunakan bahasa level tinggi bukan menggunakan bahasa


assembly maupun bahasa mesin. Salah satu bahasa level tinggi yang banyak
digunakan adalah bahasa C. Ada beberapa software pemrograman mikrokontroler
yang menggunakan bahasa C sebagai bahasa pemrogramannya seperti Codevision
AVR dan WinAVR.

1.3.1. Struktur Bahasa C


Untuk dapat memahami bagaimana suatu program ditulis, maka struktur
dari program harus dimengerti terlebih dahulu, atau sebagai pedoman penulis
program (programmer) bagaimana seharusnya program tersebut ditulis.
Dalam penulisan program dengan menggunakan bahasa C maka harus
mengetahui struktur dari program dengan menggunakan bahasa C. Program dalam
bahasa C dapat dilihat sebagai sekumpulan dari sebuah atau lebih fungsi. Dan
fungsi pertama yang harus ada di pemrogram bahasa C adalah fungsi main().
Sedangkan untuk fungsi-fungsi yang lain dapat dituliskan setelah atau
sebelum fungsi main () dengan menuliskan deskripsi prototype fungsi pada bagian
awal program. Dan dapat juga fungsi-fungsi yang lain dituliskan di file lain,
apabila diinginkan untuk digunakan maka tinggal menuliskan header file dari
fungsi-fungsi tersebut dengan preprocessor directive #include. Seperti contoh bila
kita menggunakan mikrokontroler ATMega16, maka kita harus mengambil
fungsi-fungsi untuk ATMega16 dengan perintah sebagai berikut:
#include<mega16.h>
Sebagai Contoh penulisan program untuk menyalakan LED di PORTB

// deklarasi fungsi-fungsi ekternal


#include <mega16.h> // mengambil fungsi-fungsi untuk ATMega16
#include <delay.h> // mengambil fungsi-fungsi untuk proses tunda

// deklarasi variable global


unsigned char dataout; // deklarasi dataout dalam byte

18

// penulisan program utama


void main(void)
{
// Port B initialization Port B sebagai output
PORTB=0x00;
DDRB=0xFF;
dataout=00;
// Penulisan program ada di dalam while (1)
while(1)
{
PORTB=dataout;

// PB = dataout

delay_ms(100);

// tunda selama 100 ms

dataout=dataout+1;

// dataout ditambah 1;

}
}

1.3.2. Indentifiers
Dalam pemrogramaman bahasa C sangat perlu sekali untuk diketahui
dalam pemberiah nama atau Identifier yang diberikan pada variabel, fungsi, label
atau objek lain. Dalam pemberian nama dapat mengandung huruf yaitu besar A
sampai Z dan huruf kecil a sampai z dan angka 0 sampai 9 dan karakter ( _ ).
Nama yang digunakan bersifat Case sensitive yaitu membedakan antara huruf
besar dan huruf kecil. Dan untuk nama dapat mencapai maksimal 32 karakter.
1.3.3. Konstanta
Dalam pemrogramam bahasa C ada beberapa cara dalam penulisan
konstanta yaitu sebagai berikut: Penulisan untuk Integer dan long integer ditulis
dalam bentuk decimal (123), bila ditulis dalam bentuk biner maka harus didahului
0b seperti 0b10101001, dan jika ditulis dalam bentuk hexadecimal maka harus
didahului 0x seperti 0xA9, sedangkan untuk konstanta karakter harus dilingkungi
oleh tanda kutip seperti a.

19

1.3.4. Tipe Data


Untuk tipe tipe data yang dimiliki oleh pemrograman bahasa C
ditunjukkan dalam Tabel 1.4 berikut ini.

Tabel 1.4. Tipe Data dalam Bahasa C (Andrianto,2008;21)


Tipe

Ukuran (Bit)

Range
0,1 (Tipe data bit hanya dapat

Bit

digunakan untuk variable

global.)
Char

-128 to 127

Unsigned char

0 to 255

Signed char

-128 to 127

Int

16

-32768 to 32767

Short int

16

-32768 to 32767

Unsigned int

16

0 to 65535

Signed int

16

-32768 to 32767

Long int

32

-2147483648 to 214783647

Unsigned long int

32

0 to 4294967295

Signed long int

32

-2147483648 to 214783647

Float

32

1.175e-38 to 3.402e38

Double

32

1.175e-38 to 3.402e38

1.3.5. Operator
Dalam pemrograman operator merupakan intruksi khusus yang digunakan
untuk variable. Adab beberapa yang sering digunakan yaitu operator kondisi atau
pembanding seperti yang ditunjukan dalam Tabel 1.5, operator atirmatika
ditunjukkan dalam Tabel 1.6, operator logika ditunjukkan dalam Tabel 1.7,
operator bitwise ditunjukkan dalam Tabel 1.8, operator Assignment ditunjukkan
dalam Tabel 1.9.

20

Tabel 1.5. Daftar Operator Kondisi (Andrianto,2008;22)


Operator Kondisi

Keterangan

<

Lebih kecil

<=

Lebih kecil atau sama dengan

>

Lebih besar

>=

Lebih besar atau sama dengan

==

Sama dengan

!=

Tidak sama dengan


Tabel 1.6. Daftar Operator Aritmatika(Andrianto,2008;22)
Operator Aritmatika

Keterangan

Penjumlahan

Pengurangan

Perkalian

Pembagian

Sisa Bagi (modulus)

Tabel 1.7. Daftar Operator Logika(Andrianto,2008;22)


Operator Logika

Keterangan
Boolean NOT
Boolean AND
Boolean OR

!
&&
||

Tabel 1.8. Daftar Operator Bitwise(Andrianto,2008;22)


Operator Bitwise

Keterangan
Komplemen Bitwise

&

Bitwise NOT

Bitwise OR

Bitwise Exclusive OR

>>

Right Shift

<<

Left Shift

21

Tabel 1.9. Daftar Operator Assignment(Andrianto,2008;23)


Opereator Assignment

Keterangan

Untuk memasukkan 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 memasukkan nilai sisa bagi dari pembagian


bilangan semula

<< =

Untuk memasukkan shift left

>> =

Untuk memasukkan shift right

&=

Untuk memasukkan bitwise AND

^=

Untuk memasukkan bitwise XOR

\=

Untuk memasukkan bitwise OR

1.3.6. Kontrol Aliran Program


Dalam pemrograman ada beberapa perintah yang dapat digunakan untuk
mengendalikan aliran program antara lain:
a. Perintah percabangan if (){} digunakan untuk mengecek satu kondisi
untuk satu blok jawaban dengan flowcart ditunjukkan dalam Gambar 1.5.

Y
A > 30
P B = 0xFF

Gambar 1.5. Flowcart Perintah if


Dan dengan cara penulisannya sebagai berikut:

22

if(_uji_benar_atau_salah_)
{_eksekusi_blok_ini_jika_benar_; } ;
seperti contoh:
if (A>30) // jika A lebih besar 30 maka PB = 0xff;
{ PORTB = 0xff;}

b. Perintah percabangan if(){} else {} digunakan untuk mengecek satu


kondisi untuk dua blok jawaban dengan flowcart ditunjukkan dalam Gambar
1.6.

A >30
T
P B = 0 x0 0

PB=0xFF

Gambar 1.6. Flowcart Perintah if else


Dan cara penulisannya sebagai berikut:
if(_uji_benar_atau_salah_)
{_eksekusi_blok_ini_jika_benar_; }
else {_eksekusi_blok_ini_jika_salah_; } ;
seperti contoh:
if (A > 30)

// Jika A lebih besar 30

{PORTB=0xff} // maka PB = 0xff;


else {PORTB=0x00;} // jika tidak PB=0x00
c. Perintah while ( ) { } digunakan untuk perulangan jika kondisi yang
diuji bernilai benar dengan flowcart ditunjukkan dalam Gambar 1.7

23

Y
P B =0xF F
A=P A

A >30
T

Gambar 1.7. Flowcart Perintah while


d. dan cara penulisannya sebagai berikut:
while (_eksekusi_blok_ini_jika_benar_atau_salah)
{_selama_benar_blok_ini_akan_selalu_dieksekusi_;};
Seperti contoh:
while (A > 30)

// Ulangi selama A lebih besar dari 30,

{ PORTB = 0xff; // PB =0xff;


A = PINA; } // A=PA;
e. Perintah do {} while () digunakan untuk perulangan jika kondisi yang
diuji bernilai benar. Pada perintah ini blok {} dikerjakan dahulu baru
kemudian diuji, jika benar maka blok {} diulangi lagi. Dengan flowcart
ditunjukkan dalam Gambar 1.8.

P B = 0 x ff
A = P A

Y
A > 3 0
T

Gambar 1.8. Flowcart Perintah do while

24

Dan cara penulisannya sebagai berikut:


do
{_selama_benar_blok_ini_akan_selalu_dieksekusi_;}
while (_uji_benar_atau_salah_);
Seperti contoh:
do
{ PORTB = 0xff;
A = PINA;}

// PB = 0xff
// A= PORTA

while (A > 30); // selama A > 30 kerjakan blok diatasnya


f. Perintah for (. ; . ; .) {} digunakan untuk perulangan dengan kondisi
dan syarat yang telah ditentukan. Biasanya digunakan perulangan dengan
jumlah tertentu dengan flowcart ditunjukkan dalam Gambar 1.9.

I= 1

Y
P B = d a ta o u t
D a ta o u t+ +
i+ +

I< 1 0

Gambar 1.9. Flowcart Perintah for


Dan cara penulisannya sebagai berikut :
for (_kondisi _awal ; _uji_kondisi_ ; _aksi_jika_benar)
{_eksekusi_blok_ini_jika_benar_ ;} ;
Seperti contoh:
for (i=1;i<10;i++) // mengulangi blok dibawah ini sebanyak 9 kali
{ PORTB=dataout;
dataout=dataout+1;}

// PB = dataout
// dataout=dataout+1

25

BAB II
CODEVISION AVR DAN PROTEUS
Capaian Pembelajaran:
Setelah membaca dan mengkaji bab ini, pembaca akan mampu:
Menjalankan

dan

menggunakan

Program

CodeVisionAVR

untuk

pemrograman mikrokontroler ATMega16.


Menjalankan dan menggunakan Program Proteus untuk simulasi pemograman
ATMega16.

2.3.

Codevision AVR
Salah

satu

cross-compiler

yang

banyak

digunakan

adalah

CodeVisionAVR yang memiliki Integrated Development Environtment (IDE)


dan Automatic Program Generator yang didesain untuk mikrokontroler buatan
Atmel seri AVR. CodeVisionAVR mampu menerjemahkan hampir semua
perintah dari bahasa ANSI C yang sesuai dengan arsitektur dari AVR dengan
tambahan beberapa fitur untuk mengambil kelebihan khusus dari arsitektur AVR
dan kebutuhan pada sistem embedded dan CodeVisionAVR merupakan hak cipta
dari Pavel Haiduc, HP InfoTech s.r.l.
CodeVisionAVR setelah kompilasi menghasilkan File object COFF yang
dapat digunakan untuk keperluan debugging pada tingkatan C, dengan
pengamatan variabel, menggunakan debugger Atmel AVR Studio. Sedangkan
untuk IDE dalam CodeVisionAVR mempunyai fasilitas internal berupa software
AVR Chip In-System Programmer yang memungkinkan untuk melakukan transfer
program

kedalam

chip

mikrokontroler

setelah

sukses

melakukan

kompilasi/asembli secara otomatis. Software In-System Programmer dapat


bekerja

dengan

Atmel

STK500/AVRISP/AVRProg,

Kanda

Systems

STK200+/300, Dontronics DT006, Vogel Elektronik VTEC-ISP, Futurlec


JRAVR dan MicroTronics ATCPU/Mega2000 programmers/development boards.
CoceVisionAVR juga dilengkapi dengan fasilitas sebuah teminal yang
menggunakan komunikasi serial untuk keperluan debugging sistem embedded.
CodeVisionAVR selain memiliki library standar C, juga mempunyai
library tertentu seperti untuk:
26

Modul LCD alphanumeric

Bus I2C dari Philips

Sensor Suhu LM75 dari National Semiconductor

Real-Time Clock: PCF8563, PCF8583 dari Philips, DS1302 dan DS1307


dari

Maxim/Dallas Semiconductor

Protokol 1-Wire dari Maxim/Dallas Semiconductor

Sensor Suhu DS1820, DS18S20, dan DS18B20 dari Maxim/Dallas


Semiconductor

Termometer/Termostat DS1621 dari Maxim/Dallas Semiconductor

EEPROM DS2430 dan DS2433 dari Maxim/Dallas Semiconductor

SPI

Power Management

Delay

Konversi ke Kode Gray


Kelebihan dari CodeVisionAVR adalah memiliki Automatic Program

Generator bernama CodeWizardAVR, yang akan membantu mempercepat dalam


menulis program dengan pemberian menu-menu sebagai berikut:

Set-up akses memori eksternal

Identifikasi sumber reset untuk chip

Inisialisasi port input/output

Inisialisasi interupsi eksternal

Inisialisasi Timer/Counter

Inisialisasi Watchdog-Timer

Inisialisasi UART (USART) dan komunikasi serial berbasis buffer yang


digerakkan oleh interupsi

Inisialisasi Pembanding Analog

Inisialisasi ADC

Inisialisasi Antarmuka SPI

Inisialisasi Antarmuka Two-Wire

Inisialisasi Antarmuka CAN

27

Inisialisasi Bus I2C, Sensor Suhu LM75, Thermometer/Thermostat


DS1621 dan

Real-Time Clock PCF8563, PCF8583, DS1302, dan DS1307

Inisialisasi Bus 1-Wire dan Sensor Suhu DS1820, DS18S20

Inisialisasi modul LCD


Untuk

mendapatkan

file

program

dapat

diunduh

di

situs

hpinfotech.ro/html/cvavr.htm dan akan mendapatkan file evaluasi program yang


yang gratis.

2.3.1. Tata Cara Menggunakan CodeWizard


Untuk pembuatan program dengan menggunakan CodeWizard dalam
CodeVisionAVR yang harus dilakukan sebagai berikut:
-

Jalankan program CodeVisionAVR sehingga muncul seperti Gambar 2.1

Gambar 2.1. Tampilan Awal Program CodeVisionAVR


-

Setelah itu pilih File >> New seperti Gambar 2.2

28

Gambar 2.2. Langkah Awal Pembuatan Program


-

Kemudian muncul tampilan seperti Gambar 2.3 dan pilih Project daan
tekan OK

Gambar 2.3. Tampilan Setelah Pilihan File >> New


-

Dan akan muncul tampilan seperti Gambar 2.4 dan pilih Yes untuk
melanjutkan

Gambar 2.4. Tampilan Setelah Tombol Ok dipilih

29

Setelah itu muncul tampilan seperti Gambar 2.5 dan pilih OK untuk
melanjutkan karena yang akan digunakan adalah ATMega16

Gambar 2.5. Tampilan Berikutnya Setelah Pilihan Yes


-

Setelah itu muncul tampilan seperti Gambar 2.6 yang merupakan menu
CodeWizard dan ubah pada bagian chip dengan ATMega16. Dan clock =
8 MHz.

Gambar 2.6. Menu Pertama CodeWizard untuk Pemilihan Mikrokontroler


-

Setelah itu pilih atau klik Port untuk memberikan inisialisasi pada Port
yang diinginkan, buat Port A input, Port B input, Port C output dan Port D
output dengan menge-klik data direction B0 sampai B7 (in = input dan out
= output) seperti Gambar 2.7

30

Gambar 2.7. Menu Port pada CodeWizard


-

Untuk membuat programnya pilih menu Program >> Generate Save and
Exit seperti Gambar 2.8

Gambar 2.8. Proses Pembuatan Program


-

Setelah itu muncul tampilan seperti Gambar 2.9 dan masukan nama file
dari program yang akan dibuat, tulis percobaan1 dan tekan Save

31

Gambar 2.9. Proses Pemberian Nama file .c


-

Setelah itu akan muncul tampilan seperti Gambar 2.10 dan isi File name
dengan percobaan1 dan tekan Save

Gambar 2.10. Proses pemberian nama file Project


-

Setelah itu akan muncul tampilan seperti Gambar 2.11 dan isi File name
dengan percobaan1 dan tekan Save

Gambar 2.11. Tampilan untuk Penyimpanan file .cwp


32

Maka setelah itu akan muncul tampilan seperti Gambar 2.12, dengan
tampilan seperti ini maka program CodeVisionAVR siap untuk digunakan
membuat program untuk mikrokontroler ATMega16

Editornya
CodeVisionAVR

Gambar 2.12. Tampilan Awal CodeVisionAVR Setelah Menggunakan


CodeWizard
-

Setelah itu program dapat dituliskan dalam editor CodeVisioanAVR

2.3.2. Penulisan Program Bahasa C di CodeVision AVR


Struktur dalam penulisan bahasa C secara umum dapat disusun dalam
empat blok yaitu:

Header file

Deklarasi konstanta global

Deklarasi procedure dan atau fungsi.

Fungsi Utama.

a.

Header
Header file yaitu file yang berisi deklarasi fungsi dan definisi konstanta.

Beberapa file header sudah disediakan oleh CodeVisionAVR. File-file ini

33

mempunyai ciri bereksistensi .h. file-file header ini biasanya dipanggil


menggunakan fungsi include seperti berikut:
#include <mega16.h> // memanggil deklarasi fungsi dan difinisi konstanta untuk
mikrokontroler ATMega16. Header file ini akan selalu
ada karena mikrokontroler yang digunakan adalah
mikrokontroler ATMega16
#include <delay.h> // memanggil deklarasi fungsi dan difinisi konstanta untuk
waktu tunda. Header file ini digunakan bila dibutuhkan
waktu tunda untuk suatu keluaran.
b.

Deklarasi konstansta global


Di bawah header file merupakan letak menuliskan variable global dan oleh

CodeVisionAVR sudah diberi peringat sebagai berikut:


// Declare your global variables here
unsigned char datain;
dan juga digunakan untuk inisialisasi dari Port A, Port B, Port C dan Port D, serta
inisialisasi yang lain. Dan ini contoh inisialisasi untuk Port A input, Port B input,
Port C output dan Port D output.
// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) |
(0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) |
(0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) |
(0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T

34

PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) |


(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out
Bit0=Out
DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) |
(1<<DDC2) | (1<<DDC1) | (1<<DDC0);
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) |
(0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out
Bit0=Out
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) |
(1<<DDD2) | (1<<DDD1) | (1<<DDD0);
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) |
(0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
Seperti yang ditunjukkan dalam Gambar 2.13.

Gambar 2.13. Tampilan Header file dan Deklarasi variabel Global

35

c.

Deklarasi procedure dan fungsi

Sedangkan untuk deklarasi procedure dan fungsi biasa akan dibuatkan oleh
CodevisionAVR untuk berberapa fungsi dan dapat juga dibuat oleh programmer
d.

Fungsi utama

Untuk fungsi utama dalam CodeVision ditempatkan pada bagian bawah program
dalam instruksi while (1) dan diberi tanda dengan tulisan // Place your code here
seperti berikut. Gambar 2.14 menunjukkan tampilan penulisan program utama
while (1)
{
// Place your code here
datain = PINA;
PORTC = datain;

Gambar 2.14. Tampilan Penulisan Program Utama


Setelah program utama dituliskan maka langkah berikutnya adalah
kompilasi program dengan menekan F9 atau klik menu Project >> Compile
seperti Gambar 2.15 dan hasilnya akan ditunjukkan seperti Gambar 2.16 yang
memberikan informasi hasil proses kompilasi.

36

Gambar 2.15. Cara melakukan Kompilasi Program

Gambar 2.16. Informasi Hasil Kompilasi


Setelah proses kompilasi berhasil dan tanpa adanya kesalahan maka
dilakukan proses build program untuk menghasilkan file hex atau coff. Proses
ini dapat dilakukan dengan menekan tombol Shift-F9 bersama-sama ataua
mengklik menu Project >> Build seperti Gambar 2.17 dan informasi hasil proses
build akan ditampilkan seperti Gambar 2.18.
37

Gambar 2.17. Cara Melakukan Build Program

Gambar 2.18. Tampilan Infromasi setelah Proses Build Program


Setelah itu maka program dapat ditranferkan ke dalam mikrokontroler
ATMega16. Dan ada baiknya untuk lebih menyakinkan apakah program bekerja

38

sesuai dengan rencana, maka dapat disimulasikan dengan menggunakan program


Proteus.

2.4.

Proteus
Proteus ISIS merupakan salah satu program yang dapat digunakan untuk

mensimulasikan program mikrokontroler dan rangkaian elektronika yang lainnya.


Dan beberapa toolbar yang sering digunakan dalam melakukan simulasi beserta
fungsinya ditunjukkan dalam Gambar 2.19.

1
2

3
Gambar 2.19. Beberapa ToolBar Program Proteus
Keterangan dan fungsi Gambar 2.19 adalah sebagai berikut:
1.

Selection Mode, yang digunakan untuk mengaktifkan kursor

2.

Component Mode, yang digunakan untuk memunculkan part atau


komponen yang akan digunakan. Untuk memilih atau memunculkan
komponen tekan tombol P dan akan muncul tampilan seperti Gambar 2.20.

39

Gambar 2.20. Tampilan setelah tombol P di-klik


3.

Terminals Mode, yang digunakan untuk memunculkan terminal, seperti


Power, Ground, Input, Output dan Bidir (Bidirectional), seperti Gambar
2.21.

Gambar 2.21. Menu Terminals Mode


2.4.1. Langkah-Langkah Menggunakan Proteus
Langkah-langkah menggunakan Proteus ISIS untuk simulasi mikrokontroler
ATMega16 adalah sebagai berikut:
1.

Buka Program Proteus ISIS

2.

Pilih Component Mode dan klik P sehingga muncul tampilan seperti


Gambar 2.20.

3.

Masukkan keywords: Atmega16 sehingga akan muncul tampilan seperti


Gambar 2.21 dan klik OK.

40

Gambar 2.21. Tampilan saat memasukkan Keyword ATMega16


4.

Taruh ATMega16 di dalam sheet seperti ditunjukkan dalam Gambar 2.22.

Gambar 2.22. Meletakkan ATMega di dalam Sheet


5.

Ambil komponen LED seperti langkah 3 dan hasilnya seperti ditunjukkan


dalam Gambar 2.23.

41

Gambar 2.23. Tampilan saat Pengambilan Komponen LED-YELLOW


6.

Ambil komponen Resistor seperti langkah 3 dan hasilnya seperti


ditunjukkan dalam Gambar 2.24.

Gambar 2.24. Tampilan Saat pengambilan Resistor


7.

Dan susun seperti rangkaian dalam Gambar 2.25.

42

Gambar 2.25. Rangkaian Mikrokontroler ATMega16, Resistor dan LED


8.

Tambahkan komponen Dip switch 8 seperti ditunjukkan dalam Gambar


2.26.

Gambar 2.26. Tampilan saat mengambil DIPSW-8


9.

Tambahkan komponen Resistor Pack (rpak) seperti ditunjukkan dalam


Gambar 2.27.

43

Gambar 2.27. Tampilan Komponen Mode untuk Resistor Pack


10.

Hubungkan dengan komponen lainnya sehingga seperti yang ditunjukkan


dalam Gambar 2.28.

Gambar 2.28. Rangkaian Percobaan Input Output


11.

Setelah itu arahkan kursor ke mikrokontroler ATMega16, kemudian klik


mousenya sehingga muncul tampilan seperti yang ditunjukkan Gambar
2.29.
44

Gambar 2.29. Tampilan Setelah ATMega 16 di-klik


12.

Setelah itu klik icon file open seperti yang ditunjukkan tanda panah dalam
Gambar 2.29 sehingga muncul tampilan seperti Gambar 2.30 dan ambil
file percobaan1.hex untuk diunduhkan ke ATMega16.

Gambar 2.30. Tampilan Saat Mengambil File hex untuk di unduhkan ke


ATMega16

45

13.

Dan ubah juga untuk CKSEL Fuse menjadi IntRC 8 MHz seperti yang
ditunjukkan Gambar 2.31, kemudian tekan tombol OK

Gambar 2.31. Setting Clock ATMega 16


14.

Setelah itu tekan tombol Play yang terletak pada sebelah kiri bawah dari
sheet seperti yang ditunjukkan dalam Gambar 2.32.

Tombol
Play

Gambar 2.32. Tampilan Saat Tombol Play ditekan

46

Tugas.
1. Lakukan langkah-langkah pembuatan program dengan CodeWizard dan
langkah-langkah penggunaan Proteus, dan amati hasilnya.

47

BAB III
INPUT OUTPUT
Capaian Pembelajaran:
Setelah membaca dan mengkaji bab ini, pembaca akan mampu:

Menyusun algoritma, flowcart dan program dengan memanfaatkan unit


input-output ATMega16.

Membuat rangkaian Mikrokontroler ATMega16 untuk aplikasi LED dan 7


Segment

3.1. Teori Dasar Input-Output


Semua port AVR memiliki fungsi Baca-Tulis yang dapat dimodifikasi
ketika digunakan sebagai I/O port digital. Yang berarti setiap saat salah satu arah
pin port dapat diubah fungsi. Setiap output buffer memiliki karakteristik arus
simetris yang bagus dengan arus sink yang tinggi dan kemampuan sumber arus.
Sehingga dari pin cukup kuat untuk menjalankan LED display secara langsung.
Semua pin port memiliki individual pull-up resistor. Dan semua pin I/O memiliki
dioda pelindung untuk VCC dan Ground.
Sebagai referensi semua register dan bit ditulis dalam bentuk umum yaitu
sebuah huruf kecil "x" untuk pengganti nama port, dan sebuah huruf kecil "n"
mewakili nomor bit seperti PORTxn.
Ada tiga alamat memori I/O yang dialokasikan untuk setiap port I/O yaitu
Data Register (PORTx), Data Direction Register (DDRx) dan Port Input Pin
(PINx). Data Register (PORTx) digunakan untuk menyimpan data yang akan
ditulis/dikeluarkan ke port I/O pada saat port dikonfigurasi sebagai output
sedangkan Port Input Pin (PINx) digunakan untuk menyimpan data yang terbaca
dari port I/O pada saat port dikonfigurasi sebagai input sedangkan Data Direction
Register (DDRx) digunakan untuk menginisialisasi port sebagai input atau output.
Oleh karena itu, setiap pin port memiliki 3 bit register yaitu: DDxn, PORTxn dan
PINxn. Bit-bit DDxn beralamat di DDRx, bit-bit PORTxn beralamat di PORTx
I/O dan bit-bit PINxn juga beralamat di PORTx I/O.
Bit DDxn yang ada di dalam register DDRx menentukan arah dari pin ini.
Bila DDxn ditulis logika satu 1, maka Pxn dikonfigurasi sebagai input dan bila

48

DDxn ditulis logic nol 0 maka Pxn dikonfigurasi sebagai output. Jika PORTxn
ditulis logika satu saat pin dikonfigurasi sebagai pin input, maka pull-up resistor
aktif dan untuk menonatifkan resistor pull-up, PORTxn harus ditulis logika nol
atau pin harus dikonfigurasi sebagai pin output. Pin port adalah tri stated ketika
kondisi reset dan bahkan jika tidak ada clock yang bekerja.
Gambar 3.1 menunjukkan register-register PORTA dan untuk registerregister PORT yang lain sama saja hanya dengan mengganti huruf A menjadi
huruf B, C dan D karena memiliki model konfigurasi yang sama dengan PORTA
tetapi memiliki alamat yang berbeda.

Gambar 3.1. Register-Register PORTA(ATMega16,2010;66)


Dalam bahasa C yang digunakan untuk pemrogramam ATMega16 nama
PORTx, DDRx dan PINx sudah dikenal dan dikemas dalam file mega16.h untuk
mikrokontroler ATMega 16 sehingga tinggal dipanggil saja file tersebut dengan
perintah #include <mega16.h>.
Sedangkan perintah-perintah yang berhubungan dengan Port adalah sebagai
berikut:
-

PORTx, merupakan perintah yang digunakan untuk mengeluarkan data ke


Port x, x untuk A, B, C dan D
contoh:
PORTC = 0xff; // perintah untuk mengeluarkan data 0xff ke Port C

PINx, merupakan perintah yang digunakan untuk membaca data dari Port
x, untuk x A, B, C dan D.

49

Contoh:
Datain = PINA; // perintah untuk membaca data dari Port A dan hasilnya
disimpan di variable Datain.
-

DDRx, merupakan perintah untuk menginisialisasi atau mengisi register


DDRx dengan data sesuai untuk inisialisasi input atau output. Bila diisi 1
untuk inisialisasi Output, bila diisi 0 untuk inisialisasi input
Contoh:
DDRA = 00000000 (2) = 0x00(hex)
PortA0 PortA7 berfungsi sebagai Input
DDRB = 11111111(2) = 0xFF(hex)
PortB0 PortB7 berfungsi sebagai Output
DDRC = 00001111(2) = 0x0F(hex)
PortC0 PortC7 berfungsi sebagai Output dan PortC5 PortC7
berfungsi sebagai Input.
Jika port digunakan sebagai input, maka resistor pullup diaktifkan dengan
memberikan logika 1 pada PORTx. Kemudian baru baca dapat data dari
register PINx dan jika port digunakan sebagai output, langsung dapat
digunakan sebagai saluran untuk keluar ke PORTx.

Mikrokontroler ATMega16 memiliki juga instruksi bit yaitu PORTx.n


untuk dan PINx.n

3.2. Tampilan Seven Segmen


Tampilan seven segmen merupakan sebuah tampilan yang terdiri dari
tujuh segmen LED yang disusun untuk menampilkan angka 0 sampai 9 Seperti
yang ditunjukkan dalam Gambar 3.2. Dan untuk setiap segmen diberi kode
dengan huruf a, b, c, d, e, f, g dan d.p. Ada dua jenis seven segmen yaitu common
anoda (CA) dan common katoda (CC). Untuk common anoda (CA), karena yang
dijadikan satu adalah anoda maka CA dihubungkan dengan Vcc, sehingga untuk
menyalakan segmen maka pin dari segemen tersebut diberi logika 0 atau 0 Volt,
sedang untuk common katode (CC), karena yang dijadikan satu adalah Ground
maka untuk menyalakan segmen pin dari segmen tersebut diberi logika 1 atau 5
Volt.

50

Salah satu contoh data yang digunakan untuk menampilkan 0 sampai 9


melalui Port C ditunjukkan dalam Tabel 3.1 dengan menggunakan 7 segmen
common anoda.

Gambar 3.2. Tampilan Seven Segmen(Seven Segment Display,2002;4)


Tabel 3.1. Nilai Port C untuk menampilkan angka 0 sampai 9

Tampilan

PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0


dot
g
f
e
d
c
b
a
1
1
0
0
0
0
0
0

Nilai Hex
PC
0xC0

0xF9

0xA4

0xB0

0x99

0x92

0x82

0xF8

0x80

0x90

51

3.3. Cara Menggunakan Progisp AVR Programmer


Salah satu program yang digunakan mengisi program di dalam
mikrokontroler ATMega 16 adalah ProgIsp ver 17.2. Dan langkah-langkah untuk
memprogram chip ATMega16 adalah sebagai berikut:
1. Jalankan ProgIsp ver 1.72 dan hasilnya seperti ditunjukkan dalam Gambar 3.3

Gambar 3.3 Tampilan ProgIsp


2. Setelah itu ubah mikrokontroler yang digunakan menjadi mikrokontroler AT
Mega16 pada bagian menu Select Chip pada sebelah kiri atas seperti yang
ditunjukan dalam Gambar 3.4.

Gambar 3.4. Hasil Perubahan mikrokontroler yang digunakan

52

3. Setelah itu tancapkan hardware pasangan dari PorgIsp ver 1.72 sehingga
tulisan Prog ISP di bagiah menu State akan menyala. Seperti yang
ditunjukkan dalam Gambar 3.5.

Gambar 3.5. Tampilan Saat hardware sudah terpasang


4. Ambil Program file Hex dengan meng-klik Load Flash pada Menu File pada
bagian sebelah kanan atas dan ambil file hexnya seperti yang ditunjukkan
dalam Gambar 3.6.

Gambar 3.6. Tampilan Menu Open Load Flash


5. Setelah itu klik tombol Auto untuk mengisi program ke dalam mikrokontroler
ATMega16.

53

3.4. Percobaan I Input Output


Langkah-Langkah percobaan Input-Output sebagai berikut:
1. Buat Rangkaian seperti Gambar 3.7 di Proteus

Gambar 3.7. Rangkain ATMega16 untuk Percobaan Input-Output


2. Buat dalam Bentuk Rangkaian sesungguhnya dalam Protoboard seperti
Gambar 3.8.

Gambar 3.8. Rangkaian Mikrokontoler ATMega16 dengan LED dan 7 Segmen


3. Buat Program dari flowcart yang ditunjukkan dalam Gambar 3.9.

54

Gambar 3.9. Flowcart untuk menampilkan Nim 1 dan Nim2 pada 7 Segmen
4. Simulasikan program dengan menggunakan Proteus
5. Kirim program ke mikrokontroler ATMega16 dengan menggunakan ProgISP
Ver 1.72
6. Amati Hasil dan buat laporan tertulis.

3.5. Percobaan II Input Output


1. Dengan rangkaian yang sama buat flowcart, program dan aplikasikan dalam
simulasi Proteus dan rangkaian mikrokontroler

ATMega16

menambahkan fungsi saklar sebagai berikut:


a. Bila Saklar PA0 ditekan maka akan tampil NIM 1
b. Bila Saklar PA1 ditekan maka akan tampil NIM 2
c. Bila Saklar PA2 ditekan maka akan tampil LED Geser kiri
d. Bila Saklar PA3 ditekan maka akan tambil LED Geser Kanan
2. Amati hasilnya dan buat laporan tertulis.

55

dengan

BAB IV
ANALOG TO DIGITAL CONVERTER (ADC)
Capaian Pembelajaran:
Setelah membaca dan mengkaji bab ini, pembaca akan mampu:
Menyusun algoritma, flowcart dan program dengan memanfaatkan unit Analog
to Digital Convert dan unit input-output ATMega16.
Mengaplikasikan Unit ADC ATMega16 untuk tampilan 7 Segmen dan
masukan LDR(Light Dependent Resistors) dan sensor suhu LM35

4.1. ADC Dalam ATMega 16


ATMega memiliki ADC jenis successive approximation dengan data
output sebanyak 10 bit. Ada 8 kanal input ADC yang dimultiplekser dengan pin
Port A dengan acuan 0 Volt atau Ground. ADC juga dilengkapi dengan rangkaian
sample and hold yang menjamin tegangan masukan ADC berada dalam keadaan
konstan saat proses konversi dan Gambar 4.1 menunjukkan blok diagram dari
Skema ADC di mikrokontroler ATMega 16.

Gambar 4.1. Blok Diagram ADC ATMega 16 (ATMega16,2010;205)

56

Dalam operasinya ADC mengubah tegangan masukan analog ke dalam 10


bit nilai digital dengan successive approximation. Gnd sebagai nilai minimal dan
nilai maksimal mewakili tegangan di pin AREF 1 LSB, Biasanya AVCC atau
tegangan reverensi internal 2.56 Volt atau mungkin terhubung ke pin AREF
dengan mengatur bit REFSn di register ADMUX.
ADC diaktifkan dengan mengatur bit ADC Enable, ADEN di register
ADCSRA. Tegangan referensi dan saluran masukan ADC yang dipilih tidak akan
berlaku sampai ADEN di set 1.
ADC menghasilkan nilai 10-bit yang disajikan dalam dua register data
ADC yaitu ADCH dan ADCL. Secara default, hasilnya disajikan right adjusted (2
bit di ADCH dan 8 bit di ADCL), tetapi secara opsional dapat disajikan left
adjusted (8 bit di ADCH dan 2 bit di ADCL) dengan mengatur bit ADLAR di
ADMUX. Jika yang dipilih left adjusted maka ADC digunakan dalam 8 bit saja
dengan cukup mengambil data di ADCH. Untuk right adjusted, ADCL dibaca
dahulu setelah itu ADCH agar data yang didapatkan tidak hilang atau rusak.
Sebuah konversi tunggal dimulai dengan menulis logika satu ke bit Start
Convertion ADC atau ADSC di register ADCSRA. Bit ini akan tetap tinggi
selama konversi sedang berlangsung dan akan dihapus oleh hardware bila
konversi selesai. Dan Jika selesai maka bit ADIF akan bernilai satu yang
memberikan tanda bahwa konversi sudah selesai sehingga data hasil konversi
dapat dibaca di ADCH dan ADCL.
Konversi dapat juga dipicu secara otomatis oleh berbagai sumber. Auto
Trigger diaktifkan dengan memberikan logika satu pada bit ADC Auto Trigger
atau ADATE di register ADCSRA. Sumber pemicu dapat dipilih dengan
mengatur bit ADC Trigger Select atau ADTs di register SFIOR.
Modul ADC berisi prescaler, yang menghasilkan frekuensi clock ADC
diterima dari frekuensi CPU. Prescaling diatur oleh bit ADPS di register
ADCSRA. Prescaler mulai bekerja mulai ADC diaktifkan dengan memberi logika
satu di bit ADEN di ADCSRA. Dan akan berhenti jika ADEN diberi logika nol
atau rendah.

57

Ada beberapa register yang digunakan untuk ADC yaitu:


1. Register ADMUX atau

register ADC Multiplexer, dinamakan demikian

karena di dalam register tersebut ada bit-bit yang digunakan untuk memilih
saluran dari input ADC, untuk bit-bit dari ADMUX ditunjukkan dalam
Gambar 4.2.

Gambar 4.2. Bit-bit dalam Register ADMUX(ATMega16,2010;217)


Keterangan dari fungsi bit-bit ADMUX Gambar 3.2 adalah sebagai berikut:
-

REF0 dan REF1 (Reference) adalah bit-bit yang digunakan untuk memilih
tegangan referensi dari ADC dan table 4.1 menunjukkan beberapa
tegangan referensi yang dapat digunakan.
Tabel 4.1. Pilihan Tegangan Referensi ADC (ATMega16,2010;217)

REFS1

REFS0

Pilihan tegangan referensi

AREF (pin 32)

AVCC (pin 30)

Tidak digunakan

Vref internal 2,56V

ADLAR (ADC Left Adjust Result) adalah bit yang digunakan untuk
menentukan format data hasil konversi ADC. Bila ADLAR = 0 maka hasil
konversi 10 bit disimpan dalam format: 2 bit disimpan di ADCH dan 8 bit
di ADCL seperti ditunjukkan dalam Gambar 4.3, sedangkan bila ADLAR
= 1 maka hasil konversi 10 bit disimpan dalam format: 8 bit disimpan di
ADCH dan 2 bit di ADCL seperti ditunjukkan dalam Gambar 4.4.

Gambar 4.3. Format Hasil Konversi Bila DLAR sama dengan 0


(ATMega16,2010;220)

58

Gambar 4.4. Format Hasil Konversi Bila DLAR sama dengan


1(ATMega16,2010;220)
-

MUX4, MUX3, MUX2, MUX1 dan MUX0, adalah bit-bit yang digunakan
untuk memilih input analog yang akan dikonversi oleh ADC. Kombinasi
MUX4 sampai MUX0 untuk jenis input ADC dengan acuan Ground
(single Ended Input) ditunjukan dalam table 4.2.
Tabel 4.2. Kanal Input ADC untuk jenis Single Ended Input
MUX4 MUX3 MUX2 MUX1 MUX0

Nilai

Pilihan Input
ADC

ADC0

ADC1

ADC2

ADC3

ADC4

ADC5

ADC6

ADC7

2. Register ADCSRA atau ADC Control Status Register A, dinamakan demikian


karena

register ini tempat untuk mengendalikan (Control) dan dan

mengetahui keadaan (Status) dari ADC, dan untuk bit-bitnya ditunjukkan


dalam Gambar 4.5.

Gambar 4.5. Bit-bit dalam register ADCSRA(ATMega16,2010;219)

59

Keterangan dari fungsi bit-bit ADCSRA adalah sebagai berikut:


-

ADEN atau ADC Enable, merupakan bit untuk mengaktifkan ADC, bila
ADEN = 1 maka ADC aktif dan Port A tidak aktif, bila ADEN = 0 maka
ADC tidak aktif dan Port A aktif.

ADSC atau ADC Start Convertion, merupakan bit yang digunakan untuk
memberikan perintah mulai konversi, bila ADSC = 1, maka ADC mulai
bekerja untuk mengkonversi input analog dan akan berlogika 0 bila selesai
konversi.

ADATE atau ADC Auto Trigger Enable, merupakan bit yang digunakan
untuk mengendalikan aktivasi picu otomatis. Jika ADATE = 1 maka
konversi ADC akan dimulai pada saat tepi positif pada sinyal trigger yang
digunakan.

ADIF atau ADC Interrupt Flag, merupakan bit penanda akhir konversi
ADC. Jika ADIF = 1 maka konversi ADC pada suatu saluran telah selesai
dan siap diakses.

ADIE atau ADC Interrupt Enabe, merupakan bit pengatur aktivasi


interupsi. Jika ADIE = 1 maka interupsi telah diaktifkan untuk melayani
proses konversi ADC.

ADPS2, ADPS1 dan ADPS0 atau ADC Prescaler Select, merupakan bitbit yang digunakan untuk mengatur frukeunsi clock ADC dan Tabel 4.3
merupakan pemilihan frekuensi clok ADC dengan frekuansi osilator (fosc)
dari mikrokontroler ATMega 16 digunakan sebagai sumber clock dan nilai
ADPSn digunakan untuk memilih pembagi frekuansi.
Tabel 4.3. Frekuensi clock ADC(ATMega16,2010;220)
ADPS2
0
0
0
0
1
1
1
1

ADPS1
0
0
1
1
0
0
1
1

ADPS0
0
1
0
1
0
1
0
1

60

Clock ADC
fosc /2
fosc /2
fosc /4
fosc /8
fosc /16
fosc /32
fosc /64
fosc 128

4.2. LM35
LM35 merupakan IC sensor suhu yang presisi, dengan tegangan output
yang linear sebanding dengan suhu dalam Celcius. LM35 memiliki keuntungan
lebih linear dari sensor suhu yang dikalibrasi dalam o Kelvin sehingga LM35 tidak
memerlukan kalibrasi eksternal. LM35 memiliki impedansi keluaran rendah,
output yang linier, dan kalibrasi yang melekat membuat pembacaan antarmuka
dengan sirkuit kontrol sangat mudah. LM35 dapat digunakan dengan catu daya
tunggal, atau catu daya dengan plus dan minus. Salah satu rangkaian yang sering
digunakan dalam aplikasi ditunjukkan dalam Gambar 4.6. Sedangkan untuk salah
satu bentuk fisik tipe To-92 ditunjukkan dalam Gambar 4.7.

Gambar 4.6. Rangkaian Sensor Suhu dalam Celcius (LM35,1994;1)

Gambar 4.7. Salah Satu Bentuk Fisik LM35 (LM35,1994;1)


Untuk fitur-fitur yang dimiliki oleh LM35 adalah sebagai berikut:

Dikalibrasi langsung dalam oCelcius (celcius)

sensivitasnya atau faktor skala yang Linear = 10,0 mV / oC

Akurasi 0,5 oC (pada 25 oC)

rentang suhu dari - 55 sampai +150 oC

Cocok untuk aplikasi remote

Murah

61

Beroperasi dari 4 sampai 30 Volt

Arus Drain kurang dari 60 mA

Impedansi Output rendah, 0,1 Ohm untuk 1 beban mA

4.3. LDR
LDR atau Light Dependent Resistor merupakan resistor yang nilai
resistansinya berubah-ubah tergantung dengan besarnya intensitas cahaya yang
diserap. LDR dibuat dari cadium Sulfied (CDS), yang dihasilkan dari serbuk
keramik dan disebut juga peralatan photo conductive, selama konduktivitas atau
resistansi dari CDS bervariasi terhadap intensitas cahaya. Jika intensitas cahaya
yang diterima bertambah tinggi maka nilai resistansi LDR akan berkurang
demikian juga sebaliknya. Tetapi CDS tidak mempunyai sensitivitas yang sama
pada tiap panjang gelombang dari ultraviolet sampai dengan infra merah. Gambar
4.8 menunjukkan karakteristik dan simbol LDR. Sedangkan Gambar 4.9
menunjukkan LDR yang sesungguhnya.

a. Karakteristik LDR

b. Simbol LDR

Gambar 4.8. Karakteristik dan Simbol LDR

62

Gambar 4.9. LDR


4.4. Tata Cara Inisialisasi ADC dengan CodeWizard
Untuk menginisialisasi ADC dengan Code Wizard dilakukan tata cara sebagai
berikut:
1. Gerakkan mouse ke tulisan ADC Analog to Digital Converter (nomor 1)
setelah itu centang ADC Enabled (nomor 2) seperti yang ditunjukkan dalam
Gambar 4.10.

Gambar 4.10. ADC dengan CodeWizard


2. Setelah itu centang use 8 bit (nomor 3), rubah AREF menjadi AVCC (nomor
4), rubah clock menjadi 500,000 KHz (nomor [5]), Seperti yang ditunjukkna
dalam Gambar 4.11. Setelah semuanya sudah maka inisialisasi ADC sudah
selesai.

63

Gambar 4.11. Lanjutan Inisialisasi ADC dengan CodeWizard


Dan oleh CodeVision AVR akan dibuatkan sebuah fungsi yang bernama
read_adc(adc_input) seperti yang ditunjukkan dalam Gambar 4.12.

Gambar 4.12. Fungsi adc_read(adc_input)


Sedangkan cara menggunakan fungsi adalah dengan langsung memanggilnya,
sebagai berikut:
Tegangan Input analog dihubungkan dengan ADC0 atau PA0 maka cara
untuk memdapatkan data hasil konversinya cukup dengan menuliskan dalam
variable data_adc = read_adc(0) // 0 = ADC0 seperti yang ditunjukkan dalam
Gambar 4.13

64

Gambar 4.13. Cara Menggunakan fungsi read_adc()


4.5. Percobaan I ADC
Langkah-langkah percobaan ADC ATMega16 sebagai berikut:
1. Buat Rangkaian untuk program Proteus dan Hardwarenya seperti yang
ditunjukan dalam Gambar 3.14.

Gambar 3.14. Rangkain ATMega16 untuk percobaan ADC


2. Buat flowcart dan program untuk menampilkan konversi tegangan input
menjadi data digital tampilan 7 segmen secara bergantian untuk ratusan,
puluhan dan satuan dengan tanda PD0 untuk Ratusan, PD1 untuk Puluhan
dan Pd2 untuk Satuan. Dan Aplikasikan ke Hardwarenya.
3. Amati dan buat laporannya

65

4.6. Percobaan II ADC


1. Kembangkan program percobaan I, dengan memberikan tampilan yang
berbeda untuk yang sesuai dengan besar tegangan input. Untuk tegangan
input antara 0 sampai 1 volt maka ATMega16 akan menampilkan di 7
segmen NIM 1, untuk tegangan input antara 1 sampai 2 volt maka
ATMega16 akan menampilkan di 7 segmen NIM 2, untuk tegangan input
antara 2 sampai 3 maka ATMega16 menampilkan LED Geser kiri, untuk
tegangan input antara 3 sampai 4 maka ATMega16 akan menampilkan LED
geser kanan, untuk tegangan input antara 4 sampai 5 volt maka ATMega16
akan menampilkan Biar Pet. Buat flowcart, Program dan aplikasikan ke
hardwarenya
2. Amati dan buat laporannya.

4.7. Percobaan III ADC


1. Ganti Potensiometer dengan Rangkaian LDR seperti yang ditunjukkan dalam
Gambar 4.15.

Gambar 4.15. Percobaan Menggunakan LDR


2. Beri Cahaya pada LDR dengan Jarak yang tertentu sehingga semua menu
pada langkah 4 dapat tampil semuanya.
3. Catat jarak antara sumber cahaya dan LDR
4. Ulangi dengan menggantikan R1 = 5K Ohm, 15K Ohm dan 22 K Ohm
66

5. Catat setiap perubahan jarak antara sumber cahaya dengan LDR untuk
masing-masing perubahan R1.
6. Buat laporan dan kesimpulan
4.8. Percobaan IV ADC
1. Modifikasi Rangkaian Gambar 4.15 menjadi sensor suhu dengan mengganti
rangkaian LDR dengan IC LM35. Dengan catatan saat inisialisasi ubah Volt.
Ref = Int. Cap. on AREF seperti ditunjukkan dalam Gambar 4.16.

Gambar 4.16. Setting Volt Referensi sebesar 2,56 Volt

67

BAB V
UNIVERSAL SYNCHRONOUS AND ASYNCHRONOUS
SERIAL RECEIVER TRANSMITTER (USART)
Capaian Pembelajaran:
Setelah membaca dan mengkaji bab ini, pembaca akan mampu:
Menyusun algoritma, flowcart dan program dengan memanfaatkan unit
USART, unit ADC dan unit input-output ATMega16 untuk proses telemetri
dan telekontrol.
Mengaplikasikan

program

komunikasi

Serial

dengan

menggunakan

ATMega16

5.1. USART Dalam At Mega 16


Universal Synchronous dan Asynchronous dan Transmitter (USART)
adalah perangkat komunikasi serial yang sangat fleksibel. Fitur-fitur utama adalah
sebagai berikut:

Operasi full duplex

Operasi asinkron atau sinkron

Master atau slave clock pada operasi sinkron

Generator baud rate resolusi tinggi

Mendukung frame serial dengan 5, 6, 7, 8, atau 9 bit data dan 1 atau 2 bit
stop

Paritas ganjil atau genap

Deteksi data over run

Deteksi kesalahan framing

Filter terhadap gangguan termasuk deteksi bit start palsu dan low pass
filter digital

Tiga Interrupsi terpisah di TX komplit, TX Data Register Empty, dan RX


komplit

Mode Komunikasi Multi-prosesor

Kecepatan ganda pada mode komunikasi asinkron

68

Blok diagram sederhana dari USART ditunjukkan pada Gambar 5.1 dan untuk
Register I/O dan pin I/O yang dapat diakses ditampilkan dengan huruf tebal
seperti Register UCSRA, UCSRB, UCSRC, UDR dan UBRR, serta pin RxD,
TxD dan XCK.

Gambar 5.1. Blok Diagram USART pada ATMega 16 (ATMega16,2010;144)


Dalam Gambar 5.1, kotak-kotak yang putus-putus dalam blok diagram
memisahkan tiga bagian utama dari USART yaitu: Generator Clock, Transmitter
dan Receiver. Register Kontrol dibagi ke semua unit. Clock pembangkit logika
terdiri dari logika sinkronisasi untuk masukan clock eksternal yang digunakan
oleh operasi sinkron slave dan generator baud rate. Pin XCK (Clock Transfer)
hanya digunakan oleh mode Transfer Sinkron. Transmitter terdiri dari buffer
register tulis, serial Shift regiseter, generator paritas dan kontrol logika untuk
menangani berbagai format bingkai (frame) serial. Buffer register tulis
69

memungkinkan transfer data yang berkelanjutan tanpa ada penundaan antara


frame. Pada receiver merupakan bagian paling kompleks dari modul USART
karena clock dan unit pemulihan data. Unit-unit pemulihan digunakan untuk
penerimaan data asinkron. Tambahan fungsi untuk unit pemulihan berupa
pemeriksa paritas penerima (receiver), logika kontrol, Shift Register dan dua
tingkat receive buffer (UDR). Receiver mendukung format frame yang sama
seperti transmitter, dan dapat mendeteksi kesalahan frame, overrun data dan
kesalahan paritas.
Untuk dapat menggunakan USART, perlu diketahui dari fungsi-fungsi
masing-masing register yang ada di dalam Blok diagram pada Gambar 5.1.
Register-register tersebut sebagai berikut:
1. UDR atau USART Data Register

Gambar 5.2. Register UDR (ATMega16,2010;163)


USART Transmit Data Buffer Register dan USART Receive Data Buffer
Register menggunakan alamat I/O yang sama yang disebut USART Data
Register atau UDR. Transmitter Data Buffer Register (TXB) akan menjadi
tujuan dari penulisan data ke lokasi register UDR sedangkan saat membaca
register UDR akan mendapatkan isi dari Receiver Data Buffer Register (RXB)
seperti yang ditunjukkan dalam Gambar 5.2.

2. UCSRA atau USART Control Status Register A,


Nama bit-bit UCSRA ditunjukkan dalam Gambar 5.3.

Gambar 5.3. Bit-Bit Register UCSRA (ATMega16,2010;164)


Keterangan bit-bit Register UCSRA adalah sebagai berikut:
-

Bit 7 RXC: USART Receive Complete

70

Merupakan bit tanda bahwa ada data yang telah masuk secara serial
melalui pin RxD. Bernilai logika satu bila ada data masuk ke buffer
penerima dan belum dibaca, bila data sudah dibaca maka akan berubah
menjadi nol. Bit RXC ini juga digunakan untuk membangkitkan intrupsi
Receive Complete.
-

Bit 6 TXC: USART Transmit Complete


Merupakan bit tanda bila semua data sudah komplit dikirim secara serial
melalui pin TxD. Bernilai logika satu bila transmit shift register telah
kosong dan tidak ada data baru dalam transmit buffer (UDR). Bit TXC ini
akan berubah menjadi nol secara otomatis saat intrupsi transmit complete
dikerjakan atau dapat di-nol-kan dengan menuliskan satu ke bit ini. Tanda
TXC juga membangkitkan sebuah intrupsi Transmit Complete.

Bit 5 UDRE: USART Data Register Empty


Tanda UDRE menunjukkan jika transmit buffer (UDR) siap menerima
data. Bila UDRE berlogika satu buffer kosong, berarti siap untuk ditulis.
Tanda UDRE dapat membangkitkan intrupsi Data Register Empty. UDRE
berlogika satu untuk menunjukkan bagian transmitter siap.

Bit 4 FE: Frame Error


Bit berlogika satu jika karakter berikutnya dalam buffer penerima terjadi
frame error ketika menerima yaitu saat stop bit pertama dari karakter
berikutnya dalam buffer penerima (receiver) adalah nol. Bit FE adalah nol
ketika stop bit data yang diterima adalah satu. Beri bit ini nol saat menulis
ke UCSRA.

Bit 3 DOR: Data OverRun


Bit ini berlogika satu jika kondisi over run data terdeteksi. Sebuah data
overrun terjadi ketika buffer penerima penuh (dua karakter), ada karakter
baru yang menunggu dalam shift Registre penerima, dan start bit baru
terdeteksi. Beri bit ini ke nol saat menulis ke UCSRA.

Bit 2 PE: Parity Error


Bit ini berlogika satu jika karakter berikutnya dalam buffer penerima
memiliki kesalahan paritas (Parity Error) saat diterima dan pengecekan

71

paritas telah diaktifkan pada bagian UPM1 = 1. Beri bit ini nol saat
menulis ke UCSRA.
-

Bit 1 U2X: Double the USART Transmission Speed


Bit ini hanya berpengaruh untuk operasi asinkron. Beri bit ini nol bila
menggunakan sinkron operasi. Bila bit ini diberi nilai logika satu maka
akan mengurangi pembagi dari pembagi baud rate dari 16 ke 8 sehingga
secara efektif menggandakan transfer rate untuk komunikasi asinkron.

Bit 0 MPCM: Multi-processor Communication Mode


Bit ini memungkinkan Modus komunikasi multi-prosesor. Apabila bit
MPCM diberi logika satu, maka semua frame yang diterima oleh penerima
USART yang tidak mengandung informasi alamat akan diabaikan.
Transmiiter tidak dipengaruhi oleh pengaturan MPCM.

3. UCSRB atau USART Control Status Register B


Nama bit-bitnya ditunjukkan dalam Gambar 5.4.

Gambar 5.4. Bit-bit Register UCSRB (ATMega16,2010;165)


Keterangan bit-bit Register UCSRB adalah sebagai berikut:
-

Bit 7 RXCIE: RX Complete Interrupt Enable


Bit ini digunakan untuk mengaktifkan intrupsi saat ada data masuk di
buffer penerima atau saat RXC bernilai satu. Jika diberi logika satu maka
intrupsi diaktifkan dan bila diberi nol maka intrupsi tidak aktif.

Bit 6 TXCIE: TX Complete Interrupt Enable


Bit ini digunakan untuk mengaktifkan intrupsi saat data sudah selesai
dikirimkan atau saat TXC sama dengan satu. Jika diberi logika satu maka
intrupsi diaktifkan dan bila diberi nol maka intrupsi tidak aktif.

Bit 5 UDRIE: USART Data Register Empty Interrupt Enable


Bit ini digunakan untuk mengaktifkan intrupsi saat UDRE sama dengan
satu. Jika diberi logika satu maka intrupsi diaktifkan dan bila diberi nol
maka intrupsi tidak aktif.

Bit 4 RXEN: Receiver Enable

72

Bit ini digunakan untuk mengaktifkan bagian penerima (receiver)


USART, dan pin RxD digunakan sebagai jalur komunikasi serial. Bila
diberi logika satu akan aktif dan logika nol untuk non aktif
-

Bit 3 TXEN: Transmitter Enable

Bit ini digunakan untuk mengaktifkan bagian pengirim (transmitter)


USART, dan pin TxD digunakan sebagai jalur komunikasi serial. Bila
diberi logika satu akan aktif dan logika nol untuk non aktif

Bit 2 UCSZ2: Character Size


Bit UCSZ2 dikombinasikan dengan bit UCSZ1 dan UCSZ0 bit dalam
register UCSRC untuk menetapkan jumlah bit data atau ukuran karakter
dalam frame untuk penerima (receiver) dan pemancar (transmitter).

Bit 1 RXB8: Receive Data Bit 8


RXB8 adalah bit data kesembilan dari karakter yang diterima ketika
beroperasi dengan frame serial dengan sembilan bit data. Harus dibaca
sebelum membaca bit rendah dari UDR.

Bit 0 TXB8: Transmit Data Bit 8


TXB8 adalah bit data yang kesembilan dari karakter yang akan dikirim
ketika beroperasi dengan frame serial dengan sembilan bit data. Harus
ditulis sebelum menulis bit rendah untuk UDR.

4. UCSRC atau USART Control Status Register C


Nama bit-bit dari Register UCSRC ditunjukkan dalam Gambar 5.5.

Gambar 5.5. Bit-bit Register UCSRC (ATMega16,2010;166)


Alamat lokasi register UCSRC berbagi dengan register UBRRH. Sedang
untuk keterangan bit-bit Register UCSRC adalah sebagai berikut:
-

Bit 7 URSEL: Register Select


Bit ini digunakan untuk memilih antara mengakses register UCSRC atau
register UBRRH. Bila diberi logika satu maka digunakan sebagai register
UCSRC.

Bit 6 UMSEL: USART Mode Select


73

Bit ini digunakan untuk memilih mode operasi komunikasi serial, bila
diberi logika 0 maka mode Asikron dan bila diberi logika 1satu maka
mode Sinkron

Bit 5:4 UPM1dan UPM0: Parity Mode


Bit-bit yang digunakan untuk mengaktifkan dan menetapkan jenis generasi
dan memeriksa paritas. Jika diaktifkan, bagian pemancar akan secara
otomatis menghasilkan dan mengirim bit paritas dari data yang dikirimkan
dalam setiap frame. Dan pada bagian penerima (receiver) akan
menghasilkan nilai paritas dari data yang masuk dan bandingkan dengan
pengaturan UPM0. Jika ketidakcocokan terdeteksi, maka tanda bit PE di
UCSRA akan bernilai satu. Untuk pengaturan bit-bit UPM1 dan UPM0
ditunjukkan dalam Tabel 5.1.
Tabel 5.1.Pengaturan bit-bit UPM (ATMega16,2010;166)

Bit 3 USBS: Stop Bit Select


Bit ini digunakan untuk memilih jumlah Bit Stop yang akan dimasukkan
oleh bagian pengirim.

Sedang untuk bagian penerima

enerima

mengabaikan pengaturan ini. Bila USBS = 0 maka diatur menggunakan 1


bit stop, sedang bila USBS = 1 maka diatur mengunakan 2 bit stop.
-

Bit 2:1 UCSZ1:0: Character Size


bit UCSZ1 dan UCSZ0 dikombinasikan dengan bit UCSZ2 bit dalam
register UCSRB untuk menetapkan jumlah bit data atau ukuran karakter
dalam frame untuk penerima dan pemancar. Dan untuk pengaturan UCSZ2
sampai UCSZ0 ditunjukkan dalam Tabel 5.2.

Bit 0 UCPOL: Clock Polarity


Bit ini digunakan untuk mode Sinkron saja. Untuk mode Asikron diberi
logika 0. Bit UCPOL menetapkan hubungan antara perubahan output data

74

dan sampel input data, dan clock sinkron (XCK). Untuk pengaturan bit
UCPOL ditunjukkan dalam tabel 5.3
Tabel 5.2. Kombinasi UCSZ2 sampai UCSZ0 untuk Pengaturan Ukuran
Karakter (ATMega16,2010;167)

Tabel 5.3. Pengaturan Bit UCPOL (ATMega16,2010;167)

5. UBRR atau USART Baud Rate Register


UBRR terdiri dari dua buah register yaitu UBRRH dan UBRRL, registerregister ini digunakan untuk mengatur kecepatan pengiriman data atau Baud
Rate. Untuk alamat register UBRRH digunakan bersama dengan register
UCSRC. Bit-bit dari UBRRH dan UBBRL ditunjukkan dalam Gambar 4.6.

Gambar 4.6. Bit-bit Register UBRRH dan UBRRL (ATMega16,2010;167)


-

Bit 15 URSEL: Register Select

75

Bit yang digunakan untuk memilih penggunaan register UBRRH atau


UCSRC, harus diberi logika 0 saat digunakan untuk register UBRRH

Bit 14 sampai 12, cadangan

Bit 11 sampai bit 0

Merupakan register 12-bit yang berisi USART baud rate. Regiseter


UBRRH ini berisi empat bit MSB, dan UBRRL tersebut berisi 8 bit LSB
dari USART baud rate.

Untuk perhitungan Baud Rate dan nilai register UBRR ditunjukkan dalam
tabel 5.4.
Tabel 5.4. Perhitungan Baud Rate dan nilai Register UBRR
(ATMega16,2010;147)

Catatan:
1. Baud rate didefinisikan sebagai kecepatan transfer dalam bit per detik (bps).
2. BAUD = Baud rate
3. fosc = Frekuensi Osilator Clock Sistem

5.2. Cara Inisialisasi USART dengan Code Wizard


Langkah-langkah untuk menginisialisasi USART dengan Code Wizard
adalah sebagai berikut:
1. Pilih menu USART, kemudian centang Receiver (nomor 1) dan centang
Transmiter (nomor 2) seperti yang ditunjukkan dalam Gambar 5.7 dan akan
menghasilkan tampilan seperti Gambar 5.8 dan kemudian centang Rx
Interrupt (nomor 3), untuk kecepatan data baut rate = 9600 dan parameter
data 8 bit per karakter, satu bit stop dan tanpa menggunakan paritas maka
settingnya adalah seperti ditunjukkan dalam Gambar 5.8.

76

1
2

Gambar 5.7. Inisialisasi USART dengan Code Wizard

Gambar 5.8. Inisialisasi USART Lanjutan

2. Setelah di Generate program, Save and Exit, maka CodevisionAVR akan


membuatkan fungsi interrupt [USART_RXC] void usart_rx_isr(void)
yang akan bekerja jika ada data yang masuk melalui RXD dan fungsi char
getchar(void) yang digunakan untuk membaca data yang telah masuk ke
dalam regisiter UDR melalui RXD. Gambar 5.9 menunjukkan fungsi-fungsi
tersebut.

77

Gambar 5.9. Fungsi interrput [USART_RXC] dan getchar(void)


3. Untuk mengirim data ke register UDR atau TXD dapat dilakukan dengan
menggunakan cara-cara yaitu:
-

Langsung memberikan data ke register UDR seperti


UDR = data_tx; // data_tx merupakan variabel dalam byte

Menggunakan perintah putchar(char c) seperti


putchar(A) // data yang dikirimkan dalam bentuk karakter

4. Untuk menerima data dari register UDR atau RXD dapat dilakukan dengan
menggunakan cara-cara yaitu:
-

Langsung mengambil data dari register UDR seperti


data_rx = UDR // menerima data dari RXD dalam bentuk byte

Menggunakan perintah getchar (char c) seperti


data_rx = getchar(); // mengambil data dalam bentuk karakter

5. Untuk menuliskan program bagian penerima data serial dengan model


menggunakan intrupsi,

program ditulis didalam fungsi

interrupt

[USART_RXC] void usart_rx_isr(void) seperti ditunjukkan dalam Gambar


5.10.

78

Gambar 5.10. Letak Penulisan Program Terima Data Serial


6. Untuk menuliskan program bagian pengirim data serial biasanya ditaruh di
program utama seperti yang ditunjukkan dalam Gambar 5.11.

Gambar 5.11. Letak Program Kirim Data Serial

5.3. Percobaan I USART ATMega16


Langkah-langkah percobaan USART ATMega16 adalah sebagai berikut:
1. Buat Rangkaian dengan menggunakan Proteus dan hardware seperti yang
ditunjukkan dalam Gambar 5.12

79

Gambar 5.12, Rangkaian Percobaan USART ATMega16


2. Inisialisasikan USART dengan Receiver Rx interrupt, Transmitter, Baut rate
9600, 8 bit per karakter, satu bit stop dan no parity.
3. Tulis program berikut ini di dalam fungsi interrupt [USART_RXC] void
usart_rx_isr(void)
if (data == 'A')
{
PORTC = 0XF9;
}
if (data == 'B')
{
PORTC = 0XA4;
}
if (data == 'C')
{
PORTC = 0XB0;
}
if (data == 'D')
{
PORTC = 0X99;
}
4. Tulis program berikut ini di dalam bagian program utama
80

while (1)
{
// Place your code here
if (PINA.0 == 0)
{
UDR = 'A';
delay_ms(100);
}
if (PINA.1 == 0)
{
UDR = 'B';
delay_ms(100);
}
if (PINA.2 == 0)
{
UDR = 'C';
delay_ms(100);
}
if (PINA.3 == 0)
{
UDR = 'D';
delay_ms(100);
}
};
}
5. Jalankan program dan masukkan ke dalam ATMega 16, amati yang terjadi,
buat flowcart, pembahasan dan kesimpulan
6. Modifikasi program tersebut sehingga ada 4 tampilan menu berdasarkan
pengendalian jarak jauhnya.
7. Buat flowcart dan programnya, kemudian masukkan ke dalam ATMega16
8. Amati, catat perubahannya
9. Buat laporannya

81

5.4. Percobaan II USART ATMega16


1. Buat Rangkaian dengan Proteus dan di hardware seperti yang ditunjukkan
dalam Gambar 5.13.

Gambar 5.13. Rangkaian Percobaan II USART ATMega16


2. Buat flowcart dan program yang akan menerima dan mengirimkan perintah
antara mikrokontroler ATMega16 dengan Personal Komputer melalui Serial
Port
3. Amati hasilnya
4. Buat Laporannya

5.5.

Percobaan III USART ATMega 16.

1. Rencanakan sebuah rangkaian mikrokontroler yang dapat mengirimkan suhu


(LM35) ke Personal Komputer, dan Personal Komputer dapat mengendalikan
7 segmen dan LED yang ada di rangkaian mikrokontroler ATMega 16.
2. Buat blok diagram, flowcart, program dan laporannya.

82

DAFTAR PUSTAKA

Andrianto,

Heri, 2008, Pemrograman Mikrokontroler AVR ATMega16,

Bandung, Informatika Bandung.

ATMega16, Datasheet, 2010, Atmel Corporation

LM35/LM35A/LM35C/LM35CA/LM35D,

Datasheet,

1994,

Precision

Centigrade Temperature Sensors, , National Semiconductor Corporation

Seven Segment Displays, Datasheet 14.2 mm (0.56 inch), 2002, Agilent


Technologies.

83

GLOSARIUM

ADC

Analog to Digital Converter


Pengolah Sinyal analog menjadi data Digital

ALU

Aritmarik Logik Unit

AT

Mikrokontroler buatan Atmel Co.

AVR

Alf and Vegards Risc prosesor


Prosesor yang dibuat oleh pabrik ATMEL Co.

Baud rate

Kecepatan pengiriman data serial

Bit

Satu digit dalam system bilangan biner

Boot

Saat pengaktifan Mikrokontroler

Byte

8 bit 8 digit dalam biner

CA

common anoda
anoda yang disatukan

CC

common katoda
katoda yang disatukan

Chip

Integrated Circuit atau IC

CISC

Complex Instruction Set Computing

CMOS

Complementary metaloxidesemiconductor
Salah satu jenis bahan pembuatan IC

CodeVision

Software yang digunakan untuk memprogram Mikrokontroler

AVR

dengan menggunakan bahasa C

Counter

Penghitung

EEPROM

Electrical Eresable Programmable ROM


ROM yang dapat dihapus dengan elektrik dan dapat di program
ulang

Flash

Memori tempat penyimpanan program

fosc

Frekuensi osilator dari mikrokontroler atau frekuensi kerja


mikrokontroler

header

Kepala program

Interrupt

Interupsi atau penyela

ISP

In System Programming

84

LED

Light Emitting Diode

LDR

Light Dependent Resistor

Main

Program utama

Master-Slave

Model komunikasi dengan satu perangkat memiliki kontrol


searah atas satu atau lebih perangkat lain.

MCS

Microcontroller Sistem

MHz

Mega Hz atau 106 Hz

MIPS

Mega Instruction Per Second

OnChip

Tersedia di dalam IC

Port

Jalur input-ouput

Prescaler

Pembagi frekuensi

Proteus

Software yang digunakan untuk mensimulasikan program


mikrokontroler

PWM

Pulse Width Modulation

RAM

Random Access Memory


Memori yang dapat dibaca dan ditulis

RISC

Reduced Instruction Set Computing

ROM

Read Only Memory


Memori yang hanya bisa dibaca

Sensor

sesuatu yang digunakan untuk mendeteksi adanya perubahan


lingkungan fisik atau kimia

SPI

Serial Periperal Interface

SRAM

Static RAM

Step size

Besar tegangan setiap kenaikan digit pada ADC

Timer

Pewaktu

85