MODUL PRAKTIKUM MIKROKONTROLER DAN INTERFACING
Modul ajar ini dibiayai dari dana DIPA Nomor : 0622/023-04.2.01/15/2012 0622/023-04.2.01/15/2012 tanggal tanggal 9 Desember 2011 Politeknik Negeri Malang
Oleh : Ir. Azam Muzakhim Imammuddin, MT NIP. 196705041994031004 196705041994031004
POLITEKNIK NEGERI MALANG 2012
1
HALAMAN PENGESAHAN MODUL AJAR
1.
2.
3.
4. 5.
Judul Modul Ajar
:
Digunakan Pada Mata Kuliah
: : : : : : : : : : : : : : :
Semester Penulis Utama 1. Nama Lengkap 2. NIP 3. Pangkat/golongan 4. Jabatan 5. Program Studi 6. Jurusan Jumlah AnggotaTim Penulis a. Nama Anggota 1 b. Nama Anggota 2 Bidang Ilmu Sumber Dana
Praktikum Mikrokontroler dan Interfacing Praktikum Mikrokontroler dan Interfacing (3) tiga Ir. Azam Muzakhim Imammuddin, MT 196705041994031004 IV/a Staf Pengajar Teknik Telekomunikasi Teknik Elektro orang ………………………………..... ………………………………..... Mikroprosesor Modul ajar ini dibiayai dengan dana DIPA Nomor : 0622/02304.2.01/15/2012 tanggal tanggal 9 Desember 2011 Politeknik Negeri Malang Malang, 10 Nopember 2012
Menyetujui, Ketua Jurusan Teknik Elektro
Penulis Utama,
Supriatna Adhisuwignjo. S.T., M.T. NIP. 19710108 199903 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 1988031 002
2
HALAMAN PENGESAHAN MODUL AJAR
1.
2.
3.
4. 5.
Judul Modul Ajar
:
Digunakan Pada Mata Kuliah
: : : : : : : : : : : : : : :
Semester Penulis Utama 1. Nama Lengkap 2. NIP 3. Pangkat/golongan 4. Jabatan 5. Program Studi 6. Jurusan Jumlah AnggotaTim Penulis a. Nama Anggota 1 b. Nama Anggota 2 Bidang Ilmu Sumber Dana
Praktikum Mikrokontroler dan Interfacing Praktikum Mikrokontroler dan Interfacing (3) tiga Ir. Azam Muzakhim Imammuddin, MT 196705041994031004 IV/a Staf Pengajar Teknik Telekomunikasi Teknik Elektro orang ………………………………..... ………………………………..... Mikroprosesor Modul ajar ini dibiayai dengan dana DIPA Nomor : 0622/02304.2.01/15/2012 tanggal tanggal 9 Desember 2011 Politeknik Negeri Malang Malang, 10 Nopember 2012
Menyetujui, Ketua Jurusan Teknik Elektro
Penulis Utama,
Supriatna Adhisuwignjo. S.T., M.T. NIP. 19710108 199903 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 1988031 002
2
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, MT nuri, ST. 196705041994031004 196705041994031004 Mikroprosesor IV/aI IV/aI Lektor Lektor Kepala Teknik Elektro/Teknik Telekomunikasi Politeknik Negeri Malang
Dengan ini menyatakan bahwa: 1.
Naskah modul ajar bidang ilmu “Mikroprosesor” “Mikroprosesor” dengan judul: ”PRAKTIKUM MIKROKONTROLER DAN INTERFACING”
2.
Belum pernah diterbitkan dan bebas dari plagiarisme. Bersedia menuntaskan naskah modul ajar sesuai waktu yang ditentukan. ditentukan.
Demikian surat pernyataan ini dibuat dengan sebenarnya. Malang, 10 Nopember 2012 Disahkan Disah kan oleh, Ketua Jurusan Teknik Elektro
Yang membuat, membu at,
Supriatna Adhisuwignjo. S.T., M.T. NIP. 19710108 199903 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
3
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 Telekomunikasi Politeknik Po liteknik Negeri Malang Dan semoga hal ini dapat b ermanfaat ermanfaat bagi kita semu a
Malang, 10 Nopember 2012
Penulis
4
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
BAB II
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
CODEVISION AVR DAN PROTEUS
16
2.1. Codevision AVR
16
2.1.1. Tata Cara Menggunakan CodeWizard
18
2.1.2. Penulisan Program Bahasa C di CodeVision AVR
23
2.2. Proteus
29
2.2.1. Langkah-Langkah Menggunakan Proteus BAB III INPUT-OUTPUT
30 38
3.1.
Teori Dasar Input-Output
38
3.2.
Tampilan Seven Segmen
40
3.3. Cara Menggunakan Progisp AVR Programmer
42
3.4. Percobaan I Input Output
44
3.5. Percobaan II Input Output
45
BAB IV ANALOG TO DIGITAL CONVERTER (ADC)
46
4.1. ADC Dalam ATMega 16
46
4.2. LM35
51
5
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
6
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
7
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
8
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 u ntuk 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
9
halaman Gambar 4.6. Rangkaian Sensor Suhu dalam Celcius
51
Gambar 4.7. Salah Satu Bentuk Fisik LM35
51
Gambar 4.8. Karakteristik dan Simbol LDR
52
Gambar 4.9. LDR
52
Gambar 4.10. ADC dengan CodeWizard
53
Gambar 4.11. Lanjutan Inisialisasi ADC dengan CodeWizard
54
Gambar 4.12. Fungsi adc_read(adc_input)
54
Gambar 4.13. Cara Menggunakan fungsi read_adc()
55
Gambar 3.14. Rangkain ATMega16 untuk percobaan ADC
55
Gambar 4.15. Percobaan Menggunakan LDR
56
Gambar 4.16. Setting Volt Referensi sebesar 2,56 Volt
57
Gambar 5.1. Blok Diagram USART pada ATMega 16
59
Gambar 5.2. Register UDR
60
Gambar 5.3. Bit-Bit Register UCSRA
60
Gambar 5.4. Bit-bit Register UCSRB
62
Gambar 5.5. Bit-bit Register UCSRC
63
Gambar 4.6. Bit-bit Register UBRRH dan UBRRL
65
Gambar 5.7. Inisialisasi USART dengan Code Wizard
67
Gambar 5.8. Inisialisasi USART Lanjutan
67
Gambar 5.9. Fungsi interrput [USART_RXC] dan getchar(void)
68
Gambar 5.10. Letak Penulisan Program Terima Data Serial
69
Gambar 5.11. Letak Program Kirim Data Serial
69
Gambar 5.12, Rangkaian Percobaan USART ATMega16
70
Gambar 5.13. Rangkaian Percobaan II USART ATMega16
72
DAFTAR PUSTAKA
73
10
BAB I DASAR PEMROGRAMAN MIKROKONTROLER
Capaian Pembelajaran:
Setelah membaca dan mengkaji bab ini, pembaca akan mampu:
Menjelaskan tentang Mikrokontroler ATMega16 dan fasilitas-fasilitas yang dimiliknya;
Menjelaskan stuktur dasar bahasa pemrograman C untuk pemrograman ATMega16
1.1.
Pendahuluan
Mikrokontroler adalah merupakan suatu chip tunggal yang berisi mikroprosesor dan memori program yang biasanya bersifat Read Only Memory (ROM), memori serbaguna atau biasa disebut Random Access Memory (RAM), Unit Input-Output , Unit Timer/Counter dan beberapa fasilitas yang lain seperti Analog to Digital Converter (ADC), Electrical Eresable Programmable ROM (EEPROM) dan lain-lain. Mikrokontroler dapat juga dianggap mikrokomputer, hal ini karena hanya dengan satu chip/ Integrated Circuit (IC) sudah memiliki unitunit yang setara dengan semua komputer. Salah satu perusahaan yang mengembangkan mikrokontroler adalah Atmel dengan jenis mikrokontroler AVR (Alf and 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
11
yang memiliki fasilitas yang lengkap adalah keluarga ATMega. Salah satu yang termasuk dalam keluarga ATMega adalah ATMega 16.
1.2.
Mikrokontroler ATMega 16
ATMega 16 adalah sebuah mikrokontroler CMOS 8 bit yang berdaya rendah yang berbasiskan arsitektur pengembangan RISC dengan satu instruksi dikerjakan dalam satu clock dengan mencapai kecepatan throughputs mendekati 1 MIPS per MHz yang dapat membuat perancangan system yang lebih mengoptimalkan konsumsi daya dibandingkan dengan kecepatan proses. ATMega 16 merupakan prosessor AVR yang menggabungkan instruksi set yang banyak dengan 32 register umum. Yang ke semua 32 register secara langsung
dihubungkan
dengan
Aritmatika
Logika
Unit
(ALU),
yang
memungkinkan dua buah register yang independen untuk diakses dalam satu instruksi dieksekusi dalam satu siklus clock. Yang dihasilkan dari arsitektur AVR adalah kode yang lebih efisien dengan capaian throughputs hingga sepuluh kali lebih cepat dari konvensional CISC mikrokontroler. ATmega16 ini menyediakan beberapa fitur sebagai berikut: 16 Kbyte InSystem Programmable Flash, Memori program dengan kemampuan Baca-TulisSementara, 512 byte EEPROM , 1 Kbyte SRAM , 32 jalur I/O, 32 register kerja, antarmuka JTAG untuk Boundaryscan, dukungan dan pemrograman On-chip Debugging , tiga Timer / Counter fleksibel dengan mode perbandingan, Interupsi Internal dan Eksternal, sebuah programmable serial USART , Dua-kawat Serial Interface
berorientasi byte, serial USART (Universal Synchronous and
Asynchronous serial Receiver and Transmitter) yang dapat diprogram,8 kanal 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
12
program boot yang dapat menggunakan interface untuk men-download aplikasi program di Flash memori Aplikasi. Software di bagian flash Boot akan terus berjalan sedangkan bagian flash Aplikasi diperbarui, sehingga menyediakan proses Baca - Tulis saat mikrokontroler beroperasi. Oleh karena menggabungkan sebuah CPU RISC 8-bit dengan In-System Self Programmable Flash pada sebuah chip monolitik, sehingga Atmel ATmega16 adalah mikrokontroler kuat yang sangat fleksibel, hemat biaya dan solusi untuk banyak aplikasi control. Gambar 1.1 menunjukkan Blok Diagram dari ATMega 16. Sedangkan untuk konfigurasi Pin ATMega 16 ditunjukkan dalam Gambar 1.2.
Gambar 1.1. Blok Diagram ATMega 16 (ATMega,20120;3)
13
Gambar 1.2. Konfigurasi Pin ATMega 16(ATMega16,2010;2) Dengan Penjelasan Pin Gambar 1.2. sebagai berikut: - VCC
Sumber Catu Daya Digital
- GND
Ground
- Port A (PA7 -
Port A berfungsi sebagai input-input analog untuk A/D
PA0)
Converter. Port A juga berfungsi sebagai 8-bit bidirectional port I / O, jika A/D Converter tidak digunakan. pin port juga menyediakan internal pull-up resistor yang dipilih untuk setiap bitnya.
- Port B (PB7 – PB0)
Port B adalah 8-bit bidirectional I /O port dengan internal pull-up resistor (dipilih untuk setiap bit). Masing-masing Pin Port B juga berfungsi seperti yang
14
ditunjukkan dalam Tabel 1.1 - Port C (PC7 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 Por t B (ATMega,2010;58) Pin
Fungsi Alternatif
PB7
SCK (SPI Bus Serial Clock )
PB6 PB5 PB4 PB3
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)
PB2 PB1 PB0
T1 (Timer/Counter1 External Counter Input ) T0 (Timer/Counter0 External Counter Input ) XCK (USART External Clock Input/Output )
15
Tabel 1.2. Fungsi Alternatif Pin-Pin Por t C (ATMega16, 2010:61) Pin PC7
Fungsi Alternatif TOSC2 (Timer Oscillator Pin 2)
PC6 PC5 PC4 PC3
TOSC1 (Timer Oscillator Pin 1) TDI (JTAG Test Data In) TDO (JTAG Test Data Out ) TMS (JTAG Test Mode Select )
PC2
TCK (JTAG Test Clock ) SDA (Two-wire Serial Bus Data Input/Output Line ) SCL (Two-wire Serial Bus Clock Line )
PC1 PC0
Tabel 1.3. Fungsi Alternatif Pin-Pin Po rt D (ATMega16, 2010;63) Pin
Fungsi Alternatif
PD7
OC2 (Timer/Counter2 Output Compare Match Output )
PD6
ICP1 (Timer/Counter1 Input Capture Pin)
PD5
OC1A (Timer/Counter1 Output Compare A Match Output )
PD4
OC1B (Timer/Counter1 Output Compare B Match Output )
PD3
INT1 ( External Interrupt 1 Input )
PD2
INT0 ( External Interrupt 0 Input )
PD1
TXD (USART Output Pin)
PD0
RXD (USART Input Pin)
ATMega 16 memiliki dua memori utama yaitu Memori Program dan Memori Data dengan tambahan juga memiliki memori EEPROM untuk tempat penyimpanan data. ATMega 16 memiliki 16 Kbyte Flash memori untuk penyimpanan program yang dibagi menjadi dua bagian yaitu bagian Boot program dan bagian aplikasi program. Flash memori program memiliki daya tahan sedikitnya 10.000 proses tulis atau hapus. Dan untuk menjangkau Flash memori program ATMega 16 memiliki Register Program Counter ( PC ) selebar 13 bit. Yang menjangkau 8K lokasi memori program. Sedangkan pada bagiah Boot program dilengkapi dengan
16
Boot lock bits yang digunakan untuk melindungi software yang telah ada di dalam ATMega 16. Gambar 1.3 menunjukkan peta memori program dalam ATMega 16.
Gambar.1.3. Peta Memori Program ATMega 16(ATMega16,2010;16) ATMega 16 Memiliki Memori Data yang terdiri dari 1120 lokasi alamat dari Register File, I/O Memori dan data SRAM internal. 96 lokasi alamat pertama digunakan oleh Regiter File dan I/O Memori dan 1024 lokasi alamat digunakan untuk data SRAM Internal. Dan 96 lokasi alamat Register File dan I/O Memori terdiri dari 32 register umum untuk kerja dan 64 Register yang digunakan untuk I/O. Dan gambar 1.4. menunjukkan Peta Memori Data. Dan sebagai tambahan terdapat 512data memori EEPROM di dalam ATMega 16 byte. Yang diorganisasi secara terpisah, yang setiap byte dapat dibaca dan ditulis. EEPROM memiliki ketahanan sedikitnya 100.000 siklus tulis atau menghapus.
Gambar 1.4. Peta Memori Data(ATMega16,2010;17)
17
1.3.
Bahasa C
Pada saat ini sudah dikembangkan bahwa untuk membuat pemrograman mikrokontroler menggunakan bahasa level tinggi bukan menggunakan bahasa assembly maupun bahasa mesin. Salah satu bahasa level tinggi yang banyak digunakan adalah bahasa C. Ada beberapa software pemrograman mikrokontroler yang menggunakan bahasa C sebagai bahasa pemrogramannya seperti Codevision AVR dan WinAVR.
1.3.1. Struktur Bahasa C
Untuk dapat memahami bagaimana suatu program ditulis, maka struktur dari program harus dimengerti terlebih dahulu, atau sebagai pedoman penulis program ( programmer ) bagaimana seharusnya program tersebut ditulis. Dalam penulisan program dengan menggunakan bahasa C maka harus mengetahui struktur dari program dengan menggunakan bahasa C. Pro gram 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 protot ype 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
Sebagai Contoh penulisan program untuk menyalakan LED di PORTB
// deklarasi fungsi-fungsi ekternal #include // mengambil fungsi-fungsi untuk ATMega16 #include // mengambil fungsi-fungsi untuk proses tunda
// deklarasi variable global unsigned char dataout; // deklarasi dataout dalam byte
18
// penulisan program utama void main(void) { // Port B initialization Port B sebagai output PORTB=0x00; DDRB=0xFF; dataout=00; // Penulisan program ada di dalam while (1 ) while(1) { PORTB=dataout;
// PB = dataout
delay_ms(100);
// tunda selama 100 ms
dataout=dataout+1;
// dataout ditambah 1;
} }
1.3.2. Indentifiers
Dalam pemrogramaman bahasa C sangat perlu sekali untuk diketahui dalam pemberiah nama atau Identifier yang diberikan pada variabel, fungsi, label atau objek lain. Dalam pemberian nama dapat mengandung huruf yaitu besar A sampai Z dan huruf kecil a sampai z dan angka 0 sampai 9 dan karakter ( _ ). Nama yang digunakan bersifat Case sensitive yaitu membedakan antara huruf besar dan huruf kecil. Dan untuk nama dapat mencapai maksimal 32 karakter. 1.3.3. Konstanta
Dalam pemrogramam bahasa C ada beberapa cara dalam penulisan konstanta yaitu sebagai berikut: Penulisan untuk Integer dan long integer ditulis dalam bentuk decimal (123), bila ditulis dalam bentuk biner maka harus didahului 0b seperti 0b10101001, dan jika ditulis dalam bentuk hexadecimal maka harus didahului 0x seperti 0xA9, sedangkan untuk konstanta karakter harus dilingkungi oleh tanda kutip seperti ‘a’.
19
1.3.4. Tipe Data
Untuk tipe tipe data yang dimiliki oleh pemrograman bahasa C ditunjukkan dalam Tabel 1.4 berikut ini.
Tabel 1.4. Tipe Data dalam Bahasa C (Andrianto,2008;21) Tipe
Ukuran ( Bit )
Range
0,1 (Tipe data bit hanya dapat Bit
1
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.
20
Tabel 1.5. Daftar Operator Kondisi (Andrianto,2008;22) Operator Kondisi
Keterangan
<
Lebih kecil
<=
Lebih kecil atau sama dengan
>
Lebih besar
>=
Lebih besar atau sama dengan
==
Sama dengan
!=
Tidak sama dengan Tabel 1.6. Daftar Operator Aritmatika(Andrianto,2008;22) Operator Aritmatika
Keterangan
+
Penjumlahan
-
Pengurangan
*
Perkalian
/
Pembagian
%
Sisa Bagi (modulus)
Tabel 1.7. Daftar Operator Logika(Andrianto,2008;22) Operator Logika
! &&
Keterangan Boolean NOT Boolean AND
||
Boolean OR Tabel 1.8. Daftar Operator Bitwise(Andrianto,2008;22) Operator Bitwise
Keterangan
Komplemen Bitwise &
Bitwise NOT
|
Bitwise OR
^
Bitwise Exclusive OR
>>
Right Shift
<<
Left Shift
21
Tabel 1.9. Daftar Operator Assignment (Andrianto,2008;23) Opereator Assignment
Keterangan
=
Untuk memasukkan nilai
+=
Untuk menambah nilai dari keadaan semula
-=
Untuk mengurangi nilai dari keadaan semula
*=
Untuk mengalikan nilai dari keadaan semula
/=
Untuk melakukan pembagian terhadap bilangan semula
%=
Untuk memasukkan nilai sisa bagi dari pembagian bilangan semula
<< =
Untuk memasukkan shift left
>> =
Untuk memasukkan shift right
&=
Untuk memasukkan bitwise AND
^=
Untuk memasukkan bitwise XOR
\=
Untuk memasukkan bitwise OR
1.3.6. Kontrol Aliran Program
Dalam pemrograman ada beberapa perintah yang dapat digunakan untuk mengendalikan aliran program antara lain: a. Perintah percabangan if (…){…} digunakan untuk mengecek satu kondisi untuk satu blok jawaban dengan flowcart ditunjukkan dalam Gambar 1.5.
Y A>30
PB=0xFF
T
Gambar 1.5. Flowcart Perintah if Dan dengan cara penulisannya sebagai berikut:
22
if(_uji_benar_atau_salah_) {_eksekusi_blok_ini_jika_benar_; } ; seperti contoh: if (A>30) // jika A lebih besar 30 maka PB = 0xff; { PORTB = 0xff;}
b. Perintah percabangan if(…){…} else {…} digunakan untuk mengecek satu kondisi untuk dua blok jawaban dengan flowcart ditunjukkan dalam Gambar 1.6.
Y
A>30 T PB=0x00
PB=0xFF
Gambar 1.6. Flowcart Perintah if – else Dan cara penulisannya sebagai berikut: if(_uji_benar_atau_salah_) {_eksekusi_blok_ini_jika_benar_; } else {_eksekusi_blok_ini_jika_salah_; } ; seperti contoh: if (A > 30)
// Jika A lebih besar 30
{PORTB=0xff} // maka PB = 0xff; else {PORTB=0x00;} // jika tidak PB=0x00 c. Perintah while ( … ) { … } digunakan untuk perulangan jika kondisi yang diuji bernilai benar dengan flowcart ditunjukkan dalam Gambar 1.7
23
Y P B = 0 x F F
A > 3 0
A = P A
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 A
= 0 =
P
x f f
A
Y A
>
3 0
T
Gambar 1.8. Flowcart Perintah do – while
24
Dan cara penulisannya sebagai berikut: do {_selama_benar_blok_ini_akan_selalu_dieksekusi_;} while (_uji_benar_atau_salah_); Seperti contoh: do { PORTB = 0xff; A = PINA;}
// PB = 0xff // A= PORTA
while (A > 30); // selama A > 30 kerjakan blok diatasnya f. Perintah for (…. ; …. ; ….) {…} digunakan untuk perulangan dengan kondisi dan syarat yang telah ditentukan. Biasanya digunakan perulangan dengan jumlah tertentu dengan flowcart ditunjukkan dalam Gambar 1.9.
I= 1
Y PB=dataout I<10
Dataout++ i+ +
T
Gambar 1.9. Flowcart Perintah for Dan cara penulisannya sebagai berikut : for (_kondisi _awal ; _uji_kondisi_ ; _aksi_jika_benar) {_eksekusi_blok_ini_jika_benar_ ;} ; Seperti contoh: for (i=1;i<10;i++) // mengulangi blok dibawah ini sebanyak 9 kali { PORTB=dataout; dataout=dataout+1;}
// PB = dataout // dataout=dataout+1
25
BAB II CODEVISION AVR DAN PROTEUS Capaian Pembelajaran:
Setelah membaca dan mengkaji bab ini, pembaca akan mampu:
Menjalankan
dan
menggunakan
Program
CodeVisionAVR
untuk
pemrograman mikrokontroler ATMega16.
Menjalankan dan menggunakan Program Proteus untuk simulasi pemograman ATMega16.
2.3.
Codevision AVR
Salah
satu
cross-compiler
CodeVisionAVR yang memiliki
C
yang
banyak
digunakan
adalah
Integrated Development Environtment (IDE)
dan Automatic Program Generator yang didesain untuk mikrokontroler buatan Atmel seri AVR. CodeVisionAVR mampu menerjemahkan hampir semua perintah dari bahasa ANSI C yang sesuai dengan arsitektur dari AVR dengan tambahan beberapa fitur untuk mengambil kelebihan khusus dari arsitektur AVR dan kebutuhan pada sistem embedded dan CodeVisionAVR merupakan hak cipta dari Pavel Haiduc, HP InfoTech s.r.l. CodeVisionAVR setelah kompilasi menghasilkan File object COFF yang dapat digunakan untuk keperluan debugging pada tingkatan C, dengan pengamatan variabel, menggunakan debugger Atmel AVR Studio.
Sedangkan
untuk IDE dalam CodeVisionAVR mempunyai fasilitas internal berupa software AVR Chip In-System Programmer yang memungkinkan untuk melakukan transfer program
kedalam
chip
mikrokontroler
setelah
sukses
melakukan
kompilasi/asembli secara otomatis. Software In-System Programmer dapat bekerja
dengan
Atmel
STK500/AVRISP/AVRProg,
Kanda
Systems
STK200+/300, Dontronics DT006, Vogel Elektronik VTEC-ISP, Futurlec JRAVR dan MicroTronics ATCPU/Mega2000 programmers/development boards. CoceVisionAVR juga dilengkapi dengan fasilitas sebuah teminal yang menggunakan komunikasi serial untuk keperluan debugging sistem embedded. CodeVisionAVR selain memiliki library standar C, juga mempunyai library tertentu seperti untuk: 26
Modul LCD alphanumeric
Bus I2C dari Philips
Sensor Suhu LM75 dari National Semiconductor
Real-Time Clock: PCF8563, PCF8583 dari Philips, DS1302 dan DS1307 dari
Maxim/Dallas Semiconductor
Protokol 1-Wire dari Maxim/Dallas Semiconductor
Sensor Suhu DS1820, DS18S20, dan DS18B20 dari Maxim/Dallas Semiconductor
Termometer/Termostat DS1621 dari Maxim/Dallas Semiconductor
EEPROM DS2430 dan DS2433 dari Maxim/Dallas Semiconductor
SPI
Power Management
Delay
Konversi ke Kode Gray Kelebihan dari CodeVisionAVR adalah memiliki Automatic Program
Generator bernama CodeWizardAVR, yang akan membantu mempercepat dalam menulis program dengan pemberian menu-menu sebagai berikut:
Set-up akses memori eksternal
Identifikasi sumber reset untuk chip
Inisialisasi port input/output
Inisialisasi interupsi eksternal
Inisialisasi Timer/Counter
Inisialisasi Watchdog-Timer
Inisialisasi UART (USART) dan komunikasi serial berbasis bu ffer yang digerakkan oleh interupsi
Inisialisasi Pembanding Analog
Inisialisasi ADC
Inisialisasi Antarmuka SPI
Inisialisasi Antarmuka Two-Wire
Inisialisasi Antarmuka CAN
27
Inisialisasi Bus I2C, Sensor Suhu LM75, T hermometer/Thermostat DS1621 dan
Real-Time Clock PCF8563, PCF8583, DS1302, d an DS1307
Inisialisasi Bus 1-Wire dan Sensor Su hu DS1820, DS18S20
Inisialisasi modul LCD Untuk
mendapatkan
file
program
dapat
diunduh
di
situs
hpinfotech.ro/html/cvavr .htm dan akan mendapatkan file evaluasi program yang yang gratis.
2.3.1. Tata Cara Menggunakan CodeWizard
Untuk pembuatan program dengan menggunakan CodeWizard dalam CodeVisionAVR yang harus dilakukan sebagai berikut: -
Jalankan program CodeVisionAVR sehingga muncul seperti Gambar 2.1
Gambar 2.1. Tampilan Awal Program CodeVisionAVR -
Setelah itu pilih File >> New seperti Gambar 2.2
28
Gambar 2.2. Langkah Awal Pembuatan Program -
Kemudian muncul tampilan seperti Gambar 2.3 dan pilih Project d aan tekan OK
Gambar 2.3. Tampilan Setelah Pilihan File >> New -
Dan akan muncul tampilan seperti Gambar 2.4 dan pilih Yes untuk melanjutkan
Gambar 2.4. Tampilan Setelah Tombol Ok dipilih
29
-
Setelah itu muncul tampilan seperti Gambar 2.5 dan pilih OK untuk melanjutkan karena yang akan digunakan adalah ATM ega16
Gambar 2.5. Tampilan Berikutnya Setelah Pilihan Yes -
Setelah itu muncul tampilan seperti Gambar 2.6 yang merupakan menu CodeWizard dan ubah pada bagian chip dengan ATMega16. Dan clock = 8 MHz.
Gambar 2.6. Menu Pertama CodeWizard untuk Pemilihan Mikrokontroler -
Setelah itu pilih atau klik Port untuk memberikan inisialisasi pada Port yang diinginkan, buat Port A input, Port B input, Port C output dan Port D output dengan menge-klik data direction B0 sampai B7 (in = input dan out = output) seperti Gambar 2.7
30
Gambar 2.7. Menu Port pada CodeWizard -
Untuk membuat programnya pilih menu Program >> Generate Save and Exit seperti Gambar 2.8
Gambar 2.8. Proses Pembuatan Program -
Setelah itu muncul tampilan seperti Gambar 2.9 d an masukan nama file dari program yang akan dibuat, tulis percobaan1 dan tekan Save
31
Gambar 2.9. Proses Pemberian Nama file .c -
Setelah itu akan muncul tampilan seperti Gambar 2.10 dan isi File name dengan “percobaan1” dan tekan Save
Gambar 2.10. Proses pemberian nama file Project -
Setelah itu akan muncul tampilan seperti Gambar 2.11 dan isi File name dengan “percobaan1” dan tekan Save
Gambar 2.11. Tampilan untuk Penyimpanan file .cwp 32
-
Maka setelah itu akan muncul tampilan seperti Gambar 2.12, dengan tampilan seperti ini maka program CodeVisionAVR siap untuk digunakan membuat program untuk mikrokontroler ATMega16
Editornya CodeVisionAVR
Gambar 2.12. Tampilan Awal CodeVisionAVR Setelah Menggunakan CodeWizard -
Setelah itu program dapat dituliskan dalam editor CodeVisioanAVR
2.3.2. Penulisan Program Bahasa C di CodeVision AVR
Struktur dalam penulisan bahasa C secara umum dapat disusun dalam empat blok yaitu:
Header file
Deklarasi konstanta global
Deklarasi procedure dan atau fungsi.
Fungsi Utama.
a.
Header Header file yaitu file yang berisi deklarasi fungsi dan definisi konstanta.
Beberapa file header sudah disediakan oleh CodeVisionAVR. File-file ini
33
mempunyai ciri bereksistensi .h. file-file header ini biasanya dipanggil menggunakan fungsi include seperti berikut: #include // memanggil deklarasi fungsi dan difinisi konstanta untuk mikrokontroler ATMega16. Header file ini akan selalu ada karena mikrokontroler yang digunakan adalah mikrokontroler ATMega16 #include // 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 m enuliskan 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<
// Port B initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRB=(0<
34
PORTB=(0<
// Port C initialization // Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out DDRC=(1<
// Port D initialization // Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out DDRD=(1<
Gambar 2.13. Tampilan Header file dan Deklarasi variabel Global
35
c.
Deklarasi procedure dan fungsi
Sedangkan untuk deklarasi procedure dan fungsi biasa akan dibuatkan oleh CodevisionAVR untuk berberapa fungsi dan d apat juga dibuat oleh programmer d.
Fungsi utama
Untuk fungsi utama dalam CodeVision ditempatkan pada bagian bawah program dalam instruksi while (1) dan diberi tanda dengan tulisan // Place your code here seperti berikut. Gambar 2.14 menunjukkan tampilan penulisan program utama while (1) { // Place your code here datain = PINA; PORTC = datain;
}
Gambar 2.14. Tampilan Penulisan Program Utama Setelah program utama dituliskan maka langkah berikutnya adalah kompilasi program dengan menekan F9 atau klik menu Project >> Compile seperti Gambar 2.15 dan hasilnya akan ditunjukkan seperti Gambar 2.16 yang memberikan informasi hasil proses kompilasi.
36
Gambar 2.15. Cara melakuk m elakukan an Kompilasi Pro gram
Gambar 2.16. Informasi Hasil Kompilasi Setelah proses kompilasi berhasil dan tanpa adanya kesalahan maka dilakukan proses “build” program untuk menghasilkan file hex atau coff. Proses ini dapat dilakukan dengan menekan tombol Shift-F9 bersama-sama ataua mengklik menu Project >> Build seperti Gambar 2.17 dan informasi hasil proses “build” akan ditampilkan seperti Gambar 2.18. 37
Gambar 2.17. Cara Melakukan M elakukan “Build” Program
Gambar 2.18. Tampilan Infromasi setelah Proses “Build” Program Setelah itu maka program dapat ditranferkan ke dalam mikrokontroler ATMega16. Dan ada baiknya untuk lebih menyakinkan apakah program bekerja
38
sesuai dengan rencana, maka dapat disimulasikan dengan menggunakan program Proteus.
2.4.
Proteus
Proteus ISIS merupakan salah satu program yang dapat digunakan untuk mensimulasikan program mikrokontroler dan rangkaian elektronika yang lainnya. Dan beberapa toolbar yang sering digunakan dalam melakukan simulasi beserta fungsinya ditunjukkan dalam Gambar 2.19.
1 2
3
Gambar 2.19. Beberapa ToolBar Program Proteus Keterangan dan fungsi Gambar 2.19 adalah sebagai berikut: 1.
Selection Mode, yang digunakan untuk mengaktifkan kursor
2.
Component Mode, yang digunakan untuk memunculkan part atau komponen yang akan digunakan. Untuk memilih atau memunculkan komponen tekan tombol P dan akan muncul tampilan seperti Gambar 2.20.
39
Gambar 2.20. Tampilan setelah tombol P di-klik 3.
Terminals Mode, yang digunakan untuk memunculkan terminal, seperti Power, Ground, Input, Output dan Bidir (Bidirectional), seperti Gambar 2.21.
Gambar 2.21. Menu Terminals Mode 2.4.1. Langkah-Langkah Menggunakan Proteus
Langkah-langkah menggunakan Proteus ISIS untuk simulasi mikrokontroler ATMega16 adalah sebagai berikut: 1.
Buka Program Proteus ISIS
2.
Pilih Component Mode dan klik P sehingga muncul tampilan seperti Gambar 2.20.
3.
Masukkan keywords: Atmega16 sehingga akan muncul tampilan seperti Gambar 2.21 dan klik OK.
40
Gambar 2.21. Tampilan saat memasukkan Ke yword ATMega16 4.
Taruh ATMega16 di dalam sheet seperti d itunjukkan dalam Gambar 2.22.
Gambar 2.22. Meletakkan ATMega di dalam Sheet 5.
Ambil komponen LED seperti langkah 3 dan hasilnya seperti ditunjukkan dalam Gambar 2.23.
41
Gambar 2.23. Tampilan saat Pengambilan Komponen LED-YELLOW 6.
Ambil komponen Resistor seperti langkah 3 dan hasilnya seperti ditunjukkan dalam Gambar 2.24.
Gambar 2.24. Tampilan Saat pengambilan Resistor 7.
Dan susun seperti rangkaian dalam Gambar 2.25.
42
Gambar 2.25. Rangkaian Mikrokontroler ATMega16, Resistor dan LED 8.
Tambahkan komponen Dip switch 8 seperti ditunjukkan dalam Gambar 2.26.
Gambar 2.26. Tampilan saat mengambil DIPSW-8 9.
Tambahkan komponen Resistor Pack (rpak) seperti ditunjukkan dalam Gambar 2.27.
43
Gambar 2.27. Tampilan Komponen Mode untuk Resistor Pack 10.
Hubungkan dengan komponen lainnya sehingga seperti yang ditunjukkan dalam Gambar 2.28.
Gambar 2.28. Rangkaian Percobaan Input Output 11.
Setelah itu arahkan kursor ke mikrokontroler ATMega16, kemudian klik mousenya sehingga muncul tampilan seperti yang ditunjukkan Gambar 2.29.
44
Gambar 2.29. Tampilan Setelah ATMega 16 di-klik 12.
Setelah itu klik icon file open seperti yang ditunjukkan tanda panah dalam Gambar 2.29 sehingga muncul tampilan seperti Gambar 2.30 dan ambil file percobaan1.hex untuk diunduhkan ke ATMega16.
Gambar 2.30. Tampilan Saat Mengambil File hex untuk di unduhkan ke ATMega16
45
13.
Dan ubah juga untuk CKSEL Fuse menjadi IntRC 8 MHz seperti yang ditunjukkan Gambar 2.31, kemudian tekan tombol OK
Gambar 2.31. Setting Clock ATMega 16 14.
Setelah itu tekan tombol Play yang terletak pada sebelah kiri bawah dari sheet seperti yang ditunjukkan dalam Gambar 2.32.
Tombol Pla
Gambar 2.32. Tampilan Saat Tombol Play ditekan
46
Tugas. 1. Lakukan langkah-langkah pembuatan program dengan CodeWizard dan langkah-langkah penggunaan Proteus, dan amati hasilnya.
47
BAB III INPUT – OUTPUT Capaian Pembelajaran:
Setelah membaca dan mengkaji bab ini, pembaca akan mampu:
Menyusun algoritma, flowcart dan program dengan memanfaatkan unit input-output ATMega16.
Membuat rangkaian Mikrokontroler ATMega16 untuk aplikasi LED dan 7 Segment
3.1. Teori Dasar Input-Output
Semua port AVR memiliki fungsi Baca-Tulis yang dapat dimodifikasi ketika digunakan sebagai I/O port digital. Yang berarti setiap saat salah satu arah pin port dapat diubah fungsi. Setiap output buffer memiliki karakteristik arus simetris yang bagus dengan arus sink yang tinggi dan kemampuan sumber arus. Sehingga dari pin cukup kuat untuk menjalankan LED display secara langsung. Semua pin port memiliki individual pull-up resistor. Dan semua pin I/O memiliki dioda pelindung untuk VCC dan Grou nd. Sebagai referensi semua register dan bit ditulis dalam bentuk umum yaitu sebuah huruf kecil "x" untuk pengganti nama port, dan sebuah huruf kecil "n" mewakili nomor bit seperti PORTxn. Ada tiga alamat memori I/O yang dialokasikan untuk setiap port I/O yaitu Data Register (PORTx), Data Direction Register (DDRx) dan Port Input Pin (PINx). Data Register (PORTx) digunakan untuk menyimpan data yang akan ditulis/dikeluarkan ke port I/O pada saat port dikonfigurasi sebagai output sedangkan Port Input Pin (PINx) digunakan untuk menyimpan data yang terbaca dari port I/O pada saat port dikonfigurasi sebagai input sedangkan Data Direction Register (DDRx) digunakan untuk menginisialisasi port sebagai input atau output. Oleh karena itu, setiap pin port memiliki 3 bit register yaitu: DDxn, PORTxn dan PINxn. Bit-bit DDxn beralamat di DDRx, bit-bit PORTxn beralamat di PORTx I/O dan bit-bit PINxn juga beralamat di PORTx I/O. Bit DDxn yang ada di dalam register DDRx menentukan arah dari pin ini. Bila DDxn ditulis logika satu “1”, maka Pxn dikonfigurasi sebagai input dan bila
48
DDxn ditulis logic nol “0” maka Pxn dikonfigurasi sebagai output. Jika PORTxn ditulis logika satu saat pin dikonfigurasi sebagai pin input, maka pull-up resistor aktif dan untuk menonatifkan resistor pull-up, PORTxn harus ditulis logika nol atau pin harus dikonfigurasi sebagai pin output. Pin port adalah tri stated ketika kondisi reset dan bahkan jika tidak ada clock yang bekerja. Gambar 3.1 menunjukkan register-register PORTA dan untuk registerregister PORT yang lain sama saja hanya dengan mengganti huruf A menjadi huruf B, C dan D karena memiliki model konfigurasi yang sama dengan PORTA tetapi memiliki alamat yang berbeda.
Gambar 3.1. Register-Register PORTA(ATMega16,2010;66) Dalam bahasa C yang digunakan untuk pemrogramam ATMega16 nama PORTx, DDRx dan PINx sudah dikenal dan dikemas dalam file mega16.h untuk mikrokontroler ATMega 16 sehingga tinggal dipanggil saja file tersebut dengan perintah #include . Sedangkan perintah-perintah yang berhubungan dengan Port adalah sebagai berikut: -
PORTx, merupakan perintah yang digunakan untuk mengeluarkan data ke Port x, x untuk A, B, C dan D contoh: PORTC = 0xff; // perintah untuk mengeluarkan data 0xff ke Port C
-
PINx, merupakan perintah yang digunakan untuk membaca data dari Port x, untuk x A, B, C dan D.
49
Contoh: Datain = PINA; // perintah untuk membaca data dari Port A dan hasilnya disimpan di variable Datain. -
DDRx, merupakan perintah untuk menginisialisasi atau mengisi register DDRx dengan data sesuai untuk inisialisasi input atau output. Bila diisi 1 untuk inisialisasi Output, bila diisi 0 untuk inisialisasi input Contoh: DDRA = 00000000 (2) = 0x00 (hex) PortA0
– PortA7 berfungsi sebagai Input
DDRB = 11111111 (2) = 0xFF(hex) PortB0
– PortB7 berfungsi sebagai Ou tput
DDRC = 00001111 (2) = 0x0F (hex) PortC0
– PortC7 berfungsi sebagai Output dan PortC5 – PortC7
berfungsi sebagai Input. Jika port digunakan sebagai input, maka resistor pullup diaktifkan dengan memberikan logika 1 pada PORTx. Kemudian baru baca dapat data dari register PINx dan jika port digunakan sebagai output, langsung dapat digunakan sebagai saluran untuk keluar ke PORTx. -
Mikrokontroler ATMega16 memiliki juga instruksi bit yaitu PORTx.n untuk dan PINx.n
3.2. Tampilan Seven Segmen
Tampilan seven segmen merupakan
sebuah tampilan yang terdiri dari
tujuh segmen LED yang disusun untuk menampilkan angka 0 sampai 9 Seperti yang ditunjukkan dalam Gambar 3.2. Dan untuk setiap segmen diberi kode dengan huruf a, b, c, d, e, f, g dan d.p. Ada dua jenis seven segmen yaitu common anoda (CA) dan common katoda (CC). Untuk common anoda (CA), karena yang dijadikan satu adalah anoda maka CA dihubungkan dengan Vcc, sehingga untuk menyalakan segmen maka pin dari segemen tersebut diberi logika 0 atau 0 Volt, sedang untuk common katode (CC), karena yang dijadikan satu adalah Ground maka untuk menyalakan segmen pin dari segmen tersebut diberi logika 1 atau 5 Volt.
50
Salah satu contoh data yang digunakan untuk menampilkan 0 sampai 9 melalui Port C ditunjukkan dalam Tabel 3.1 dengan menggunakan 7 segmen common anoda.
Gambar 3.2. Tampilan Seven Segmen( Seven Segment Display,2002;4) Tabel 3.1. Nilai Port C untuk menampilkan angka 0 sampai 9
Tampilan
PC7 PC6 PC5 dot g f 1 1 0
PC4 PC3 e d 0 0
PC2 PC1 c b 0 0
PC0 a 0
Nilai Hex PC 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
51
3.3. Cara Menggunakan Progisp AVR Programmer
Salah satu program yang digunakan mengisi program di dalam mikrokontroler ATMega 16 adalah ProgIsp ver 17.2. Dan langkah-langkah untuk memprogram chip ATMega16 adalah sebagai berikut: 1. Jalankan ProgIsp ver 1.72 dan hasilnya seperti ditunjukkan dalam Gambar 3.3
Gambar 3.3 Tampilan ProgIsp 2. Setelah itu ubah mikrokontroler yang digunakan menjadi mikrokontroler AT Mega16 pada bagian menu Select Chip pada sebelah kiri atas seperti yang ditunjukan dalam Gambar 3.4.
Gambar 3.4. Hasil Perubahan mikrokontroler yang digunakan
52
3. Setelah itu tancapkan hardware pasangan dari PorgIsp ver 1.72 sehingga tulisan Prog ISP di bagiah menu State akan menyala. Seperti yang ditunjukkan dalam Gambar 3.5.
Gambar 3.5. Tampilan Saat hardware sudah terpasang 4. Ambil Program file Hex dengan meng-klik Load Flash pada Menu File pada bagian sebelah kanan atas dan ambil file hexnya seperti yang ditunjukkan dalam Gambar 3.6.
Gambar 3.6. Tampilan Menu Open Load Flash 5. Setelah itu klik tombol Auto untuk mengisi program ke dalam mikrokontroler ATMega16.
53
3.4. Percobaan I Input Output
Langkah-Langkah percobaan Input-Output sebagai berikut: 1. Buat Rangkaian seperti Gambar 3.7 di P roteus
Gambar 3.7. Rangkain ATMega16 untuk P ercobaan Input-Output 2. Buat dalam Bentuk Rangkaian sesungguhnya dalam Protoboard seperti Gambar 3.8.
Gambar 3.8. Rangkaian Mikrokontoler ATMega16 dengan LED dan 7 Segmen 3. Buat Program dari flowcart yang ditunjukkan dalam Gambar 3.9.
54
Gambar 3.9. Flowcart untuk menampilkan Nim 1 dan Nim2 p ada 7 Segmen 4. Simulasikan program dengan menggunakan Proteus 5. Kirim program ke mikrokontroler ATMega16 dengan menggunakan ProgISP Ver 1.72 6. Amati Hasil dan buat laporan tertulis.
3.5. Percobaan II Input Output
1. Dengan rangkaian yang sama buat flowcart, program dan aplikasikan dalam simulasi
Proteus
dan
rangkaian
mikrokontroler
ATMega16
menambahkan fungsi saklar sebagai berikut: a. Bila Saklar PA0 ditekan maka akan tampil NIM 1 b. Bila Saklar PA1 ditekan maka akan tampil NIM 2 c. Bila Saklar PA2 ditekan maka akan tampil LED Geser kiri d. Bila Saklar PA3 ditekan maka akan tambil LED Geser Kanan 2. Amati hasilnya dan buat laporan tertulis.
55
dengan
BAB IV ANALOG TO DIGITAL CONVERTER (ADC) Capaian Pembelajaran:
Setelah membaca dan mengkaji bab ini, pembaca akan mampu:
Menyusun algoritma, flowcart dan program dengan memanfaatkan unit Analog to Digital Convert dan unit input-output ATMega16.
Mengaplikasikan Unit ADC ATMega16 untuk tampilan 7 Segmen dan masukan LDR(Light Dependent Resistors) dan sensor suhu LM35
4.1. ADC Dalam ATMega 16
ATMega memiliki ADC jenis successive approximation dengan data output sebanyak 10 bit. Ada 8 kanal input ADC yang dimultiplekser dengan pin Port A dengan acuan 0 Volt atau Ground. ADC juga dilengkapi dengan rangkaian sample and hold yang menjamin tegangan masukan ADC berada dalam keadaan konstan saat proses konversi dan Gambar 4.1 menunjukkan blok diagram dari Skema ADC di mikrokontroler ATMega 16.
Gambar 4.1. Blok Diagram ADC ATMega 16 (ATMega16,2010;205)
56
Dalam operasinya ADC mengubah tegangan masukan analog ke dalam 10 bit nilai digital dengan successive approximation. Gnd sebagai nilai minimal dan nilai maksimal mewakili tegangan di pin AREF – 1 LSB, Biasanya AVCC atau tegangan reverensi internal 2.56 Volt atau mungkin terhubung ke pin AREF dengan mengatur bit REFSn di register ADMUX. ADC diaktifkan dengan mengatur bit ADC Enable, ADEN di register ADCSRA. Tegangan referensi dan saluran masukan ADC yang dipilih tidak akan berlaku sampai ADEN di set ‘1’. ADC menghasilkan nilai 10-bit yang disajikan dalam dua register data ADC yaitu ADCH dan ADCL. Secara default , hasilnya disajikan right adjusted (2 bit di ADCH dan 8 bit di ADCL), tetapi secara opsional dapat disajikan left adjusted (8 bit di ADCH dan 2 bit di ADCL) dengan mengatur bit ADLAR di ADMUX. Jika yang dipilih left adjusted maka ADC digunakan dalam 8 bit saja dengan cukup mengambil data di ADCH. Untuk right adjusted, ADCL dibaca dahulu setelah itu ADCH agar data yang didapatkan tidak hilang atau rusak. Sebuah konversi tunggal dimulai dengan menulis logika satu ke bit Start Convertion
ADC atau ADSC di register ADCSRA. Bit ini akan tetap tinggi
selama konversi sedang berlangsung dan akan dihapus oleh hardware bila konversi selesai. Dan Jika selesai maka bit ADIF akan bernilai satu yang memberikan tanda bahwa konversi sudah selesai sehingga data hasil konversi dapat dibaca di ADCH dan ADCL. Konversi dapat juga dipicu secara otomatis oleh berbagai sumber. Auto Trigger diaktifkan dengan memberikan logika satu pada bit ADC Auto Trigger atau ADATE di register ADCSRA. Sumber pemicu dapat dipilih dengan mengatur bit ADC Trigger Select atau ADTs di register SFIOR. Modul ADC berisi prescaler, yang menghasilkan frekuensi clock ADC diterima dari frekuensi CPU. Prescaling diatur oleh bit ADPS di register ADCSRA. Prescaler mulai bekerja mulai ADC diaktifkan dengan memberi logika satu di bit ADEN di ADCSRA. Dan akan berhenti jika ADEN diberi logika nol atau rendah.
57
Ada beberapa register yang digunakan untuk ADC yaitu: 1. Register ADMUX atau
register ADC Multiplexer , dinamakan demikian
karena di dalam register tersebut ada bit-bit yang digunakan untuk memilih saluran dari input ADC, untuk bit-bit dari ADMUX ditunjukkan dalam Gambar 4.2.
Gambar 4.2. Bit-bit dalam Register ADMUX(ATMega16,2010;217) Keterangan dari fungsi bit-bit ADMUX Gambar 3 .2 adalah sebagai berikut: -
REF0 dan REF1 ( Reference) adalah bit-bit yang digunakan untuk memilih tegangan referensi dari ADC dan table 4.1 menunjukkan beberapa tegangan referensi yang dapat digunakan. Tabel 4.1. Pilihan Tegangan Referensi ADC (ATMega16,2010;217)
-
REFS1
REFS0
Pilihan tegangan referensi
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)
58
Gambar 4.4. Format Hasil Konversi Bila DLAR sa ma 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)
59
Keterangan dari fungsi bit-bit ADCSRA adalah sebagai berikut: -
ADEN atau ADC Enable, merupakan bit untuk mengaktifkan ADC, bila ADEN = 1 maka ADC aktif dan Port A tidak aktif, bila ADEN = 0 maka ADC tidak aktif dan Port A aktif.
-
ADSC atau ADC Start Convertion, merupakan bit yang digunakan untuk memberikan perintah mulai konversi, bila ADSC = 1, maka ADC mulai bekerja untuk mengkonversi input analog dan akan berlogika 0 bila selesai konversi.
-
ADATE atau ADC Auto Trigger Enable, merupakan bit yang digunakan untuk mengendalikan aktivasi picu otomatis. Jika ADATE = 1 maka konversi ADC akan dimulai pada saat tepi positif pada sinyal trigger yang digunakan.
-
ADIF atau ADC Interrupt Flag , merupakan bit penanda akhir konversi ADC. Jika ADIF = 1 maka konversi ADC pada suatu saluran telah selesai dan siap diakses.
-
ADIE atau ADC Interrupt Enabe, merupakan bit pengatur aktivasi interupsi. Jika ADIE = 1 maka interupsi telah diaktifkan untuk melayani proses konversi ADC.
-
ADPS2, ADPS1 dan ADPS0 atau ADC Prescaler Select , merupakan 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 fre kuansi. Tabel 4.3. Frekuensi clock ADC(ATMega16,2010;220) ADPS2 0 0 0 0 1 1 1 1
ADPS1 0 0 1 1 0 0 1 1
ADPS0 0 1 0 1 0 1 0 1
60
Clock ADC fosc /2 fosc /2 fosc /4 fosc /8 fosc /16 fosc /32 fosc /64 fosc 128
4.2. LM35
LM35 merupakan IC sensor suhu yang presisi, dengan tegangan output yang linear sebanding dengan suhu dalam Celcius. LM35 memiliki keuntungan lebih linear dari sensor suhu yang dikalibrasi dalam o Kelvin sehingga LM35 tidak memerlukan kalibrasi eksternal. LM35 memiliki impedansi keluaran rendah, output yang linier, dan kalibrasi yang melekat membuat pembacaan antarmuka dengan sirkuit kontrol sangat mudah. LM35 dapat digunakan dengan catu daya tunggal, atau catu daya dengan plus dan minus. Salah satu rangkaian yang sering digunakan dalam aplikasi ditunjukkan dalam Gambar 4.6. Sedangkan untuk salah satu bentuk fisik tipe To-92 ditunjukkan dalam Gambar 4.7.
Gambar 4.6. Rangkaian Sensor Suhu dalam Celcius (LM35,1994;1)
Gambar 4.7. Salah Satu Bentuk Fisik LM35 (LM35,1994;1) Untuk fitur-fitur yang dimiliki oleh LM35 adalah sebagai berikut:
Dikalibrasi langsung dalam oCelcius (celcius)
sensivitasnya atau faktor skala yang Linear = 10,0 mV / C
Akurasi 0,5 oC (pada 25 oC)
rentang suhu dari - 55 sampai +150 C
Cocok untuk aplikasi remote
Murah
o
o
61
Beroperasi dari 4 sampai 30 Volt
Arus Drain kurang dari 60 mA
Impedansi Output rendah, 0,1 Ohm untuk 1 beban mA
4.3. LDR
LDR atau Light Dependent Resistor merupakan resistor yang nilai resistansinya berubah-ubah tergantung dengan besarnya intensitas cahaya yang diserap. LDR dibuat dari cadium Sulfied (CDS), yang dihasilkan dari serbuk keramik dan disebut juga peralatan photo conductive, selama konduktivitas atau resistansi dari CDS bervariasi terhadap intensitas cahaya. Jika intensitas cahaya yang diterima bertambah tinggi maka nilai resistansi LDR akan berkurang demikian juga sebaliknya. Tetapi CDS tidak mempunyai sensitivitas yang sama pada tiap panjang gelombang dari ultraviolet sampai d engan infra merah. Gambar 4.8 menunjukkan karakteristik dan simbol LDR. Sedangkan Gambar 4.9 menunjukkan LDR yang sesungguhnya.
a. Karakteristik LDR
b. Simbol LDR
Gambar 4.8. Karakteristik dan Simbol LDR
62
Gambar 4.9. LDR 4.4. Tata Cara Inisialisasi ADC dengan CodeWizard
Untuk menginisialisasi ADC dengan Code Wizard dilakukan tata cara sebagai berikut: 1. Gerakkan mouse ke tulisan ADC Analog to Digital Converter (nomor 1) setelah itu centang ADC Enabled (nomor 2) seperti yang ditunjukkan dalam Gambar 4.10.
2
1
Gambar 4.10. ADC dengan CodeWizard 2. Setelah itu centang use 8 bit (nomor 3), rubah AREF menjadi AVCC (nomor 4), rubah clock menjadi 500,000 KHz (nomor [5]), Seperti yang ditunjukkna dalam Gambar 4.11. Setelah semuanya sudah maka inisialisasi ADC sudah selesai.
63
3
4
5
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 la ngsung memanggilnya, sebagai berikut: Tegangan Input analog dihubungkan dengan ADC0 atau PA0 maka cara untuk memdapatkan data hasil konversinya cukup dengan menuliskan dalam variable data_adc = read_adc(0) // 0 = ADC0 seperti yang ditunjukkan dalam Gambar 4.13
64
Gambar 4.13. Cara Menggunakan fungsi read_adc() 4.5. Percobaan I ADC
Langkah-langkah percobaan ADC ATMega16 sebagai berikut: 1. Buat Rangkaian untuk program Proteus dan Hardwarenya seperti yang ditunjukan dalam Gambar 3.14.
Gambar 3.14. Rangkain ATMega16 untuk percobaan ADC 2. Buat flowcart dan program untuk menampilkan konversi tegangan input menjadi data digital tampilan 7 segmen secara bergantian untuk ratusan, puluhan dan satuan dengan tanda PD0 untuk Ratusan, PD1 untuk Puluhan dan Pd2 untuk Satuan. Dan Aplikasikan ke Hardwarenya. 3. Amati dan buat laporannya
65
4.6. Percobaan II ADC
1. Kembangkan program percobaan I, dengan memberikan tampilan yang berbeda untuk yang sesuai dengan besar tegangan input. Untuk tegangan input antara 0 sampai 1 volt maka ATMega16 akan menampilkan di 7 segmen NIM 1, untuk tegangan input antara 1 sampai 2 volt maka ATMega16 akan menampilkan di 7 segmen NIM 2, untuk tegangan input antara 2 sampai 3 maka ATMega16 menampilkan LED Geser kiri, untuk tegangan input antara 3 sampai 4 maka ATMega16 akan menampilkan LED geser kanan, untuk tegangan input antara 4 sampai 5 volt maka ATMega16 akan menampilkan Biar Pet. Buat flowcart, Program dan aplikasikan ke hardwarenya 2. Amati dan buat laporannya.
4.7. Percobaan III ADC
1. Ganti Potensiometer dengan Rangkaian LDR seperti yang ditunjukkan dalam Gambar 4.15.
Gambar 4.15. Percobaan Menggunakan LDR 2. Beri Cahaya pada LDR dengan Jarak yang tertentu sehingga semua menu pada langkah 4 dapat tampil semuanya. 3. Catat jarak antara sumber cahaya dan LDR 4. Ulangi dengan menggantikan R1 = 5K Ohm, 15K Ohm dan 22 K Ohm 66
5. Catat setiap perubahan jarak antara sumber cahaya dengan LDR untuk masing-masing perubahan R1. 6. Buat laporan dan kesimpulan 4.8. Percobaan IV ADC
1. Modifikasi Rangkaian Gambar 4.15 menjadi sensor suhu dengan mengganti rangkaian LDR dengan IC LM35. Dengan catatan saat inisialisasi ubah Volt. Ref = Int. Cap. on AREF seperti ditunjukkan dalam Gambar 4.16.
Gambar 4.16. Setting Volt Referensi sebesar 2,56 Volt
67
BAB V UNIVERSAL SYNCHRONOUS AND ASYNCHRONOUS SERIAL RECEIVER TRANSMITTER ( USART ) Capaian Pembelajaran:
Setelah membaca dan mengkaji bab ini, pembaca akan mampu:
Menyusun algoritma, flowcart dan program dengan memanfaatkan unit USART, unit ADC dan unit input-output ATMega16 untuk proses telemetri dan telekontrol.
Mengaplikasikan
program
komunikasi
Serial
dengan
menggunakan
ATMega16
5.1. USART Dalam At Mega 16
Universal Synchronous dan Asynchronous dan Transmitter (USART) adalah perangkat komunikasi serial yang sangat fleksibel. Fitur-fitur utama adalah sebagai berikut:
Operasi full duplex
Operasi asinkron atau sinkron
Master atau slave clock pada oper asi sinkron
Generator baud rate resolusi tinggi
Mendukung frame serial dengan 5, 6, 7, 8, atau 9 bit data dan 1 atau 2 bit stop
Paritas ganjil atau genap
Deteksi data over run
Deteksi kesalahan framing
Filter terhadap gangguan termasuk deteksi bit start palsu dan low pass filter digital
Tiga Interrupsi terpisah di TX komplit, TX Data Register Empty, dan RX komplit
Mode Komunikasi Multi-prosesor
Kecepatan ganda pada mode komunikasi asinkron
68
Blok diagram sederhana dari USART ditunjukkan pada Gamba r 5.1 dan untuk Register I/O dan pin I/O yang dapat diakses ditampilkan dengan huruf tebal seperti Register UCSRA, UCSRB, UCSRC, UDR dan UBRR, serta pin RxD, TxD dan XCK.
Gambar 5.1. Blok Diagram USART pada ATMega 16 (ATMega16,2010;144) Dalam Gambar 5.1, kotak-kotak yang putus-putus dalam blok diagram memisahkan tiga bagian utama dari USART yaitu: Generator Clock , Transmitter dan Receiver . Register Kontrol dibagi ke semua unit. Clock pembangkit logika terdiri dari logika sinkronisasi untuk masukan clock eksternal yang digunakan oleh operasi sinkron slave dan generator baud rate. Pin XCK (Clock Transfer ) hanya digunakan oleh mode Transfer Sinkron. Transmitter terdiri dari buffer register tulis, serial Shift regiseter , generator paritas dan kontrol logika untuk menangani berbagai format bingkai ( frame) serial. Buffer register tulis 69
memungkinkan transfer data yang berkelanjutan tanpa ada penundaan antara frame. Pada receiver merupakan bagian paling kompleks dari modul USART karena clock dan unit pemulihan data. Unit-unit pemulihan digunakan untuk penerimaan data asinkron. Tambahan fungsi untuk unit pemulihan berupa pemeriksa paritas penerima (receiver ), logika kontrol, Shift Register dan dua tingkat receive buffer (UDR). Receiver mendukung format frame yang sama seperti transmitter , dan dapat mendeteksi kesalahan frame, overrun data dan kesalahan paritas. Untuk dapat menggunakan USART, perlu diketahui dari fungsi-fungsi masing-masing register yang ada di dalam Blok diagram pada Gambar 5.1. Register-register tersebut sebagai berikut: 1. UDR atau USART Data Register
Gambar 5.2. Register UDR (ATMega16,2010;163) USART Transmit Data Buffer Register dan USART Receive Data Buffer Register menggunakan alamat I/O yang sama yang disebut USART Data Register atau UDR. Transmitter Data Buffer Register (TXB) akan menjadi tujuan dari penulisan data ke lokasi register UDR sedangkan saat membaca register UDR akan mendapatkan isi dari Receiver Data Buffer Register (RXB) seperti yang ditunjukkan dalam Gambar 5.2.
2. UCSRA atau USART Control Status Register A, Nama bit-bit UCSRA ditunjukkan dalam Gambar 5.3.
Gambar 5.3. Bit-Bit Register UCSRA (ATMega16,2010;164) Keterangan bit-bit Register UCSRA adalah sebagai berikut: -
Bit 7 – RXC: USART Receive Complete
70
Merupakan bit tanda bahwa ada data yang telah masuk secara serial melalui pin RxD. Bernilai logika satu bila ada data masuk ke buffer penerima dan belum dibaca, bila data sudah dibaca maka akan berubah menjadi nol. Bit RXC ini juga digunakan untuk membangkitkan intrupsi Receive Complete. -
Bit 6 – TXC: USART Transmit Complete Merupakan bit tanda bila semua data sudah komplit dikirim secara serial melalui pin TxD. Bernilai logika satu bila transmit shift register telah kosong dan tidak ada data baru dalam transmit buffer (UDR). Bit TXC ini akan berubah menjadi nol secara otomatis saat intrupsi transmit complete dikerjakan atau dapat di-nol-kan dengan menuliskan satu ke bit ini. Tanda TXC juga membangkitkan sebuah intrupsi Transmit Complete.
-
Bit 5 – UDRE: USART Data Register Empty Tanda UDRE menunjukkan jika transmit buffer (UDR) siap menerima data. Bila UDRE berlogika satu buffer kosong, berarti siap untuk ditulis. Tanda UDRE dapat membangkitkan intrupsi Data Register Empt y. UDRE berlogika satu untuk menunjukkan bagian transmitter siap.
-
Bit 4 – FE: Frame Error Bit berlogika satu jika karakter berikutnya dalam buffer penerima terjadi frame error ketika menerima yaitu saat stop bit pertama dari karakter berikutnya dalam buffer penerima ( receiver ) adalah nol. Bit FE adalah nol ketika stop bit data yang diterima adalah satu. Beri bit ini nol saat menulis ke UCSRA.
-
Bit 3 – DOR: Data OverRun Bit ini berlogika satu jika kondisi over run data terdeteksi. Sebuah data overrun terjadi ketika buffer penerima penuh (dua karakter), ada karakter baru yang menunggu dalam shift Registre penerima, dan start bit baru terdeteksi. Beri bit ini ke nol saat menulis ke UCSRA.
-
Bit 2 – PE: Parity Error Bit ini berlogika satu jika karakter berikutnya dalam buffer penerima memiliki kesalahan paritas ( Parity Error ) saat diterima dan pengecekan
71
paritas telah diaktifkan pada bagian UPM1 = 1. Beri bit ini nol saat menulis ke UCSRA. -
Bit 1 – U2X: Double the USART Transmission Speed Bit ini hanya berpengaruh untuk operasi asinkron. Beri bit ini nol bila menggunakan sinkron operasi. Bila bit ini diberi nilai logika satu maka akan mengurangi pembagi dari pembagi baud rate dari 16 ke 8 sehingga secara efektif menggandakan transfer rate untuk komunikasi asinkron.
-
Bit 0 – MPCM: Multi-processor Communication Mode Bit ini memungkinkan Modus komunikasi multi-prosesor. Apabila bit MPCM diberi logika satu, maka semua frame yang diterima oleh penerima USART yang tidak mengandung informasi alamat akan diabaikan. Transmiiter tidak dipengaruhi oleh p engaturan 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 a ktif.
-
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 a ktif.
-
Bit 5 – UDRIE: USART Data Register Empty Interrupt Enable Bit ini digunakan untuk mengaktifkan intrupsi saat UDRE sama dengan satu. Jika diberi logika satu maka intrupsi diaktifkan dan bila diberi nol maka intrupsi tidak aktif.
-
Bit 4 – RXEN: Receiver Enable
72
Bit ini digunakan untuk mengaktifkan bagian penerima ( receiver ) USART, dan pin RxD digunakan sebagai jalur komunikasi serial. Bila diberi logika satu akan aktif dan logika nol u ntuk 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 u ntuk non aktif
-
Bit 2 – UCSZ2: Character Size Bit UCSZ2 dikombinasikan dengan bit UCSZ1 dan UCSZ0 bit dalam register UCSRC untuk menetapkan jumlah bit data atau ukuran karakter dalam frame untuk penerima ( receiver ) dan pemancar (transmitter ).
-
Bit 1 – RXB8: Receive Data Bit 8 RXB8 adalah bit data kesembilan dari karakter yang diterima ketika beroperasi dengan frame serial dengan sembilan bit data. Harus dibaca sebelum membaca bit rendah dari UDR.
-
Bit 0 – TXB8: Transmit Data Bit 8 TXB8 adalah bit data yang kesembilan dari karakter yang akan dikirim ketika beroperasi dengan frame serial dengan sembilan bit data. Harus ditulis sebelum menulis bit rendah untuk UDR.
4. UCSRC atau USART Control Status Register C Nama bit-bit dari Register UCSRC ditunjukkan dalam Gambar 5.5.
Gambar 5.5. Bit-bit Register UCSRC (ATMega16,2010;166) Alamat lokasi register UCSRC berbagi dengan register UBRRH. Sedang untuk keterangan bit-bit Register UCSRC adalah sebagai berikut: -
Bit 7 – URSEL: Register Select Bit ini digunakan untuk memilih antara mengakses register UCSRC atau register UBRRH. Bila diberi logika satu maka digunakan sebagai register UCSRC.
-
Bit 6 – UMSEL: USART Mode Select
73
-
Bit ini digunakan untuk memilih mode operasi komunikasi serial, bila diberi logika ‘0’ maka mode Asikron dan bila diberi logika ‘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
74
dan sampel input data, dan clock sinkron (XCK). Untuk pengaturan bit UCPOL ditunjukkan dalam tabel 5.3 Tabel 5.2. Kombinasi UCSZ2 sampai UCSZ0 untuk Pengaturan Ukuran Karakter (ATMega16,2010;167)
Tabel 5.3. Pengaturan Bit UCPOL (ATMega16,2010;167)
5. UBRR atau USART Baud Rate Register UBRR terdiri dari dua buah register yaitu UBRRH dan UBRRL, registerregister ini digunakan untuk mengatur kecepatan pengiriman data atau Baud Rate. Untuk alamat register UBRRH digunakan bersama dengan register UCSRC. Bit-bit dari UBRRH dan UBBRL ditunjukkan dalam Gambar 4.6.
Gambar 4.6. Bit-bit Register UBRRH dan UBRRL (ATMega16,2010;167) -
Bit 15 – URSEL: Register Select
75
-
Bit yang digunakan untuk memilih penggunaan register UBRRH atau UCSRC, harus diberi logika 0 saat d igunakan untuk register UBRRH
-
Bit 14 sampai 12, cadangan
-
Bit 11 sampai bit 0
-
Merupakan register 12-bit yang berisi USART baud rate. Regiseter UBRRH ini berisi empat bit MSB, dan UBRRL tersebut berisi 8 bit LSB dari USART baud rate.
Untuk perhitungan Baud Rate dan nilai register UBRR ditunjukkan dalam tabel 5.4. Tabel 5.4. Perhitungan Baud Rate dan nilai Register UBRR (ATMega16,2010;147)
Catatan: 1. Baud rate didefinisikan sebagai kecepatan transfer dalam bit per detik (bps). 2. BAUD = Baud rate 3. fosc = Frekuensi Osilator Clock Sistem
5.2. Cara Inisialisasi USART dengan Code Wizard
Langkah-langkah untuk menginisialisasi USART dengan Code Wizard adalah sebagai berikut: 1.
Pilih menu USART, kemudian centang Receiver (nomor 1) dan centang Transmiter (nomor 2) seperti yang ditunjukkan dalam Gambar 5.7 dan akan menghasilkan tampilan seperti Gambar 5.8 dan kemudian centang Rx Interrupt (nomor 3), untuk kecepatan data baut rate = 9600 dan parameter data 8 bit per karakter, satu bit stop dan tanpa menggunakan paritas maka settingnya adalah seperti ditunjukkan dalam Gambar 5.8.
76
1 2
Gambar 5.7. Inisialisasi USART dengan Code Wizard
3
Gambar 5.8. Inisialisasi USART Lanjutan
2. Setelah di Generate program, Save and Exit, maka CodevisionAVR akan membuatkan fungsi interrupt [USART_RXC] void usart_rx_isr(void) yang akan bekerja jika ada data yang masuk melalui RXD dan fungsi char getchar(void) yang digunakan untuk membaca data yang telah masuk ke
dalam regisiter UDR melalui RXD. Gambar 5.9 menunjukkan fungsi-fungsi tersebut.
77
Gambar 5.9. Fungsi interrput [USART_RXC] dan getchar(void) 3. Untuk mengirim data ke register UDR atau TXD dapat dilakukan dengan menggunakan cara-cara yaitu: -
Langsung memberikan data ke register UDR seperti UDR = data_tx; // data_tx merupakan variabel dalam byte
-
Menggunakan perintah putchar(char c) seperti putchar(‘A’) // data yang dikirimkan dalam bentuk karakter
4. Untuk menerima data dari register UDR atau RXD dapat dilakukan dengan menggunakan cara-cara yaitu: -
Langsung mengambil data dari register UDR seperti data_rx = UDR // menerima data dari RXD dalam bentuk byte
-
Menggunakan perintah getchar (char c) seperti data_rx = getchar(); // mengambil data dalam bentuk karakter
5. Untuk menuliskan program bagian penerima data serial dengan model menggunakan
intrupsi,
program
ditulis
didalam
fungsi
interrupt
[USART_RXC] void usart_rx_isr(void) seperti ditunjukkan dalam Gambar
5.10.
78
Gambar 5.10. Letak Penulisan Program Terima Data S erial 6. Untuk menuliskan program bagian pengirim data serial biasanya ditaruh di program utama seperti yang ditunjukkan dalam Gambar 5.11.
Gambar 5.11. Letak Program Kirim Data Serial
5.3. Percobaan I USART ATMega16
Langkah-langkah percobaan USART ATMega16 adalah sebagai berikut: 1. Buat Rangkaian dengan menggunakan Proteus dan hardware seperti yang ditunjukkan dalam Gambar 5.12
79
Gambar 5.12, Rangkaian Percobaan USART AT Mega16 2. Inisialisasikan USART dengan Receiver Rx interrupt, Transmitter, Baut rate 9600, 8 bit per karakter, satu bit stop dan no parity. 3. Tulis program berikut ini di dalam fungsi interrupt [USART_RXC] void usart_rx_isr(void)
if (data == 'A') { PORTC = 0XF9; } if (data == 'B') { PORTC = 0XA4; } if (data == 'C') { PORTC = 0XB0; } if (data == 'D') { PORTC = 0X99; } 4. Tulis program berikut ini di dalam bagian program utama 80
while (1) { // Place your code here if (PINA.0 == 0) { UDR = 'A'; delay_ms(100); } if (PINA.1 == 0) { UDR = 'B'; delay_ms(100); } if (PINA.2 == 0) { UDR = 'C'; delay_ms(100); } if (PINA.3 == 0) { UDR = 'D'; delay_ms(100); } }; } 5. Jalankan program dan masukkan ke dalam ATMega 16, amati yang terjadi, buat flowcart, pembahasan dan kesimpulan 6. Modifikasi program tersebut sehingga ada 4 tampilan menu berdasarkan pengendalian jarak jauhnya. 7. Buat flowcart dan programnya, kemudian masukkan ke dalam ATMega16 8. Amati, catat perubahannya 9. Buat laporannya
81
5.4. Percobaan II USART ATMega16
1. Buat Rangkaian dengan Proteus dan di hardware seperti yang ditunjukkan dalam Gambar 5.13.
Gambar 5.13. Rangkaian Percobaan II USART ATMega16 2. Buat flowcart dan program yang akan menerima dan mengirimkan perintah antara mikrokontroler ATMega16 dengan Personal Komputer melalui Serial Port 3. Amati hasilnya 4. Buat Laporannya
5.5.
Percobaan III USART ATMega 16.
1. Rencanakan sebuah rangkaian mikrokontroler yang dapat mengirimkan suhu (LM35) ke Personal Komputer, dan Personal Komputer dapat mengendalikan 7 segmen dan LED yang ada di rangkaian mikrokontroler ATMega 16. 2. Buat blok diagram, flowcart, program dan laporannya.
82
DAFTAR PUSTAKA
Andrianto,
Heri, 2008, Pemrograman Mikrokontroler AVR ATMega16,
Bandung, Informatika Bandung.
ATMega16, Datasheet, 2010, Atmel Corporation
LM35/LM35A/LM35C/LM35CA/LM35D,
Datasheet,
1994,
Precision
Centigrade Temperature Sensors, , National Semiconductor Corporation
Seven Segment Displays, Datasheet 14.2 mm (0.56 inch), 2002, Agilent Technologies.
83
GLOSARIUM
ADC
Analog to Digital Converter Pengolah Sinyal analog menjadi data Digital
ALU
Aritmarik Logik Unit
AT
Mikrokontroler buatan Atmel Co.
AVR
Alf and 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
Software yang digunakan untuk memprogram M ikrokontroler
AVR
dengan menggunakan bahasa C
Counter
Penghitung
EEPROM
Electrical Eresable Programmable ROM ROM yang dapat dihapus dengan elektrik dan dapat d i program ulang
Flash
Memori tempat penyimpanan program
fosc
Frekuensi osilator dari mikrokontroler atau frekuensi kerja mikrokontroler
header
Kepala program
Interrupt
Interupsi atau penyela
ISP
In System Programming
84