praktikum mikrokontroler dasar atmega16-azam
DESCRIPTION
mTRANSCRIPT
1
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
2
HALAMAN PENGESAHAN
MODUL AJAR
1. Judul Modul Ajar : Praktikum Mikrokontroler dan Interfacing
Digunakan Pada Mata Kuliah Semester
: : :
Praktikum Mikrokontroler dan Interfacing (3) tiga
2. Penulis Utama 1. Nama Lengkap 2. NIP 3. Pangkat/golongan 4. Jabatan 5. Program Studi 6. Jurusan
: : : : : : :
Ir. Azam Muzakhim Imammuddin, MT 196705041994031004 IV/a Staf Pengajar Teknik Telekomunikasi Teknik Elektro
3. Jumlah AnggotaTim Penulis a. Nama Anggota 1 b. Nama Anggota 2
: : :
- orang ………………………………..... ……………………………….....
4. Bidang Ilmu : Mikroprosesor 5. Sumber Dana : Modul ajar ini dibiayai dengan dana
DIPA Nomor : 0622/023-04.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. Ir. Azam Muzakhim I., M.T. NIP. 19710108 199903 1 001 NIP. 19670405 199403 1 004 Mengetahui,
Direktur Politeknik Negeri Malang
Ir. Tundung Subali Patma, M.T. NIP. 19590424 1988031 002
3
SURAT PERNYATAAN Yang bertanda tangan di bawah ini:
Nama Lengkap : Ir. Azam Muzakhim Imammuddin, MTnuri, ST. NIP : 196705041994031004 Bidang Ilmu : Mikroprosesor Pangkat/Golongan : IV/aI Jabatan Fungsional : Lektor Kepala Jurusan/Program Studi : Teknik Elektro/Teknik Telekomunikasi Perguruan Tinggi : Politeknik Negeri Malang
Dengan ini menyatakan bahwa:
1. Naskah modul ajar bidang ilmu “Mikroprosesor” dengan judul:
”PRAKTIKUM MIKROKONTROLER DAN INTERFACING”
Belum pernah diterbitkan dan bebas dari plagiarisme.
2. Bersedia menuntaskan naskah modul ajar sesuai waktu yang ditentukan. Demikian surat pernyataan ini dibuat dengan sebenarnya.
Malang, 10 Nopember 2012
Disahkan oleh, Yang membuat, Ketua Jurusan Teknik Elektro Supriatna Adhisuwignjo. S.T., M.T. Ir. Azam Muzakhim I., M.T. NIP. 19710108 199903 1 001 NIP. 19670405 199403 1 004
Mengetahui:
Direktur
Ir. Tundung Subali Patma, M.T. NIP 19590424 198803 1 002
4
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
5
DAFTAR ISI
halaman
KATA PENGANTAR i
DAFTAR ISI ii
DAFTAR TABEL iii
DAFTAR GAMBAR iv
BAB I DASAR MIKROKONTROLER 1
1.1. Pendahuluan 1
1.2. Mikrokontroler ATMega 16 2
1.3. Bahasa C 8
1.3.1. Struktur Bahasa C 8
1.3.2. Indentifiers 9
1.3.3. Konstanta 9
1.3.4. Tipe Data 10
1.3.5. Operator 10
1.3.6. Kontrol Aliran Program 12
BAB II 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 30
BAB III INPUT-OUTPUT 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
6
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
7
DAFTAR TABEL
Halaman
Tabel 1.1. Fungsi Alternatif Pin-Pin Port B 5
Tabel 1.2. Fungsi Alternatif Pin-Pin Port C 6
Tabel 1.3. Fungsi Alternatif Pin-Pin Port D 6
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
8
DAFTAR GAMBAR
Halaman
Gambar 1.1. Blok Diagram ATMega 16 3
Gambar 1.2. Konfigurasi Pin ATMega 16 4
Gambar1.3. Peta Memori Program ATMega 16 7
Gambar 1.4. Peta Memori Data 7
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
9
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
10
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
11
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 unit-
unit yang setara dengan semua komputer.
Salah satu perusahaan yang mengembangkan mikrokontroler adalah Atmel
dengan jenis mikrokontroler AVR (Alf and Vegard’s 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
MCS’51 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
12
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 In-
System Programmable Flash, Memori program dengan kemampuan Baca-Tulis-
Sementara, 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 10-
bit 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
13
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)
14
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 -
PA0)
Port A berfungsi sebagai input-input analog untuk A/D
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
15
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 low-
pass.
- AREF Pin Analog Referensi untuk A/D Konverter
Tabel 1.1. Fungsi Alternatif Pin-Pin Port B (ATMega,2010;58)
Pin Fungsi Alternatif PB7 SCK (SPI Bus Serial Clock) PB6 MISO (SPI Bus Master Input/Slave Output) PB5 MOSI (SPI Bus Master Output/Slave Input) PB4 SS (SPI Slave Select Input) PB3 AIN1 (Analog Comparator Negative Input)
OC0 (Timer/Counter0 Output Compare Match Output) PB2 AIN0 (Analog Comparator Positive Input)
INT2 (Input Eksternal Interupsi 2) PB1 T1 (Timer/Counter1 External Counter Input) PB0 T0 (Timer/Counter0 External Counter Input)
XCK (USART External Clock Input/Output)
16
Tabel 1.2. Fungsi Alternatif Pin-Pin Port C (ATMega16, 2010:61)
Pin Fungsi Alternatif PC7 TOSC2 (Timer Oscillator Pin 2) PC6 TOSC1 (Timer Oscillator Pin 1) PC5 TDI (JTAG Test Data In) PC4 TDO (JTAG Test Data Out) PC3 TMS (JTAG Test Mode Select) PC2 TCK (JTAG Test Clock) PC1 SDA (Two-wire Serial Bus Data Input/Output Line) PC0 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
17
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)
18
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
19
// 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’.
20
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
Bit 1
0,1 (Tipe data bit hanya dapat
digunakan untuk variable
global.)
Char 8 -128 to 127
Unsigned char 8 0 to 255
Signed char 8 -128 to 127
Int 16 -32768 to 32767
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.
21
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
22
A>30
PB=0xFF
Y
T
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.
Gambar 1.5. Flowcart Perintah if
Dan dengan cara penulisannya sebagai berikut:
23
A >30
P B =0xFF
Y
T
P B = 0x00
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.
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
24
A > 3 0 P B = 0 x F FA = P A
Y
T
A > 3 0
Y
T
P B = 0 x f fA = P A
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.
Gambar 1.8. Flowcart Perintah do – while
25
I< 1 0
Y
T
I= 1
P B = d a ta o u tD a ta o u t+ +
i+ +
Dan cara penulisannya sebagai berikut:
do
{_selama_benar_blok_ini_akan_selalu_dieksekusi_;}
while (_uji_benar_atau_salah_);
Seperti contoh:
do
{ PORTB = 0xff; // PB = 0xff
A = PINA;} // 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.
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; // PB = dataout
dataout=dataout+1;} // dataout=dataout+1
26
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 C 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:
27
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
28
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
29
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
30
- 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
31
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
32
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
33
- 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
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
Editornya CodeVisionAVR
34
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
35
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
36
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.
37
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.
38
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
39
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.
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.
1 2
3
40
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.
41
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.
42
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.
43
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.
44
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.
45
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
46
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.
Gambar 2.32. Tampilan Saat Tombol Play ditekan
Tombol Play
47
Tugas.
1. Lakukan langkah-langkah pembuatan program dengan CodeWizard dan
langkah-langkah penggunaan Proteus, dan amati hasilnya.
48
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
49
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 register-
register 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.
50
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.
51
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
PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 Nilai Hex PC Tampilan dot g f e d c b a
1 1 0 0 0 0 0 0 0xC0
1 1 1 1 1 0 0 1 0xF9
1 0 1 0 0 1 0 0 0xA4
1 0 1 1 0 0 0 0 0xB0
1 0 0 1 1 0 0 1 0x99
1 0 0 1 0 0 1 0 0x92
1 0 0 0 0 0 1 0 0x82
1 1 1 1 1 0 0 0 0xF8
1 0 0 0 0 0 0 0 0x80
1 0 0 1 0 0 0 0 0x90
52
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
53
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.
54
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.
55
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 dengan
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.
56
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)
57
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.
58
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
0 0 AREF (pin 32)
0 1 AVCC (pin 30)
1 0 Tidak digunakan
1 1 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)
59
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
0 0 0 0 0 0 ADC0 0 0 0 0 1 1 ADC1
0 0 0 1 0 2 ADC2
0 0 0 1 1 3 ADC3
0 0 1 0 0 4 ADC4
0 0 1 0 1 5 ADC5
0 0 1 1 0 6 ADC6
0 0 1 1 1 7 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)
60
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 bit-
bit 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 ADPS1 ADPS0 Clock ADC 0 0 0 fosc /2 0 0 1 fosc /2 0 1 0 fosc /4 0 1 1 fosc /8 1 0 0 fosc /16 1 0 1 fosc /32 1 1 0 fosc /64 1 1 1 fosc 128
61
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
62
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
63
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.
1
2
64
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
3
4
5
65
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
66
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
67
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
68
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
69
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
70
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
71
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
72
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
73
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
74
- Bit ini digunakan untuk memilih mode operasi komunikasi serial, bila
diberi logika ‘0’ maka mode Asikron dan bila diberi logika ‘1’satu 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
75
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, register-
register 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
76
- 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.
77
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.
1
2
3
78
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.
79
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
80
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
81
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
82
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.
83
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.
84
GLOSARIUM
ADC Analog to Digital Converter
Pengolah Sinyal analog menjadi data Digital
ALU Aritmarik Logik Unit
AT Mikrokontroler buatan Atmel Co.
AVR Alf and Vegard’s 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 metal–oxide–semiconductor
Salah satu jenis bahan pembuatan IC
CodeVision
AVR
Software yang digunakan untuk memprogram Mikrokontroler
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
85
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