Anda di halaman 1dari 80

MODUL AJAR

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

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

Mikrokontroler dan Interfacing


Mikrokontroler dan Interfacing
(2) dua
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 Juli 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:


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 Juli 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 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 Juli 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

INPUT-OUTPUT

17

2.1. TEORI DASAR INPUT-OUTPUT

17

2.2. CARA KERJA SAKLAR DAN FOTOTRANSISTOR

23

2.3. TAMPILAN SEVEN SEGMEN

29

BAB III ANALOG TO DIGITAL CONVERTER (ADC)

34

3.1. ADC DALAM ATMEGA 16

34

3.2. LANGKAH-LANGKAH PENGGUNAAN ADC

39

3.3. LM35

40

BAB IV UNIVERSAL SYNCHRONOUS AND ASYNCHRONOUS


SERIAL RECEIVER TRANSMITTER (USART)

50

4.1. USART DALAM AT MEGA 16

52

4.2. APLIKASI USART

61

DAFTAR PUSTAKA

70

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 2.1. Ketentuan Posisi Sensor-Sensor Robot Line Follower

26

Tabel 2.2. Hubungan antara Sensor dan Port A

26

Tabel 2.3. Hubungan antara Pengedalian Motor dan Port C

27

Tabel 2.4. Hubungan antara Port A dan Port C

27

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

31

Tabel 3.1. Pilihan Tegangan Referensi ADC

36

Tabel 3.2. Kanal Input ADC untuk jenis Single Ended Input

37

Tabel 3.3. Frekuensi clock ADC

38

Tabel 4.1.Pengaturan bit-bit UPM

56

Tabel 4.2. Kombinasi UCSZ2 sampai UCSZ0 untuk Pengaturan


Ukuran Karakter

57

Tabel 4.3. Pengaturan Bit UCPOL

57

Tabel 4.4. Perhitungan Baud Rate dan nilai Register UBRR

58

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. Register-Register PORTA

18

Gambar 2.2. Port A sebagai Input dan Port C Sebagai Output

19

Gambar 2.3. Flowcart Soal 1

20

Gambar 2.4. Flowcart Soal 2

21

Gambar 2.5. Flowcart Latihan 1


Gambar 2.6. Rangkaian Saklar Saat Terbuka dan Tertutup

22
23

Gambar 2.7. Rangkaian Fototransistor dan LED

23

Gambar 2.8. Rangkaian Mikrokontroler Penghitung Mobil

24

Gambar 2.9. Blok Diagram Robot Line Follower

25

Gambar 2.10. Flowcart Robot Line Follower

28

Gambar 2.11. Tampilan Seven Segmen

30

Gambar 2.12. Blok Diagram Hubungan antara Port C dengan


Seven Segmen

30

Gambar 2.12. Flowcart Contoh Soal 2

32

Gambar 3.1. Blok Diagram ADC ATMega 16

34

Gambar 3.2. Bit-bit dalam Register ADMUX

36

Gambar 3.3. Format Hasil Konversi Bila DLAR sama dengan 0

36

Gambar 3.4. Format Hasil Konversi Bila DLAR sama dengan 1

37

Gambar 3.5. Bit-bit dalam register ADCSRA

37

Gambar 3.6. Rangkaian Sensor Suhu dalam Celcius

41

Gambar 3.7. Salah Satu Bentuk Fisik LM35

41

Halaman
Gambar 3.8. Pengendalian Suhu Tangki dengan ATMega 16

42

Gambar 3.9. Flowcart Pengendali Suhu Tangki

43

Gambar 3.10. Tampilan Indikator Tekanan dengan ATMega 16

45

Gambar 3.11. Flowcart Indicator Tekanan dengan ATMega 16

47

Gambar 4.1. Blok Diagram USART pada ATMega 16

51

Gambar 4.2. Register UDR

52

Gambar 4.3. Bit-Bit Register UCSRA

52

Gambar 4.4. Bit-bit Register UCSRB

54

Gambar 4.5. Bit-bit Register UCSRC

55

Gambar 4.6. Bit-bit Register UBRRH dan UBRRL

57

Gambar 4.7. Telemetri Suhu antara dua MCU ATMega16

62

Gambar 4.8. Flowcart MCU Master

62

Gambar 4.9. Flowcart MCU Slave

62

Gambar 4.10. Skema Konverter TTL ke RS-232

64

Gambar 4.11. Blok Diagram Telekontrol PC ke MCU ATMega16

65

Gambar 4.12. Flowcart untuk MCU ATMega16 Slave

67

BAB I
DASAR 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

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

10

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)

11

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).

12

Masing-masing Pin Port B juga berfungsi seperti yang


ditunjukkan dalam Tabel 1.1
- Port C (PC7 PC0)

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


pull-up resistor (dipilih untuk setiap bit).
Masing-masing Pin Port C juga berfungsi seperti yang
ditunjukkan dalam Tabel 1.2

- Port D (PD7 PD0)

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


pull-up resistor (dipilih untuk setiap bit).
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)

13

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

14

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.

Gambar1.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)

15

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

16

// 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.

17

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.

18

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

19

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 =0xF F

Gambar 1.5. Flowcart Perintah if

20

Dan dengan cara penulisannya sebagai berikut:


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

P B = 0 xF F

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

21

Y
P B =0xFF
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

Gambar 1.8. Flowcart Perintah do while

22

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

Contoh Soal:

23

1. Ada berapa jenis memori yang dimiliki ATMega16? Sebutkan.


Jawab:
Ada 3 yaitu: RAM, EEPROM dan Flash Memori Program
2. Ada berapa port yang dimiliki oleh ATMega16?
Jawab:
Ada 4 port yaitu Port A, Port B, Port C dan Port D
Latihan:
1. Buat flowcart dan program untuk menghitung 1 sampai 10 dengan
menggunakan instruksi :
a. while
b. for

24

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

Menyusun algoritma, flowcart dan program dengan memanfaatkan unit


input-output ATMega16.

2.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
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

25

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 2.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 2.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.
Contoh:

26

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

Contoh Soal 1.
Buat Algoritma, flowcart dan program untuk membaca Port A dan hasilnya
ditampilkan di Port C seperti pada Gambar 2.2

Gambar 2.2. Port A sebagai Input dan Port C Sebagai Output

27

Jawab:
Algoritma:
1.

Karena Port A dihubungkan dengan saklar maka Port A diinisialisasi


sebagai Input sehingga DDRA = 00000000B atau 0x00, sedangkan port B
dihubungkan dengan rangkaian LED maka Port C diinisialisasi sebagai
Output sehingga DDRC = 11111111B atau 0xff;

2.

Baca data dari Port A dan kirim ke Port B

3.

Dan ulangi ke 2

Flowcart:

Gambar 2.3. Flowcart Soal 1


Program:
#include<mega16.h>

// ambil fungsi-fungsi untuk ATMega16

unsigned char datain ;

//datain =>byte (deklarasi global)

void main (void)


{
DDRA = 0x00 ;

//PA = Input

DDRC = 0xff ;

//PC = Output

while (1)

//selalu benar

{
datain = PINA ;
PORTC = datain ;
}
}

28

Contoh Soal 2.
Dari Gambar 2.2, buat flowcart dan program bila nilai dari Port A kurang dari 80
maka Port C = 0x00 dan lebih maka Port C = 0xff.
Jawab:
Flowcart:

Gambar 2.4. Flowcart Soal 2


Program:
#include <mega16.h>
unsigned char datain;
void main (void)
{
DDRA = 0X00;
DDRC = 0XFF;
While (1)
{
datain = PIN A;
if (datain<80) }
{ PORTC = 0XFF;}
Else

{ PORTC = 0X00;}

}}

29

Latihan 1.
Dari Gambar 2.2, buat flowcart dan program dengan ketentuan-ketentuan sebagai
berikut:
1.

Bila nilai 0 < Port A < 40 maka Port C = 0000 0000B = 0x00

2.

Bila nilai 40 <= Port A < 80 maka Port C = 0000 1111B = 0x0f

3.

Bila nilai 80 <= Port A < 100 maka Port C = 1111 0000B = 0xf0

4.

Bila nilai Port A >= 100 maka Port C = 1111 1111B = 0xff

Flowchart :

Gambar 2.5. Flowcart Latihan 1


Pertanyaannya: benarkah flowcart Gambar 2.5 ? Buat Programnya.
Buat juga flowcart dan program model yang lain

30

2.2 . CARA KERJA SAKLAR DAN FOTOTRANSISTOR


Saklar merupakan salah satu jenis masukan yang sering digunakan dalam
rangkaian mikrokontroler. Salah satu rangkaian saklar ditunjukkan dalam Gambar
2.6a dan Gambar 2.6b. Gambar 2.6a merupakan gambar rangkaian saklar dalam
keadaan terbuka, karena dicatu tegangan 5 volt maka besar tegangan di Saklar
sama dengan 5 Volt yang diukur pakai voltmeter, sehingga memiliki logika 1,
sedangkan untuk rangkaian dalam Gambar 2.6b merupakan gambar rangkaian
saklar tertutup, karena Saat saklar tertutup kedua kutup saklar hubung singkat
dengan groung sehingga besar tegangan saklar sama dengan 0 volt bila diukur
dengan voltmeter sehingga memiliki logika 0.

(a)

(b)

Gambar 2.6. Rangkaian Saklar Saat Terbuka dan Tertutup

Gambar 2.7. Rangkaian Fototransistor dan LED


Untuk cara kerja dari rangkaian fototransistor dan LED atau optocoupler
dalam Gambar 2.7. hampir sama dengan cara kerja rangkaian saklar dalam
Gambar 2.6. Saat cahaya LED menyinari basis dari fototransistor maka
fototransistor akan ON, keadaan ON seperti saklar ditutup atau Va

31

dihubungsingkat dengan ground sehingga besar tegangan Va = 0 volt atau


memiliki logika 0, dan jika cahaya LED terhalangi oleh sesuatu sehingga tidak
sampai menyinari basis dari fototransistor maka fototransistor akan OFF, keadaan
OFF seperti saklar dibuka atau Va dan ground tidak ada hubungan sehingga
tegangan Va = 5 Volt atau memiliki logika 1.
Latihan 1.
Buat algoritma, flowcart dan program untuk menghitung jumlah mobil yang
parkir yang telah disediakan seperti dalam Gambar 2.8. Di pintu masuk (IN)
dipasang sensor fototransistor yang dihubungkan dengan Port A bit 0 atau PA0
dan di pintu keluar (OUT) dipasang sensor fototransistor yang dihubungkan
dengan Port A bit 1 atau PA1. Setiap ada mobil masuk maka sensor IN akan
terhalang dan jumlah mobil akan bertambah, dan setiap ada mobil keluar maka
sensor OUT akan terhalang dan jumlah mobil akan berkurang. Bila jumlah mobil
> 10 maka LED1 ON, bila jumlah mobil > 20 LED2 ON, bila jumlah mobil > 30
LED3 ON dan bila jumlah mobil > LED4 ON.

Gambar 2.8. Rangkaian Mikrokontroler Penghitung Mobil


32

Fototransistor juga digunakan sebagai sensor untuk mengetahui warna


hitam atau putih, oleh karena itu fototransistor dapat digunakan untuk sensor
robot line follower, jika sensor berada diatas garis putih maka warna putih akan
memantulkan cahaya LED sehingga fototransistor menjadi ON, sedangkan jika
sensor berada di atas garis warna hitam atau gelap maka cahaya LED tidak akan
terpantulkan sehingga fototransistor menjadi OFF.
Latihan 2.
Buat flowcart dan program untuk robot line follower dengan 4 sensor
fototransistor seperti yang ditunjukkan dalam Gambar 2.9.
Motor KIRI
Sensor 1
Sensor 2
Sensor 3
Sensor 4
Motor KANAN

Sensor 1/S1

PA0

Sensor 2/S2

PA1

Sensor 3/S3

PA2

Sensor 4/S4

PC0

Motor
KIRI

PC1

Motor
KANAN

PA3

Gambar 2.9. Blok Diagram Robot Line Follower

33

Dari Gambar 2.9 ada ketentuan seperti yang ditunjukkan dalam Tabel 2.1.
Tabel 2.1. Ketentuan Posisi Sensor-Sensor Robot Line Follower
S4

S3

S2

S1

ROBOT

Motor

Motor

KANAN

KIRI

OFF

ON

ON

OFF

MAJU

ON

ON

ON

ON

OFF

OFF

BELOK

OFF

ON

OFF

ON

KANAN
ON

OFF OFF

OFF

BELOK
KANAN

OFF OFF

ON

ON

BELOK KIRI

ON

OFF

OFF OFF OFF

ON

BELOK KIRI

ON

OFF

OFF OFF OFF

OFF

BERHENTI

OFF

OFF

Karena rangkaian yang digunakan sebagai sensor seperti Gambar 2.7 maka
hubungan antara sensor S1, S2, S3 dan S4 dan PA0, PA1, PA2 dan PA3
ditunjukkan dalam Tabel 2.2. Sedangkan untuk hubungan pengendalian motor dan
PC0 dan PC1 ditunjukkan dalam Tabel 2.3. Sehingga hubungan antara Port A dan
Port C ditunjukkan dalam Tabel 2.4.

Tabel 2.2. Hubungan antara Sensor dan Port A


S4

S3

S2

S1

OFF

ON

ON

OFF

0x09

ON

ON

OFF OFF

0x03

ON

OFF OFF OFF

0x07

OFF OFF

PA3 PA2 PA1 PA0

Nilai Hex

ON

ON

0x0c

OFF OFF OFF

ON

0x0e

OFF OFF OFF OFF

0x0f

34

Tabel 2.3. Hubungan antara Pengedalian Motor dan Port C

ROBOT

Motor KANAN

Motor KIRI

PC1

PC0

MAJU

ON

ON

BELOK KANAN

OFF

ON

BELOK KANAN

OFF

ON

BELOK KIRI

ON

OFF

BELOK KIRI

ON

OFF

BERHENTI

OFF

OFF

Tabel 2.4. Hubungan antara Port A dan Port C

PA3 PA2 PA1 PA0

Nilai Hex

Desimal

PC1

PC0

0x09

0x03

0x07

0x0c

12

0x0e

14

0x0f

15

Flowcart ditunjukkan dalam Gambat 2.10.

35

Gambar 2.10. Flowcart Robot Line Follower


Program dari flowcart Gambar 2.10 sebagai berikut:
#include <mega16.h>
unsigned char Data_in;
void main (void)
{
DDRA = 0x00;

// PA input

DDRC = 0xff;

// PC output

while (1)
{
Data_in = PINA;
if(Data_in = 9)
{
PORTC.0 = 1;
PORTC.1 = 1;

36

}
if(Data_in = 3)
{
PORTC.0 = 0;
PORTC.1 = 1;
}
if(Data_in = 12)
{
PORTC.0 = 1;
PORTC.1 = 0;
}
if(Data_in =15)
{
PORTC.0 = 0;
PORTC.1 = 0;
}
if(Data_in = 7)
{
PORTC.0 = 0;
PORTC.1 = 1;
}
if(Data_in = 14)
{
PORTC.0 = 1;
PORTC.1 = 0;
}
}}
2.3. 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 2.11. 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

37

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.

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


Contoh Soal 3.
Buat Flowcart dan program untuk menampilkan angka 0 sampai 9 di seven
segmen dihubung dengan Port C seperti gambar 2.12.

Gambar 2.12. Blok Diagram Hubungan antara Port C dengan Seven Segmen

38

Jawab:
Tampilan seven segmen yang digunakan jenis Common Anoda maka untuk
membuat segmen menyala adalah dengan memberikan logika 0 dan untuk
mematikan segmen diberi logika 1, sehingga untuk menampilkan angka 0 sampai
9 dibutuhkan kombinasi logika 0 dan 1 dari setiap segmen yang dihubungkan
dengan Port C. Dan hasil dari kombinasi nilai Port C untuk menampilkan seven
segmen ditunjukkan dalam Tabel 2.5.
Tabel 2.5. Nilai Port C untuk menampilkan angka 0 sampai 9
PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0
Tampilan

Nilai Hex

dot

PC

0xC0

0xF9

0xA4

0xB0

0x99

0x92

0x82

0xF8

0x80

0x90

Jawab: Flowcart ditunjukkan dalam Gambar 2.12.

39

Gambar 2.12. Flowcart Contoh Soal 2


Program:
# include <mega 16.h>

// ambil fungsi untuk ATMega 16

# include <delay.h>

// ambil fungsi untuk waktu tunda

void main (void)


{
DDRC = 0xff ;

// Port C sebagai Output

while (1)
{
PORTC = 0xC0 ;

// tampil angka 0

delay_ms (500) ;

// tunda 500 ms

PORTC = 0xF9 ;

// tampil angka 1

delay_ms (500) ;
PORTC = 0xA4 ;

// tampil angka 2

delay_ms (500) ;
PORTC = 0xB0 ;

// tampil angka 3

delay_ms (500) ;
PORTC = 0x99 ;

// tampil angka 4

40

delay_ms (500) ;
PORTC = 0x92 ;

// tampil angka 5

delay_ms (500) ;
PORTC = 0x82 ;

// tampil angka 6

delay_ms (500) ;
PORTC = 0xF8 ;

// tampil angka 7

delay_ms (500) ;
PORTC = 0z80 ;

// tampil angka 8

delay_ms (500) ;
PORTC = 0x90 ;

// tampil angka 9

delay_ms (500) ;
}
}
Latihan 2.
Dengan menggunakan Gambar 2.11 buat flowcart dan program untuk
menampilkan NIM di tampilan seven segmen.

41

BAB III
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.

3.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 3.1 menunjukkan blok diagram dari
Skema ADC di mikrokontroler ATMega 16.

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

42

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 1.56 Volt yang 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.

43

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 3.2.

Gambar 3.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 3.1 menunjukkan beberapa
tegangan referensi yang dapat digunakan.
Tabel 3.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 3.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 3.4.

Gambar 3.3. Format Hasil Konversi Bila DLAR sama dengan 0


(ATMega16,2010;220)

44

Gambar 3.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 3.2.
Tabel 3.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 3.5.

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

45

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 3.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 3.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

46

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

3.2. LANGKAH-LANGKAH PENGGUNAAN ADC


Dalam menggunakan ADC untuk mengkonversi tegangan analog menjadi
nilai digital ada beberapa langkah yang diperlukan agar mendapatkan hasil yang
diharapkan adalah sebagai berikut:
a. Memilih besar tegangan referensi atau VREF, di dalam ADC ATMega 16 ada
3 pilihan yaitu AVCC (5 Volt), 2,56 Volt dan dengan melalui pin AREF
(selain 5 Volt dan 2,56 Volt). Pemilihan VREF ini ditentukan oleh besar step
size atau besar sensivitas dari sensor yang digunakan sebagai tegangan input
analog.
Dengan rumus:
step size atau ss
atau

VREF
2n 1

n = jumlah bit data digital

VREF = ss x (2n-1)

Step size digunakan oleh ADC untuk mendapatkan nilai data digital hasil
konversi dengan rumus:
Data _ Digital

Vin
ss

Vin = tegangan input ADC

Contoh .
-

Sensor suhu LM35 memiliki sensivitas sensor 10mV/oC, berarti bahwa


saat temperature 25oC maka LM35 mengeluarkan tegangan sebesar:
25x10mV=250 mV, 25oC setara dengan 250 mV, berapa besar VREF
yang cocok untuk sensor LM35 bila jumlah data digitalnya sama dengan 8
bit?
Jawab:
Step size = 10 mV dan n = 8 maka
VREF = ss x (2n-1) = 10 mV x (28-1)
= 10 mV x 255 = 2550 mV = 2,55 Volt atau VREF = 2,56 Volt

Bila temperature ruangan 27oC berapa data digital hasil konversi ADC?
Jawab:
Besar tegangan input ADC atau Vin = 27 x 10mV = 270 mV
Maka Data Digital = 270mV/10mV = 27 atau 0x1B
47

b. Memilih saluran ADC yang akan digunakan sebagai input tegangan analog
c. Memilih jumlah bit data digital hasil konnversi
d. Mengaktifkan ADC dan Memilih frekuensi clock ADC
Langkah a, b, c dan d merupakan langkah-langkah untuk inisialisasi ADC.
Contoh:
Bila dipilih VREF = 2,56 Volt atau step size = 10 mV, saluran ADC yang
digunakan ADC0, hasil data digital 8 bit, ADC aktif dan frekuensi clock ADC =
fosc/8, berapa nilai register ADMUX dan ADCSRA?
Jawab:
Dengan table 3.1, 3.2 dan 3.3 digunakan sebagai acuan maka:

= 0xE0

Keterangan: untuk hasil data digital 8 bit maka DLAR = 1 dan disimpan di ADCH

= 0x83

Jadi untuk ADMUX = 0xE0 dan ADCSRA = 0x83


e. Setelah dilakukan inisialisasi maka ADC dapat digunakan, dan untuk memulai
maka bit ADSC register ADCSRA diberi nilai 1
f. Dan hasil baru dapat diambil bila ADIF = 1, untuk 8 bit hasil di register
ADCH sedangkan untuk 10 bit hasil di register ADCL dan ADCH.
3.3. 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 3.6. Sedangkan untuk salah
satu bentuk fisik tipe To-92 ditunjukkan dalam Gambar 3.7.
48

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

Gambar 3.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

Beroperasi dari 4 sampai 30 Volt

Arus Drain kurang dari 60 mA

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

Contoh Soal1.
Buat Algoritma, flowcart dan program untuk pengaturan suhu tangki pada
Gambar 3.8 pada suhu 45oC, dan besar suhu ditampilkan ke PB untuk nilai
puluhan dan PC untuk nilai satuan. IC LM35 digunakan sebagai sensor suhu.

49

Gambar 3.8. Pengendalian Suhu Tangki dengan ATMega 16


Jawab:
Algoritma:
1. IC LM35 digunakan sebagai sensor suhu memiliki sensivitas 10 mV/oC
maka step size ADC juga 10 mV, data hasil digital dalam 8 bit maka:
VREF = ss (2n-1) = 10 (28-1) = 10 x 255 = 2550 mV = 2,55 Volt dipilih
2,56 Volt, untuk tegangan input analog dihubungkan dengan PA0 atau
ADC0 maka ADMUX sebagai berikut

= 0xE0

ADMUX = 0xE0
Sedangkan untuk frekuensi clock ADC dipilih fosc/16 maka:

ADCSRA = 0x84

50

= 0x84

2. PB dan PD dihubungkan dengan seven segment sehingga PB dan PD


sebagai Output maka DDRB = 0xff dan DDRD = 0xff; demikian juga
untuk PC yang dihubungkan dengan rangkaian pengendali relay juga
sebagai output maka DDRC = 0xff.
3. Start Konversi ADC dengan memberikan logika 1 di bit ADSC register
ADCSRA
4. Tunggu apakah sudah selesai konversi dengan mengecek bit ADIF register
ADCSRA apakah sudah bernilai 1? Kalau belum tunggu sampai bernilai 1.
5. simpan data hasil konversi ADCH ke dataADC
6. Bandingkan dataADC dengan 45, bila lebih besar maka matikan pemanas
dengan memberi PC0 = 0, bila tidak maka hidupkan pemanas dengan
member PC0 =1
7. Pilah dataADC menjadi nilai Puluhan dan satuan
8. Ambil kode seven segmen dari puluhan dan tampilkan di PB dan ambil
kode seven segmen dari satuan dan tampilan di PD
9. Ulangi ke nomor 3
Dari algoritma 1 sampai 9 maka dibuat flowcart seperti yang ditunjukkan
dalam Gambar 3.9 sebagai berikut:

Gambar 3.9. Flowcart Pengendali Suhu Tangki


51

Program dari Flowcart Gambar 3.9 sebagai berikut :


#include <mega16.h>
unsigned char dataADC, Pul, Sat ;
unsigned char sevensegmen [10] ={ 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82,
0xF8, 0x80, 0x90}
void main(void)
{
ADMUX=0xE0; // inisialisasi
ADCSRA=0x83;
DDRC=0xFF;
DDRB = 0xff;
DDRD = 0xff;
while(1)
{
ADCSRA= ADSCRA|0x40; // memberikan sinyal Start ADC ADSC =1
while (ADCSRA&0x10==0); // Cek ADIF = 0, tunggu sampai =1
dataADC=ADCH; // ambil data hasil konversi
ADCSRA=ADCSRA|0x10;
if (dataADC > 45)

// bila > 45

{
PORTC.0=0;

// off pemanas

}
else {
PORTC.0=1;

// on pemanas

}
Pul = (dataADC %100)/10;

// nilai puluhan di Pul

Sat = dataADC % 10;

// nilai satuan di Sat

PORTB = sevensegmen[Pul];

// ambil kode dari array sevensegmen

PORTD = sevensegmen [Sat];

// ambil kode dari array sevensegmen

}
}

52

Contoh Soal 2.
Pada Gambar 3.10 sebuah sensor tekanan memiliki sensivitas 20 mV/N
dihubungkan dengan PA7. Dan PC0 sampai PC5 digunakan sebagai indicator
besarnya tekanan sebagai berikut:
-

bila tekanan > 40 N maka LED di PC0 menyala

bila tekanan > 80 N maka LED di PC1 menyala

bila tekanan > 120 N maka LED di PC2 menyala

bila tekanan > 160 N maka LED di PC3 menyala

bila tekanan > 200 N maka LED di PC4 menyala

bila tekanan > 240 N maka LED di PC4 menyala

Gambar 3.10. Tampilan Indikator Tekanan dengan ATMega 16


Buat Algotirma, Flowcart dan Programnya:
Jawab:
Algotirma:
1. sensor tekanan memiliki sensivitas 20 mV/N maka step size ADC juga 20
mV, data hasil digital dalam 8 bit maka:
VREF = ss (2n-1) = 20 (28-1) = 20 x 255 = 5100 mV = 5,1 Volt dipilih 5
Volt atau AVCC, untuk tegangan input analog dihubungkan dengan PA7
atau ADC7 maka ADMUX sebagai berikut

53

= 0x67

ADMUX = 0x67
Sedangkan untuk frekuensi clock ADC dipilih fosc/16 maka:

= 0x84

ADCSRA = 0x84
2. PC yang dihubungkan dengan LED indicator besarnya tekanan maka PC
sebagai output, DDRC = 0xff.
3. Start Konversi ADC dengan memberikan logika 1 di bit ADSC register
ADCSRA
4. Tunggu apakah sudah selesai konversi dengan mengecek bit ADIF register
ADCSRA apakah sudah bernilai 1? Kalau belum tunggu sampai bernilai 1.
5. simpan data hasil konversi ADCH ke dataADC
6. Bandingkan dataADC dengan 40, bila lebih besar maka PC0 = 1, bila
tidak PC0 =0
7. Bandingkan dataADC dengan 80, bila lebih besar maka PC1 = 1, bila
tidak PC1 =0
8. Bandingkan dataADC dengan 120, bila lebih besar maka PC2 = 1, bila
tidak PC2 =0
9. Bandingkan dataADC dengan 160, bila lebih besar maka PC3 = 1, bila
tidak PC3 =0
10. Bandingkan dataADC dengan 200, bila lebih besar maka PC4 = 1, bila
tidak PC4 =0
11. Bandingkan dataADC dengan 240, bila lebih besar maka PC5 = 1, bila
tidak PC5 =0
12. Ulangi ke nomor 3
Dari algoritma 1 sampai 12 maka dibuat flowcart seperti yang ditunjukkan
dalam Gambar 3.10 sebagai berikut:
Flowchart:
Flowcart dari algoritma 1 sampai 12 ditunjukkan dalam Gambar 3.11

54

Gambar 3.11. Flowcart Indicator Tekanan dengan ATMega 16


Program dari flowcart Gambar 3.11 sebagai berikut:
#include<mega16.h>
unsigned char dataADC;
void main(void)
{

55

ADMUX=0X67;
ADCSRA=0X83;
DDRC=0XFF;
while(1)
{
ADCSRA= ADSC|0X40;
while(ADCSRA&0X10=0);
dataADC=ADCH;
if (dataADC<250)
{
PORTC.0=1;
}
else

{
PORTC.0=0;
}

if (dataADC<200)
{
PORTC.1=1;
}
Else

{
PORTC.1=0;
}

if (dataADC<150)
{
PORTC.2=1;
}
else

{
PORTC.2=0;
}

if (dataADC<100)
{
PORTC.3=1;

56

}
else

{
PORTC.3=0;
}

if (dataADC<20)
{
PORTC.4=1;
}
else

{
PORTC.4=0;
}

ADCSRA.4=1;
}
}
Latihan 1:
Buat Blok Diagram, algoritma, Flowcart dan Program untuk membandingkan dua
buah sensor suhu LM35, sensor 1 (S1) dihubungkan dengan ADC0 dan sensor 2
(S2) dihubungkan dengan ADC7, bila suhu S1> S2 maka Led di Port C akan
menyala semua, bila S1<S2 maka led di Port C akan mati semua, dan bila S1=S2
maka led akan menyala separuh saja.

57

BAB IV
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.
4.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

Blok diagram sederhana dari USART ditunjukkan pada Gambar 4.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.

58

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


Dalam Gambar 4.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
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
59

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 4.1.
Register-register tersebut sebagai berikut:
1. UDR atau USART Data Register

Gambar 4.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 4.2.

2. UCSRA atau USART Control Status Register A,


Nama bit-bit UCSRA ditunjukkan dalam Gambar 4.3.

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


Keterangan bit-bit Register UCSRA adalah sebagai berikut:
-

Bit 7 RXC: USART Receive Complete


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.

60

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
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

61

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 4.4.

Gambar 4.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


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

62

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 4.5.

Gambar 4.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

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

63

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 4.1.
Tabel 4.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 4.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
dan sampel input data, dan clock sinkron (XCK). Untuk pengaturan bit
UCPOL ditunjukkan dalam tabel 4.3

64

Tabel 4.2. Kombinasi UCSZ2 sampai UCSZ0 untuk Pengaturan Ukuran


Karakter (ATMega16,2010;167)

Tabel 4.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

Bit yang digunakan untuk memilih penggunaan register UBRRH atau


UCSRC, harus diberi logika 0 saat digunakan untuk register UBRRH

Bit 14 sampai 12, cadangan


65

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 4.4.
Tabel 4.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

4.2. APLIKASI USART


USART harus diinisialisasi sebelum komunikasi apapun dapat terjadi.
Proses inisialisasi biasanya terdiri dari pengaturan baud rate, pengaturan format
frame dan memungkinkan penggunaan bagian Pemancar (transmitter) atau
Penerima (receiver) yang tergantung pada penggunaan.
Flag atau bit TXC dapat digunakan untuk memeriksa bahwa Transmitter
telah menyelesaikan semua transfer, dan flag atau bit RXC dapat digunakan untuk
memeriksa bahwa tidak ada data yang belum dibaca dalam buffer penerima
(receiver).
Contoh Soal:
Berapa nilai UCSRA, UCSRB, UCSRC, UBRRH dan UBRRL jika frekuensi
osilator kerja ATMega 16 sebesar 11.0592 MHz dengan kecepatan 9600 tanpa

66

kecepatan ganda, format frame data: 8 bit per karakter, tanpa patitas, 1 bit stop,
menggunakan mode Asinkron, dapat menerima dan mengirim secara serial.
Jawab:
-

Pada UCSRA ada dua bit yang diisi yaitu U2X dan MPCM, karena tidak
digandakan kecepatannya dan hanya mode single prosesor maka nilai
UCSRA adalah:

0
-

= 0x00

Pada UCSRB ada tiga bit yang diisi yaitu RXEN, TXEN dan UCSZ2, dari
persoalnya ATMega dapat menerima dan mengirim menggunakan serial
dan 8 bit per karakter maka RXEN = 1, TXEN = 1 dan dengan acuan
Tabel 4.2 maka UCSZ2 = 0 sehingga nilai UCSRB adalah:

0
-

= 0x18

Pada UCSRC semua bit yang diisi, URSEL = 1 karena mengisi UCSRA,
UMSEL = 0 karena menggunakan mode asikron, UPM1 =0 dan UPM0 = 0
karena tidak menggunakan paritas, USBS = 0 karena menggunakan 1 bit
stop, dengan acuan Tabel 4.2 maka UCZS1 = 1 dan UCZS0 = 1 karena
frame data 8 bit per karakter, UCPOL = 0 karena menggunakan mode
asinkron sehingga UCSRC adalah :

1
-

= 0x86

Untuk mendapatkan nilai register UBRRH dan UBRRL, frekuensi


kerja/fosc = 11.0592 MHz, Baud rate = 9600 dan U2X = 0, digunakan
rumus dari tabel 4.4 yaitu:
UBRR = (fosc/(16xbaud))-1 = (11.0592 106/(16x9600)) 1 = 71 maka
nilai UBRRH =0x00 dan UBRRL = 0x47 (71 desimal).
Sehingga hasil keseluruhan adalah:
UCSRA = 0x00
UCSRB = 0x18

67

UCSRC = 0x86
UBRRH = 0x00
UBRRL = 0x47

Contoh Soal 1:
Buat algoritma, flowcart dan program untuk dua buah ATMega 16 yang
berkomunikasi secara Serial seperti Gambar 4.7.
ADC0

7Segmen
Puluhan

PB
TxD
RxD

TxD
RxD

7Segmen
Satuan

LM35

PC
Master

Slave

Gambar 4.7. Telemetri Suhu antara dua MCU ATMega16

Jawab:
Algoritman MCU Master:
1. Inisialisasi USART: frekuensi osilator sebesar 11.0592 MHz dengan
kecepatan 9600 bps tanpa kecepatan ganda, format frame data: 8 bit per
karakter, tanpa patitas, 1 bit stop, menggunakan mode Asinkron, dapat
menerima. Sehingga:
UCSRA = 0x00
UCSRB = 0x10
UCSRC = 0x86
UBRRH = 0x00
UBRRL = 0x47
2. Inisialisasi PB output, PC output
DDRB= 0xff
DDRC=0xff
3.

Tunggu selama RXC = 0

4. Baca UDR simpan di DataRX

68

5. Pilah DataRX menjadi puluhan dan satuan


6. Tampilkan kode seven segmen dari puluhan ke PB dan kode seven segmen
dari satuan ke PC
7. Ulangi ke nomor 3

Algoritma MCU Slave:


1. frekuensi osilator sebesar 11.0592 MHz dengan kecepatan 9600 bps tanpa
kecepatan ganda, format frame data: 8 bit per karakter, tanpa patitas, 1 bit
stop, menggunakan mode Asinkron, dapat mengirim sehingga:
UCSRA = 0x00
UCSRB = 0x08
UCSRC = 0x86
UBRRH = 0x00
UBRRL = 0x47
2. untuk ADC yang digunakan ADC0, VREF = 2,56 Volt atau step size
10mV karena sensivitas LM35 sebesar 10mV/oC, frekuensi ADC sebesar
fosc/16 sehingga :
ADMUX = 0xE0
ADCSRA = 0x84
3. Start ADC dengan memberi nilai 1 pada bit ADSC dalam register
ADCSRA
4. Tunggu selama ADIF = 0
5. baca ADCH dan kirim ke UDR
6. tunggu selama TX=0
7. ulangi langkah 3

Flowcart MCU Master ditunjukkan dalam Gambar 4.8.

69

Gambar 4.8. Flowcart MCU Master


Flowcart MCU Slave ditunjukkan dalam Gambar 4.9.

Gambar 4.9. Flowcart MCU Slave

70

Program MCU Master:


#include <mega16.h>
unsigned char DataRX, Pul, Sat ;
unsigned char Tabel7segmen [10] ={ 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82,
0xF8, 0x80, 0x90}
void main(void)
{
UCSRA = 0x00;

UCSRB = 0x08;

UCSRC = 0x86; UBRRH = 0x00;

UBRRL = 0x47; // inisialisasi USART


DDRB=0xFF;
DDRC = 0xff;
while(1)
{
while(UCSRA&0x80==0); // tunggu selama RXC =0
DataRX= UDR;
Pul = (DataRX %100)/10;

// nilai puluhan di Pul

Sat = DataRX % 10;

// nilai satuan di Sat

PORTB = Tabel7segmen[Pul];

// ambil kode dari array sevensegmen

PORTC = Tabel7segmen [Sat];

// ambil kode dari array sevensegmen

}
}

Program MCU Slave:


#include <mega16.h>
unsigned char dataADC;
unsigned char sevensegmen [10] ={ 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82,
0xF8, 0x80, 0x90}
void main(void)
{
UCSRA = 0x00;

UCSRB = 0x10; UCSRC = 0x86; UBRRH = 0x00;

UBRRL = 0x47; // inisialisasi USART


ADMUX=0xE0;

ADCSRA=0x84; // inisialisasi ADC

71

while(1)
{
ADCSRA= ADSCRA|0x40; // memberikan sinyal Start ADC ADSC =1
while (ADCSRA&0x10==0); // Cek ADIF = 0, tunggu selama =0
UDR=ADCH; // ambil data hasil konversi
ADCSRA=ADCSRA|0x10;
while(UCSRA&0x40==0);
}
}

Contoh Soal 2:
Buat algoritma, flowcart dan program di MCU ATMega16 untuk komunikasi
serial antara PC dan MCU ATMega16, PC sebagai Master, MCU ATMega 16
sebagai Slave dengan skema hubungan antara PC dan MCU ATMega 16
diperlukan converter TTL ke RS 232 seperti yang ditunjukkan dalam Gambar
4.10, sedangkan untuk blok diagram rangkaian ditunjukkan dalam Gambar 4.11.

Gambar 4.10. Skema Konverter TTL ke RS-232


Dengan ketentuan:

- Dengan kecepatan 9600 bps, format frame data: 8 bit per karakter, tanpa
patitas, 1 bit stop, menggunakan mode Asinkron.

72

Bila PC mengirim huruf A maka MCU akan mengambil data suhu LM35
melalui ADC7 dan dikirim ke PC

Bila PC mengirim huruf B maka MCU menjalankan Motor 1 (M1)

Bila PC mengirim huruf C maka MCU menjalankan Motor 2 (M2)

Bila PC mengirim huruf D maka MCU menghentikan Motor 1 (M1)

Bila PC mengirim huruf E maka MCU menghentikan Motor 2 (M2)

TTL ke
RS 232
PC

MCU ATMega16
PC1

M2

PC0

ADC7

M2

LM35

Gambar 4.11. Blok Diagram Telekontrol PC ke MCU ATMega16


Jawab:
Algoritma MCU ATMega16:
1. frekuensi osilator sebesar 11.0592 MHz dengan kecepatan 9600 bps tanpa
kecepatan ganda, format frame data: 8 bit per karakter, tanpa patitas, 1 bit
stop, menggunakan mode Asinkron, dapat mengirim dan menerima
sehingga:

73

UCSRA = 0x00
UCSRB = 0x18
UCSRC = 0x86
UBRRH = 0x00
UBRRL = 0x47
2. untuk ADC yang digunakan ADC7, VREF = 2,56 Volt atau step size
10mV karena sensivitas LM35 sebesar 10mV/oC, frekuensi ADC sebesar
fosc/16 sehingga :
ADMUX = 0xE7
ADCSRA = 0x84
3. untuk PC karena digunakan sebagai pengendali Motor 1 (M1) dan Motor 2
(M2) maka PC output sehingga:
DDRC = 0xff;
4. Tunggu selama RXC = 0
5. Ambil UDR simpan di dataRX
6. Bila dataRX =A maka
o Start ADC/ADSC =1
o Tunggu selama ADIF =0
o Ambil data ADCH kirim ke UDR
o Tunggu selama TXC =0
o ADIF = 1
7. Bila dataRX =B maka PC0 =1, Motor 1 (M1) berjalan
8. Bila dataRX =C maka PC1 =1, Motor 2 (M2) berjalan
9. Bila dataRX =D maka PC0 =0, Motor 1 (M1) berhenti
10. Bila dataRX =D maka PC1 =0, Motor 2 (M2) berhenti
11. Ulangi ke 4

Flowcart untuk MCU ATMega16 ditunjukkan dalam Gambar 4.12.

74

Gambar 4.12. Flowcart untuk MCU ATMega16 Slave


75

Dengan Program sebagai berikut:


#include <mega16.h>
unsigned char dataRX;
void main(void)
{
UCSRA = 0x00; UCSRB = 0x18;

UCSRC = 0x86; UBRRH = 0x00;

UBRRL = 0x47; // init USART


ADMUX=0xE7;

ADCSRA=0x84; // init ADC

DDRC=0xFF; // init PC
while(1)
{
while(UCSRA.7==0); // tunggu selama RXC =0
dataRX=UDR;
if(dataRX==A)
{
ADCSRA= ADSCRA|0x40; // memberikan sinyal Start ADC ADSC =1
while (ADCSRA&0x10==0); // Cek ADIF = 0, tunggu selama =0
UDR=ADCH; // ambil data hasil konversi
while(UCSRA.6==0); // tunggu selama TXC=0
ADCSRA.4=1; // ADIF=1
}
if(dataRX==B)
{
PORTC.0 =1; // M1 ON
}
if(dataRX==C)
{
PORTC.1 =1; // M2 ON
}
if(dataRX==D)
{
PORTC.0 =0; // M1 OFF

76

}
if(dataRX==E)
{
PORTC.1 =0; // M2 OFF
} }}
Latihan 1:
Buat blok diagram. algoritma, flowcart dan program untuk MCU Master bila PC
diganti dengan MCU Master tersebut dengan ketentuan sebagai berikut:
-

PB dihubungkan dengan seven segmen untuk tampilan puluhan

PC dihubungkan dengan seven segmen untuk tampilan satuan

PA0 dihubungkan dengan saklar aktif rendah yang digunakan untuk


memerintahkan MCU Slave untuk mengirimkan data suhu dari LM35

PA1 dihubungkan dengan saklar aktif rendah yang digunakan untuk


memerintahkan MCU Slave untuk menjalankan Motor 1 (M1)

PA2 dihubungkan dengan saklar aktif rendah yang digunakan untuk


memerintah MCU Slave untuk menjalankan Motor 2 (M2)

PA3 dihubungkan dengan saklar aktif rendah yang digunakan untuk


memerintahkan MCU Slave untuk menghentikan Motor 1 (M1)

PA4 dihubungkan dengan saklar aktif rendah yang digunakan untuk


memerintah MCU Slave untuk menghentikan Motor 2 (M2)

Latihan 2:
Buat Sistem telemetri atau telekontrol antara dua MCU Master dan Slave atau
antara PC dan MCU dari permasalahan yang ada di sekitar kita.

77

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.

78

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

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

LED

Light Emitting Diode

Main

Program utama

79

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

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

80

Anda mungkin juga menyukai