Anda di halaman 1dari 103

Surabaya Roboholic

BAB I Pengantar Mikrokontroler AVR

1. Mikrokontroler AVR ATmega 16 1.1 Arsitektur AVR ATmega16 AVR merupakan seri mikrokontroller CMOS 8-bit buatan Atmel, berbasis arsitektur RISC (Reduced Instruction Set Computer). Hampir semua instruksi dieksekusi dalam satu siklus clock. AVR mempunyai 32 register general-purpose, timer/counter fleksibel dengan mode compare, interupt internal dan eksternal, serial UART, programmable Watchdog Timer, dan mode power saving. Beberapa diantaranya mempunyai ADC dan PWM internal. AVR juga mempunyai In-System Programmable Flash on-chip yang mengijinkan memori program untuk diprogram ulang dalam sistem menggunakan hubungan serial SPI. Chip AVR yang digunakan untuk tugas akhir ini adalah ATmega16. ATmega16 adalah mikrokontroller CMOS 8-bit daya-rendah berbasis arsitektur RISC yang ditingkatkan. Kebanyakan instruksi dikerjakan pada satu siklus clock, ATmega16 mempunyai throughput mendekati 1 MIPS per MHz membuat disainer sistem untuk mengoptimasi
1

Surabaya Roboholic komsumsi daya versus kecepatan proses. Blok diagram dari mikrokontroller dapat dilihat pada Gambar 1.2.6 Mikrokontroller ATmega16 memiliki sejumlah keistimewaan sebagai berikut : Advanced RISC Architecture 131 Powerful Instructions Most Single-clock Cycle Execution 32 x 8 General Purpose Working Registers Fully Static Operation Up to 16 MIPS Throughput at 16 MHz On-chip 2-cycle Multiplier Nonvolatile Program and Data Memories 16K Bytes of In-System Self-Programmable Flash :: Endurance: 1,000 Write/Erase Cycles Optional Boot Code Section with Independent Lock Bits In-System Programming by On-chip Boot Program True Read-While-Write Operation 512 Bytes EEPROM :: Endurance: 100,000 Write/Erase Cycles 1K Byte Internal SRAM Programming Lock for Software Security JTAG (IEEE std. 1149.1 Compliant) Interface Boundary-scan Capabilities According to the JTAG Standard Extensive On-chip Debug Support Programming of Flash, EEPROM, Fuses, and Lock Bits through the JTAG Interface Peripheral Features

Surabaya Roboholic Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode Real Time Counter with Separate Oscillator Four PWM Channels 8-channel, 10-bit ADC 8 Single-ended Channels 7 Differential Channels in TQFP Package Only 2 Differential Channels with Programmable Gain at 1x, 10x, or 200x Byte-oriented Two-wire Serial Interface Programmable Serial USART Master/Slave SPI Serial Interface Programmable Watchdog Timer with Separate On-chip Oscillator On-chip Analog Comparator Special Microcontroller Features Power-on Reset and Programmable Brownout Detection Internal Calibrated RC Oscillator External and Internal Interrupt Sources Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby and Extended Standby I/O and Packages 32 Programmable I/O Lines 40-pin PDIP, 44-lead TQFP, and 44-pad MLF Operating Voltages 2.7 - 5.5V for ATmega16L 4.5 - 5.5V for ATmega16

Surabaya Roboholic Speed Grades 0 - 8 MHz for ATmega16L 0 - 16 MHz for ATmega16

Gambar 1.1. Blok Diagram Mikrokontroller ATmega16 4

Surabaya Roboholic

1.2 Pena - Pena ATmega16 Konfigurasi Pin Mikrokontroller ATmega16 dengan kemasan 40-pin DIP (dual in-line package) dapat dilihat pada Gambar 1.2. Untuk memaksimalkan performa dan paralelisme, AVR menggunakan arsitektur Harvard (dengan memori dan bus terpisah untuk program dan data). Arsitektur CPU dari AVR ditunjukkan oleh Gambar 1.3. Instruksi pada memori program dieksekusi dengan pipelining single level. Selagi sebuah instruksi sedang dikerjakan, instruksi berikutnya diambil dari memori program.

Gambar 1.2. Konfigurasi Pin Mikrokontroller ATmega16

Surabaya Roboholic

Gambar 1.3. Arsitektur CPU dari AVR

1.3 Deskripsi Mikrokontroller ATmega16 VCC (power supply) GND (ground) Port A (PA7..PA0) Port A berfungsi sebagai input analog pada A/D Konverter. Port A juga berfungsi sebagai suatu Port I/O 8-bit dua arah, jika A/D Konverter tidak digunakan. Pin - pin Port dapat menyediakan resistor internal pull-up (yang dipilih untuk masing-masing bit). Port
6

Surabaya Roboholic A output buffer mempunyai karakteristik gerakan simetris dengan keduanya sink tinggi dan kemampuan sumber. Ketika pin PA0 ke PA7 digunakan sebagai input dan secara eksternal ditarik rendah, pin pin akan memungkinkan arus sumber jika resistor internal pull-up diaktifkan. Pin Port A adalah tri-stated manakala suatu kondisi reset menjadi aktif, sekalipun waktu habis. Port B (PB7..PB0) Port B adalah suatu Port I/O 8-bit dua arah dengan resistor internal pull-up (yang dipilih untuk beberapa bit). Port B output buffer mempunyai karakteristik gerakan simetris dengan keduanya sink tinggi dan kemampuan sumber. Sebagai input, pin port B yang secara eksternal ditarik rendah akan arus sumber jika resistor pull-up diaktifkan. Pin Port B adalah tri-stated manakala suatu kondisi reset menjadi aktif, sekalipun waktu habis. Port C (PC7..PC0) Port C adalah suatu Port I/O 8-bit dua arah dengan resistor internal pull-up (yang dipilih untuk beberapa bit). Port C output buffer mempunyai karakteristik gerakan simetris dengan keduanya sink tinggi dan kemampuan sumber. Sebagai input, pin

Surabaya Roboholic port C yang secara eksternal ditarik rendah akan arus sumber jika resistor pull-up diaktifkan. Pin Port C adalah tri-stated manakala suatu kondisi reset menjadi aktif, sekalipun waktu habis. Port D (PD7..PD0) Port D adalah suatu Port I/O 8-bit dua arah dengan resistor internal pull-up (yang dipilih untuk beberapa bit). Port D output buffer mempunyai karakteristik gerakan simetris dengan keduanya sink tinggi dan kemampuan sumber. Sebagai input, pin port D yang secara eksternal ditarik rendah akan arus sumber jika resistor pull-up diaktifkan. Pin Port D adalah tri-stated manakala suatu kondisi reset menjadi aktif, sekalipun waktu habis. RESET (Reset input) XTAL1 (Input Oscillator) XTAL2 (Output Oscillator) AVCC adalah pin penyedia tegangan untuk port A dan A/D Konverter AREF adalah pin referensi analog untuk A/D konverter. 1.4. Port Sebagai Input / Output Digital ATmega16 mempunyai empat buah port yang bernama PortA, PortB, PortC, dan PortD.

Surabaya Roboholic Keempat port tersebut merupakan jalur bidirectional dengan pilihan internal pull-up. Tiap port mempunyai tiga buah register bit, yaitu DDxn, PORTxn, dan PINxn. Huruf x mewakili nama huruf dari port sedangkan huruf n mewakili nomor bit. Bit DDxn terdapat pada I/O address DDRx, bit PORTxn terdapat pada I/O address PORTx, dan bit PINxn terdapat pada I/O address PINx. Bit DDxn dalam regiter DDRx (Data Direction Register) menentukan arah pin. Bila DDxn diset 1 maka Px berfungsi sebagai pin output. Bila DDxn diset 0 maka Px berfungsi sebagai pin input. Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin input, maka resistor pull-up akan diaktifkan. Untuk mematikan resistor pull-up, PORTxn harus diset 0 atau pin dikonfigurasi sebagai pin output. Pin port adalah tri-state setelah kondisi reset. Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin output maka pin port akan berlogika 1. Dan bila PORTxn diset 0 pada saat pin terkonfigurasi sebagai pin output maka pin port akan berlogika 0. Saat mengubah kondisi port dari kondisi tristate (DDxn=0, PORTxn=0) ke kondisi output high (DDxn=1, PORTxn=1) maka harus ada kondisi peralihan apakah itu kondisi pull-up enabled (DDxn=0, PORTxn=1)atau kondisi output low (DDxn=1, PORTxn=0). Biasanya, kondisi pull-up enabled dapat diterima

Surabaya Roboholic sepenuhnya, selama lingkungan impedansi tinggi tidak memperhatikan perbedaan antara sebuah strong high driver dengan sebuah pullup. Jika ini bukan suatu masalah, maka bit PUD pada register SFIOR dapat diset 1 untuk mematikan semua pull-up dalam semua port. Peralihan dari kondisi input dengan pull-up ke kondisi output low juga menimbulkan masalah yang sama. Maka harus menggunakan kondisi tri-state (DDxn=0, PORTxn=0) atau kondisi output high (DDxn=1, PORTxn=0) sebagai kondisi transisi. Lebih detil mengenai port ini dapat dilihat pada manual datasheet dari IC ATmega16.
Tabel 1. Konfigurasi Pin Port

Bit 2 PUD : Pull-up Disable. Bila bit diset bernilai 1 maka pull-up pada port I/O akan dimatikan walaupun register DDxn dan PORTxn dikonfigurasikan untuk menyalakan pull-up (DDxn=0, PORTxn=1).

10

Surabaya Roboholic 1.5. Organisasi Memori AVR ATmega16 AVR arsitektur mempunyai dua ruang memori utama, Ruang Data Memori dan Ruang Program Memori. Sebagai tambahan, ATmega16 memiliki fitur suatu EEPROM Memori untuk penyimpanan data. Semua tiga ruang memori adalah reguler dan linier. 1.5.1. Program Memori ATmega16 berisi 8K bytes On-Chip di dalam sistem Memori flash Reprogrammable untuk penyimpanan program. Karena semua AVR instruksi adalah 16 atau 32 bits lebar, Flash adalah berbentuk 4K x 16. Untuk keamanan perangkat lunak, Flash Ruang program memori adalah dibagi menjadi dua bagian, bagian boot program dan bagian aplikasi program. Flash Memori mempunyai suatu daya tahan sedikitnya 10,000 write/erase Cycles. ATmega16 Program Counter (PC) adalah 12 bit lebar, alamat ini 4K lokasi program memori.

11

Surabaya Roboholic

Gambar 1.4. Pemetaan Program Memori

1.5.2. Data Memori 608 lokasi alamat data memori menunjuk register file, I/O memori, dan internal data SRAM. Yang pertama 96 lokasi alamat file register dan I/O memori penempatan menunjuk Memori I/O dan yang berikutnya 512 lokasi alamat internal data SRAM. Lima perbedaan mode pengalamatan data memori cover: Langsung,Tidak langsung dengan jarak, Tidak langsung, Tidak langsung dengan Pre-Decrement, dan Tidak langsung dengan Post-Increment. Di dalam file register, register R26 ke R31 memiliki fitur penunjukan pengalamatan register tidak langsung.
12

Surabaya Roboholic Jangkauan pengalamatan langsung adalah keseluruhan ruang data. Mode Tidak langsung dengan jarak jangkauan 63 lokasi alamat dari alamat dasar yang diberi oleh Y- atau ZRegister. Manakala penggunaan register mode tidak langsung dengan pre-decrement otomatis dan postincrement, alamat register X, Y, dan Z adalah decremented atau incremented. 32 tujuan umum kerja register, 64 I/O register, dan 512 bytes data internal SRAM di dalam ATmega16 adalah semua dapat diakses melalui semua mode pengalamatan.

Gambar 1.5. Pemetaan Data Memori

13

Surabaya Roboholic 1.6. Status Register (SREG) Status register adalah register berisi status yang dihasilkan pada setiap operasi yang dilakukan ketika suatu instruksi dieksekusi. SREG merupakan bagian dari inti CPU mikrokontroller. Gambar 1.6 adalah status register ATMEGA16.

Gambar 1.6. Status Register ATMEGA16

a. Bit 7 I : Global Interrupt Enable Bit harus diset untuk meng-enable interupsai. Setelah itu mengaktifkan interupsi mana yang akan digunakan dengan cara meng-enable bit kontrol register yang bersangkutan secara individu. Bit akan di-clear apabila terjadi suatu interupsi yang dipacu oleh hardware, dan bit tidak akan mengijinkan terjadinya interupsi, serta akan diset kembali oleh instruksi RETI. b. Bit 6 T : Bit Copy Storage Instruksi BLD dan BST menggunakan bit-T sebagai sumber atau tujuan dalam operasi bit. Suatu bit dalam sebuah register GPR dapat disalin ke bit T menggunakan instruksi BST, dan sebaliknya bit-T dapat disalin kembali ke suatu bit dalam register GPR menggunakan instruksi BLD.
14

Surabaya Roboholic

c. Bit 5 H : Half Carry Flag d. Bit 4 S : Sign Bit Bit-S merupakan hasil operasi EOR antara flag-N (negatif) dan flag-V (komplemen dua overflow). e. Bit 3 V : Twos Complement Overflow Flag Bit berguna untuk mendukung operasi aritmatika. f. Bit 2 N : Negative Flag Apabila suatu operasi menghasilkan bilangan negative, maka flag-N akan diset. g. Bit 1 Z : Zero Flag Bit akan diset bila hasil operasi yang diperoleh adalah nol. h. Bit 0 C : Carry Flag Apabila suatu operasi menghasilkan carry, maka bit aka diset. 2. Serial Communication RS232 IC Serial RS 232 digunakan sebagai interface (antar muka) dari PC ke perangkat luar (level TTL) atau sebaliknya dari perangkat luar ke PC. Tegangan pada RS 232 C berbeda dengan level tegangan Digital.

15

Surabaya Roboholic Tegangan yang digunakan oleh RS 232 atau TC 232 tersebut adalah +3 Vs/d +25 V untuk logika 0 dan -3 s/d -25 untuk level logika 1. Tegangan yang cukup tinggi ini mengakibatkan data dapat ditransmisikan cukup jauh. IC serial RS 232 atau MAX 232 diperlihatkan dalam Gambar 1.7.

Gambar 1.7. IC Serial MAX 232

Ada dua macam sistem transmisi dalam komunikasi serial, yaitu asinkron dan sinkron. Pada tugas ini digunakan sistem transmisiasinkron. Hal ini dilakukan karena transmisi asinkron lebih mudah bila dibandingkan dengan sinkron. Komunikasi data serial yang dilakukan oleh Laptop (Komputer Pribadi) menggunakan metode Asynchronous Serial Data Transmission. Bentuk format pengiriman serial data asinkron diperlihatkan dalam gambar 1.8
16

Surabaya Roboholic

Gambar 1.8. Urutan data Serial

Bit bit serial asinkron terdiri atas 1 start bit (selalu Low/rendah/ 0), bit data (karakter), 1 bit paritas, dan 1 atau 2 bit stop (selalu High/tinggi/ 1 ) Faktor lain yang cukup penting dalam transfer data serial asinkron adalah kecepatan pengiriman. Besaran kecepatan pengiriman data serial ialah bps (bit per second),dan biasa disebut baud rate atau cps (character per second). Baud rate yang biasa digunakan adalah 110,300,1200,4800,9600 dan 19.200. Seperti jenis komunikasi lainnya,pada transmisi data serial juga digunakan protokol tertentu. Protokol yang digunakan adalah RS232C atau turunannya. IC serial Interface RS 232C akan merubah level tegangan Serial menjadi Level tegangan TTL. Data akan diterima oleh IC Mikrokontroler ATmegadan akan disimpan dalam Memori, Untuk keperluan monitoring data, maka mikrokontroller dilengkapi dengan display,

17

Surabaya Roboholic yang selalu menunjukkan data dari alamat tertentu. 3. Tahapan Pemrograman AVR ATmega Program ditulis menggunakan tool CodeVisionAVR. CodeVisionAVR merupakan crosscompiler. Program cukup ditulis menggunakan bahasa-C.

Gambar 1.8. Alur pemrograman AVR ATmega

18

Surabaya Roboholic

Bab II CodeVisionAVR
Tentang CodeVisionAVR CodeVisionAVR merupakan sebuah crosscompiler C, Integrated Development Environtment (IDE), dan Automatic Program Generator yang didesain untuk mikrokontroler buatan Atmel seri AVR. CodeVisionAVR dapat dijalankan pada sistem operasi Windows 95, 98, Me, NT4, 2000, dan XP. Cross-compiler C mampu menerjemahkan hampir semua perintah dari bahasa ANSI C, sejauh yang diijinkan oleh arsitektur dari AVR, dengan tambahan beberapa fitur untuk mengambil kelebihan khusus dari arsitektur AVR dan kebutuhan pada sistem embedded. File object COFF hasil kompilasi dapat digunakan untuk keperluan debugging pada tingkatan C, dengan pengamatan variabel, menggunakan debugger Atmel AVR Studio. IDE mempunyai fasilitas internal berupa software AVR Chip In-System Programmer yang memungkinkan Anda untuk melakukan transfer program kedalam chip mikrokontroler setelah
19

Surabaya Roboholic sukses melakukan kompilasi/asembli secara otomatis. Software In-System Programmer didesain untuk 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. Untuk keperluan debugging sistem embedded, yang menggunakan komunikasi serial, IDE mempunyai fasilitas internal berupa sebuah Terminal. Selain library standar C, CodeVisionAVR juga mempunyai library tertentu untuk: 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

20

Surabaya Roboholic EEPROM DS2430 dan DS2433 Maxim/Dallas Semiconductor SPI Power Management Delay Konversi ke Kode Gray dari

CodeVisionAVR juga mempunyai Automatic Program Generator bernama CodeWizardAVR, yang mengujinkan Anda untuk menulis, dalam hitungan menit, semua instruksi yang diperlukan untuk membuat fungsi-fungsi 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 Inisialisasi Bus I2C, Sensor Suhu LM75, Thermometer/Thermostat DS1621 dan

21

Surabaya Roboholic Real-Time Clock PCF8563, PCF8583, DS1302, dan DS1307 Inisialisasi Bus 1-Wire dan Sensor Suhu DS1820, DS18S20 Inisialisasi modul LCD

CodeVisionAVR merupakan hak cipta dari Pavel Haiduc, HP InfoTech s.r.l. Persiapan Instalasi CodeVisionAVR. Anda dapat memperoleh file instalasi CodeVisionAVR dengan cara mendownload pada situs pembuatnya yaitu HP InfoTech di http://www.hpinfotech.com. File yang dapat didownload adalah tipe evaluation yang artinya mempunyai keterbatasan, salah satunya adalah ukuran program yang dapat dikompilasi terbatas. Contoh yang digunakan adalah CodeVisionAVR versi 1.24.7a. Klik ganda file setup.exe yang didapat dari proses download dari situs HP InfoTech.

Gambar 2.1. Ikon file setup.exe

22

Surabaya Roboholic Untuk pilihan bahasa pilih English, klik OK, seperti pada Gambar 2.2.

Gambar 2.2. Pilihan bahasa

Kemudian akan muncul kotak dialog seperti pada Gambar 2.3, klik tombol next.

Gambar 2.3. Klik tombol next

Selanjutnya pada kotak dialog Licence Agreement, pilih I accept the agreement lalu klik tombol next seperti pada Gambar 2.4.

23

Surabaya Roboholic

Gambar 2.4. Menyetujui syarat-syarat yang diberikan

Berikutnya kotak dialog Select Destination Location seperti pada Gambar 2.5 menanyakan tempat dimana software akan diletakkan. Gunakan tempat yang telah ditentukan lalu klik tombol next.

Gambar 2.5. Menentukan lokasi tujuan

24

Surabaya Roboholic

Akan muncul kotak dialog yang menginformasikan bahwa tempat tersebut belum ada sebelumnya. Klik tombol Yes untuk membuat tempat baru tersebut seperti yang ditunjukkan oleh Gambar 2.6.

Gambar 2.6. Setuju untuk membuat tempat baru

Kemudian muncul kotak dialog seperti pada Gambar 2.7 untuk menanyakan nama program shortcut pada menu Start dari Windows. Lanjutkan dengan menekan tombol next

25

Surabaya Roboholic

Gambar 2.7. Nama folder pada Start Menu

Program CodeVisionAVR telah siap untuk diinstall. Tekan tombol Install seperti pada Gambar 2.8. Maka proses instalasi akan bekerja seperti ditunjukkan oleh Gambar 2.9. Setelah selesai akan dimunculkan kotak dialog informasi seperti pada Gambar 2.10.

26

Surabaya Roboholic

Gambar 2.8. Nama folder pada Start Menu

Gambar 2.9. Proses instalasi sedang berlangsung

27

Surabaya Roboholic

Gambar 2.10. Informasi tambahan

Klik tombol next pada Gambar 2.10 untuk mengakhiri proses instalasi. Setelah kotak dialog seperti yang ditunjukkan oleh Gambar 2.11 muncul, Anda dapat menekan tombol Finish

28

Surabaya Roboholic
Gambar 2.11. Proses instalasi selesai

Un-Install CodeVisionAVR. Bila suatu saat Anda tidak membutuhkan aplikasi CodeVisionAVR, Anda dapat membuang hasil instalasi dari komputer Anda. Pada menu Start dari Windows, klik shortcut Uninstall CodeVisionAVR C Compiler Evaluation seperti pada Gambar 2.12.

Gambar 2.12. Shortcut untuk melakukan un-install

Maka kotak dialog seperti pada Gambar 2.13 akan muncul untuk menanyakan keseriusan Anda. Klik tombol Yes untuk membuang aplikasi tersebut dari komputer Anda.

Gambar 2.13. Yakin akan membuang aplikasi dari komputer

29

Surabaya Roboholic Berikutnya proses pembuangan aplikasi berlangsung seperti ditunjukkan oleh Gambar 2.14. Lalu kotak dialog seperti Gambar 2.15 akan muncuk, klik OK untuk menutup proses pembuangan.

Gambar 2.14. Proses un-install sedang berlangsung

Gambar 2.15. Proses selesai

30

Surabaya Roboholic Proses pembuangan tersebut biasanya tidak bersih, artinya masih ada file yang tertinggal. Anda dapat melanjutkan dengan melakukan proses delete secara manual menggunakan aplikasi windows explorer. Membuat Project dengan CodeVisionAVR. Pada penjelasan berikutnya, sebagai contoh digunakan modul AVR yang mempunyai hubungan sebagai berikut: PortA terhubung dengan 8 buah LED dengan operasi aktif high PortB terhubung dengan 8 buah saklar dengan operasi aktif high PortC terhubung dengan LCD alphanumeric 16 kolom x 2 baris Jalankan aplikasi CodeVisionAVR dengan cara melakukan klik ganda pada shortcut ikon CodeVisionAVR yang terbentuk pada Desktop.

Gambar 2.16. Ikon CodeVisionAVR pada Desktop

Sebuah Splash Screen akan muncul seperti ditunjukkan oleh Gambar 2.17. Informasi
31

Surabaya Roboholic tentang versi yang dipakai dan keterangan evaluation akan terlihat.

Gambar 2.17. Tampilan Splash Screen

Beberapa detik kemudian IDE dari CodeVisionAVR akan muncul seperti yang ditunjukkan oleh Gambar 18.

32

Surabaya Roboholic

Gambar 2.18. IDE CodeVisionAVR

Untuk memulai membuat project baru, pada menubar, pilih File New, seperti yang ditunjukkan oleh Gambar 2.19.

33

Surabaya Roboholic

Gambar 2.19. Membuat file baru

Anda harus membuat sebuah project sebagai induk desain dengan memilih Project, lalu klik tombol OK seperti pada Gambar 20.

Gambar 2.20. Membuat project baru

Berikutnya Anda akan ditanya apakah akan menggunakan CodeWizardAVR. Tentu saja lebih menyenangkan bila Anda memilih

34

Surabaya Roboholic jawaban ya dengan cara menekan tombol Yes seperti pada Gambar 2.21.

Gambar 2.21. Memilih untuk menggunakan CodeWizardAVR

Tampilan CodeWizardAVR yang sederhana namun lengkap ditunjukkan oleh Gambar 2.22. Pilih Chip dengan IC yang Anda gunakan. Sebagai contoh Anda memilih Chip ATmega8535. Tab-tab pada CodeWizardAVR menunjukkan fasilitas yang dimiliki oleh chip yang Anda pilih. Cocokkan pula frekuensi kristal yang Anda gunakan pada bagian Clock. Pengisian frekuensi clock digunakan oleh software untuk menghitung rutin-rutin seperti delay agar diperoleh perhitungan yang cukup akurat.

35

Surabaya Roboholic

Gambar 2.22. CodeWizardAVR pada tab Chip

Berikutnya Anda akan menginisialisasi Port A yang terhubung dengan LED. LED merupakan modul output. Pada tab Port bagian Port A, ubah bagian Data Direction menjadi OUT dengan nilai output sama dengan 0 seperti pada Gambar 2.23. Artinya Port A digunakan sebagai port output dengan nilai awal nol setelah kondisi reset. Kemudian lakukan inisialisasi Port B seperti pada Gambar 2.24. Port B tersambung dengan saklar sebagai modul input. Pada sub-tab Port B, yakinkan Data Direction pada posisi IN dengan resistor pullup internal yang disingkat
36

Surabaya Roboholic dengan huruf P. Dengan mengaktifkan resistor pull-up internal, Anda tidak perlu menambahkan resistor pull-up pada saklar.

Gambar 2.23. Seting Port A sebagai pin output

Gambar 2.24. Seting Port B sebagai pin input dengan pull-up resistor

LCD alphanumeric yang dihubungkan dengan Port C haruslah mempunyai pengkawatan


37

Surabaya Roboholic seperti yang ditunjukkan oleh Gambar 2.25. Pada tab LCD, pilihlah Port C.

Gambar 2.25. Seting LCD pada Port C

Karena pada contoh ini tidak digunakan fasilitas lain maka seting CodeWizardAVR siap disimpan dalam file. Pada menu CodeWizardAVR, pilih File Generate, Save and Exit, seperti yang ditunjukkan oleh Gambar 2.26.

38

Surabaya Roboholic

Gambar 2.26. Menyimpan seting

Agar file yang dihasilkan tidak berantakan, buatlah sebuah folder baru, misalnya folder bernama my project, seperti yang ditunjukkan oleh Gambar 27.

39

Surabaya Roboholic

Gambar 2.27. Membuat folder baru

Kemudian masuk kedalam folder tersebut untuk menyimpan file-file yang dihasilkan oleh CodeWizardAVR. Yang pertama Anda diminta untuk memberikan nama file C yang dihasilkan. Misalnya beri nama coba, lalu klik tombol Save. Lebih jelas pada Gambar 2.27. File tersebut nantinya akan mempunyai akhiran .C.

40

Surabaya Roboholic

Gambar 2.28. Menyimpan file pertama

Yang kedua Anda diminta untuk memberikan nama file project yang dihasilkan. Misalnya beri nama coba, lalu klik tombol Save. Lebih jelas pada Gambar 2.28. File tersebut nantinya akan mempunyai akhiran .prj.

Gambar 2.29. Menyimpan file kedua

Yang terakhir Anda diminta untuk memberikan nama file project CodeWizard yang dihasilkan. Misalnya beri nama coba, lalu klik tombol Save. Lebih jelas pada Gambar 2.29. File tersebut nantinya akan mempunyai akhiran .cwp.

41

Surabaya Roboholic

Gambar 2.30. Menyimpan file ketiga

Setelah ketiga file disimpan maka pada Project Navigator akan muncul nama project beserta file C-nya. Secara bersamaan isi file C akan dibuka pada jendela editor seperti ditunjukkan oleh Gambar 2.31.

42

Surabaya Roboholic
Gambar 2.31. Project baru telah siap dalam hitungan detik

Sekarang Anda coba untuk menyisipkan instruksi utama. Instruksi ini ditambahkan pada badan program file coba.c seperti yang ditunjukkan oleh Gambar 2.32.

Gambar 2.31. Menambahkan inti program

Program tambahan tersebut bertujuan untuk menampilkan kata-kata pada LCD kemudian menampilkan nilai pada saklar pada LED yang terpasang. Jika nanti saklar diaktifkan maka LED yang bersesuaian akan aktif pula. Kemudian pilih menu Project Compile untuk melakukan kompilasi seperti yang ditunjukkan

43

Surabaya Roboholic oleh Gambar 2.32. Lalu kotak dialog seperti ditunjukkan Gambar 2.33 akan muncul. Klik tombol OK.

Gambar 2.32. Melakukan kompilasi

44

Surabaya Roboholic

Gambar 2.33. Informasi hasil kompilasi

Program yang Anda buat siap untuk ditransfer kedalam mikrokontroler. Sebelumnya Anda harus melakukan seting pada programmernya. Pada menu pilih Setting Programmer, seperti pada Gambar 34.

45

Surabaya Roboholic

Gambar 2.34. Melakukan seting pada programmer

Pilihlah programmer sesuai dengan yang Anda gunakan. Pada Gambar 2.35 ditunjukkan menggunakan programmer Kanda Systems STK200+/300 sebagai contoh. Programmer ini menggunakan kabel paralel yang terhubung dengan port paralel pada komputer Anda.

Gambar 2.35. Menggunakan programmer STK200+/300

Kemudian pilih menu Project Configure, seperti yang ditunjukkan oleh Gambar 2.36. Kotak dialog pada Gambar 2.37 akan muncul,
46

Surabaya Roboholic pada tab After Make, pilih Program the Chip. Lalu klik tombol OK.

Gambar 2.36. Melakukan konfigurasi project

Gambar 2.37. Memilih opsi Program the Chip After Make

Setelah melakukan seting, lakukan make project dengan memilih menu Project Make,
47

Surabaya Roboholic seperti ditunjukkan oleh Gambar 2.38. Apabila tidak ada kesalahan maka kotak dialog informasi seperti pada Gambar 2.39 akan muncul. Klik tombol Program untuk mentransfer program kedalam mikrokontroler.

Gambar 2.38. Melakukan make project

Gambar 2.39. Kotak dialog informasi hasil make

48

Surabaya Roboholic Apabila muncul kotak dialog seperti pada Gambar 2.40 menandakan telah terjadi suatu hal yang menyebabkan proses transfer gagal. Penyebabnya adalah: suplai tegangan mikrokontroler dan programmer belum dinyalakan, tipe programmer tidak sama dengan yang digunakan, alamat port paralel tidak cocok, atau mikrokontrolernya rusak.

Gambar 2.40. Gagal melakukan transfer program

Bila kerusakan seperti yang ditampilkan oleh Gambar 40 telah diperbaiki atau bila tidak ada kerusakan maka proses transfer atau yang umum disebut dengan proses download akan berlangsung seperti yang ditunjukkan oleh Gambar 2.41.

49

Surabaya Roboholic

Gambar 2.41. Proses transfer ke mikrokontroler

Coba Anda perhatikan yang terjadi dengan modul yang terpasang, apakah pada LCD muncul tulisan seperti yang telah Anda program dan bila saklar diubah posisinya maka LED yang bersesuaian akan menyala. Bila Anda ingin menambahkan instruksi lain maka Anda dapat melakukan penyuntingan program pada file .C-nya. Kemudian lakukan kompilasi dan make project berikutnya proses download.

50

Surabaya Roboholic

BAB III USB AVR Downloader


Perangkat USBasp sebagai perangkat untuk mengisi IC mikrokontroler jenis AVR. Sistem operasi yang pernah dicoba adalah Windows XP dan Windows Vista. Adapun tahapan atau cara instalasinya adalah sebagai berikut : Tahap 1 Hubungkan perangkat keras yang terdiri dari kabel USB dan USB box seperti gambar berikut.

51

Surabaya Roboholic
(a) Tancapkan USB ke Laptop (b) LED Perangkat akan Menyala

Tahap 2 Setelah dikenali oleh PC / Laptop ikuti langkah langkah berikut : (a) Pilih mode Yes, this time only

(b) Pilih Install from a list or specific location (advanced)

52

Surabaya Roboholic

(c) Pilih lokasi driver pada folder win-driver

(d) Pilih Include this location in the search seperti langkah berikut

53

Surabaya Roboholic

(e) Tunggu proses instalasi sampai dengan selesai

(f) Setelah selesai tekan Finish


54

Surabaya Roboholic

(g) Untuk mengetahui perangkat sudah terinstal dengan benar, lihat pada informasi perangkat dengan cara pilih Device Manager

55

Surabaya Roboholic (h) Lihat pada bagian LibUSB-Win32 Devices bila sudah terdapat icon USBasp dan tidak terjadi conflict maka perangkat siap digunakan

56

Surabaya Roboholic

PETUNJUK PENGGUNAAN USB AVR Downloader Cara penggunaan dari perangkat keras USBasp untuk pengisian IC mikrokontroler tipe AVR adalah : Langkah 1 Masuk kedalam Dos Prompt Command dengan cara ketik cmd pada menu Run

Langkah 2 Program avrdude untuk melakukan download di letakkan pada folder yang kita beri nama mouse (nama folder bebas, bisa anda gandti dengan nama lain)

57

Surabaya Roboholic

Langkah 3 Sebelum melakukan download kita harus menentukan kode IC apa yang akan kita gunakan, contoh : bila kita menggunaka IC ATMEGA 16 maka kode yang kita gunakan seperti pada list berikut adalah m16. Cara mencari informasi dengan cara ketikkan avrdude c usbasp p ?

58

Surabaya Roboholic

Langkah 4 Sebelum melakukan download, maka simpan file HEX project anda pada folder yang sama di folder dimana disimpan file avrdude Contoh :

59

Surabaya Roboholic Berikut project saya bernama mouse.c, hasil kompilasinya adalah : mouse.hex Simpan atau letakkan file mouse.c di folder mouse Lakukan download file HEX ke dalam mikrokontroler kita Bila IC mikrokontroler kita bertipe ATMEGA 16 maka kodenya : m16 (sesuai dengan langkah sebelumnya) Cara download adalah ketik :
usbasp p m16 U

avrdude c flash:w:mouse.hex

Langkah 5 Kita bisa membuat BAT download untuk mempermudah dengan menggunakan text editor sebagai berikut :
60

Surabaya Roboholic

Langkah 6 Kita bisa menggabungkan dengan program codevision AVR. Adapun dalam hal ini kita menggunakan Versi Evaluasi dari Codevision AVR (Versi Evaluasi adalah versi gratis download dengan berbagai keterbatasan codevision)

Setting pada program dengan cara : Pilih Menu Tools -> Configure kemudian pilih atau klik Add

dan

61

Surabaya Roboholic

Masukkan Open

file

mouse.bat

kemudian

Kemudian pilih Tool Setting Command Line Parameters

dan isi dengan


62

Surabaya Roboholic namafile.HEX (sesuai nama file project kita)

Kemudian setelah tahapan kompilasi, tahapan download dengan menggunakan SHIFT+F6 dan tekan enter apabila siap mendownloadkan file HEX project anda ke IC mikrokontroler anda

--- Selamat Mencoba ---

63

Surabaya Roboholic PENGENALAN DAN PEMASANGAN PERANGKAT

Adapun urutan dari Pin pada perangkat pemrogram adalah :

(a) Posisi Amphenol

1 Set USB uC
64

Surabaya Roboholic AVR download er

(b) Konfigurasi detail IDC amphenol USB avr downloader

65

Surabaya Roboholic

BAB IV Pemrograman I/O Mikrokontroller


4.1. Pemrograman PORT sebagai masukan Langkah-langkah untuk menggunakan PORT pada mikrokontroller adalah dengan mengakses PORTB untuk menyalakan lampu LED adalah : Pilih File kemudian NEW kemudian pilih Project

Gambar 4.1. Membuat Project baru

Gunakan Codewizard untuk menentukan tipe IC mikrokontroller yang digunakan

66

Surabaya Roboholic

Gambar 4.2. Memilih Tipe IC

Tentukan sifat PORTB sebagai PORT keluaran

Gambar 4.3. Menentukan Tipe PORTB

Pilih File Generate Save and Exit

67

Surabaya Roboholic

Gambar 4.4. Menyimpan Hasil Wizard

Beri nama file anda BARLED untuk project dan file anda

Gambar 4.5. Memberi nama file

68

Surabaya Roboholic Amati bahwa PORTB mempunyai format yang berbeda dengan yang lain

Gambar 4.6 Melakukan cek terhadap inisialisasi PORTB

Untuk membuat semua lampu pada BARLED off semua adalah :


while (1) { // Place your code here PORTB=255; };

Untuk membuat semua lampu pada BARLED ON semua adalah :


while (1) { // Place your code here PORTB=0; };

69

Surabaya Roboholic Untuk membuat lampu BARLED berkedip ON dan OFF selama 1 detik adalah :
#include <delay.h> . . . while (1) { // Place your code here // menyalakan semua lampu LED = aktif Low PORTB=0; // memberikan tundaan 1 detik = 1000ms delay_ms(1000); // mematikan semua lampu LED = aktif Low PORTB=255; // memberikan tundaan 1 detik = 1000ms delay_ms(1000); };

4.2. Pemrograman PORT sebagai keluaran Tentukan sifat PORTB sebagai PORT keluaran Pertama, ikuti langkah diatas kemudian tentukan PORTC sebagai masukan dan PORTB sebagai keluaran seperti berikut :

70

Surabaya Roboholic

Gambar 4.7 Menentukan Tipe PORT

Kemudian buat program dimana hasil pembacaan pada PORT C akan ditampilkan pada PORTB sebagai berikut :
while (1)

71

Surabaya Roboholic
{ };

// Place your code here PORTB=PINC;

72

Surabaya Roboholic

BAB V Pemrograman LCD


Fungsi LCD Berada pada header lcd.h yang harus diinclude-kan sebelum digunakan. Sebelum melakukan include terlebih dahulu disebutkan pada port mana LCD akan diletakkan. Hal ini juga dapat dengan mudah dilakukan dengan menggunakan CodeWizardAVR.

Gambar 5.1. LCD

Adapun alur untuk melakukan penulisan pada LCD adalah :

Gambar 5.2 Timing Diagram Pemrograman LCD

73

Surabaya Roboholic

Gambar 5.3 Mengatur Pergerakan LCD

Gambar 5.4 Diagram Alir untuk melakukan penulisan pada LCD 74

Surabaya Roboholic

Adapun penyusunan hubungan antara kaki LCD dengan mikrokontroler AVR ATmega 16 adalah sebagai berikut :

Gambar 5.5 Urutan Kaki LCD

Tahapan untuk mengakses LCD mikrokontroler AVR ATmega16 adalah :

dari

75

Surabaya Roboholic

Gambar 5.6 Tahapan pengaturan fungsi mikrokontroller

76

Surabaya Roboholic
Penentuan untuk mengaktifkan LCD mikrokontroler AVR ATmega16 adalah : pada

Gambar5.7 Cara mengaktifkan LCD /* modul LCD dihubungkan dengan PORTD */ // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x12 ;PORTD #endasm /* sekarang fungsi LCD dapat di-include*/ #include <lcd.h>

77

Surabaya Roboholic
Fungsi-fungsi untuk mengakses LCD diantaranya adalah : unsigned char lcd_init(unsigned char lcd_columns) Untuk menginisialisasi modul LCD, menghapus layar dan meletakkan posisi karakter pada baris ke-0 kolom ke-0. Jumlah kolom pada LCD harus disebutkan (misal, 16). Kursor tidak ditampakkan. Nilai yang dikembalikan adalah 1 bila modul LCD terdeteksi, dan bernilai 0 bila tidak terdapat modul LCD. Fungsi ini harus dipanggil pertama kali sebelum menggunakan fungsi yang lain. void lcd_clear(void) Menghapus layar LCD dan meletakkan posisi karakter pada baris ke-0 kolom ke-0. void lcd_gotoxy(unsigned char x, unsigned char y) Meletakkan posisi karakter pada kolom ke-x baris ke-y. Nomor baris dan kolom dimulai dari nol. void lcd_putchar(char c) Menampilkan karakter c pada LCD. void lcd_putsf(char *str) Menampilkan string yang disimpan pada SRAM pada LCD. Fungsi Delay
78

Surabaya Roboholic
Menghasilkan delay dalam program-C. Berada pada header delay.h yang harus di-includekan sebelum digunakan. Sebelum memanggil fungsi, interrupsi harus dimatikan terlebih dahulu, bila tidak maka delay akan lebih lama dari yang diharapkan. Juga sangat penting untuk menyebutkan frekuensi clock chip IC AVR yang digunakan pada menu Project- Configure-C Compiler-Code Generation. Fungsi delay yang disediakan adalah: void delay_us(unsigned int n) menghasilkan delay selama n -detik, n adalah nilai konstan void delay_ms(unsigned int n) menghasilkan delay selama n mili-detik, n adalah nilai konstan Kedua fungsi tersebut secara otomatis akan mereset watchdog-timer setiap 1 milidetik dengan mengaktifkan instruksi wdr

Adapun contoh program untuk mengakses LCD dengan menampilkan kalimat HELLO adalah : // LCD module initialization lcd_init(16);
while (1) { // Place your code here // menulis karakter pada kolom ke 0 baris ke 0

79

Surabaya Roboholic
lcd_gotoxy(0,0); // menulis kalimat HELLO pada layar LCD lcd_putsf("HELLO"); };

80

Surabaya Roboholic

BAB VI Operasi Arithmatika


Modul mikrokontroller dapat melakukan sebuah arithmatika, yaitu penjumlahan, pengurangan, perkalian dan pembagian dua buah bilangan, baik dengan menggunakan masukan bilangan melalui dipswitch atau memori internal dari mikro AVR itu sendiri. Adapun cara melakukan setting awal untuk operasi arithmatika dengan menggunakan masukan dipswitch dan hasil ditampilkan pada Bar LED adalah :

81

Surabaya Roboholic

Gambar 6.1. Menentukan Chip dan PORT

Sehingga mikro akan membaca data pada PORTB 4 bit LSB dan 4 bit data pada memory internal mikrokontroller kemudian dijumlahkan menjadi operasi ADDER 4 bit, hasil akan ditampilkan pada BARLED. Operasi Penjumlahan
int data1,data2,hasil; while (1) { // Place your code here data1=PINC & 0x0F; data2=0x05; hasil=data1+data2; PORTB=hasil; };

82

Surabaya Roboholic Hasil tersebut dapat juga ditampilkan pada LCD sebagai berikut :
char kalimat[10]; while (1) { // Place your code here data1=PINC & 0x0F; data2=0x05; hasil=data1+data2; sprintf(kalimat,"%d ",hasil); lcd_gotoxy(0,0); lcd_puts(kalimat); delay_ms(500); } Operasi Pengurangan int data1,data2,hasil; while (1) { // Place your code here data1=PINC & 0x0F; data2=0x05; hasil=data1-data2; PORTB=hasil; };

Hasil tersebut dapat juga ditampilkan pada LCD sebagai berikut :


char kalimat[10]; while (1) {

83

Surabaya Roboholic
// Place your code here data1=PINC & 0x0F; data2=0x05; hasil=data1-data2; sprintf(kalimat,"%d ",hasil); lcd_gotoxy(0,0); lcd_puts(kalimat); delay_ms(500); } Operasi Perkalian int data1,data2,hasil; while (1) { // Place your code here data1=PINC & 0x0F; data2=0x05; hasil=data1*data2; PORTB=hasil; };

Hasil tersebut dapat juga ditampilkan pada LCD sebagai berikut :


char kalimat[10]; while (1) { // Place your code here data1=PINC & 0x0F; data2=0x05; hasil=data1*data2; sprintf(kalimat,"%d ",hasil); lcd_gotoxy(0,0); lcd_puts(kalimat); delay_ms(500); 84

Surabaya Roboholic
} Operasi Pembagian int data1,data2,hasil; while (1) { // Place your code here data1=PINC & 0x0F; data2=0x05; hasil=data1/data2; PORTB=hasil; };

Hasil tersebut dapat juga ditampilkan pada LCD sebagai berikut :


char kalimat[10]; while (1) { // Place your code here data1=PINC & 0x0F; data2=0x05; hasil=data1/data2; sprintf(kalimat,"%d ",hasil); lcd_gotoxy(0,0); lcd_puts(kalimat); delay_ms(500); }

85

Surabaya Roboholic

BAB VII Analog To Digital Converter

Mikrokontroller AVR Atmega16 mempunyai perangkat Analog To Digital Converter atau ADC 8 bit yang berguna untuk mengubah data masukan berupa tegangan analog menjadi bentuk data digital. Untuk melakukan percobaan tersebut maka dapat dipasang rangkaian dengan urutan kaki sebagai berikut :

Board AVR yang digunakan menggunakan chip Atmega16. IC ini mempunyai ADC (Analog to Digital Converter) internal dengan fitur sebagai berikut (untuk lebih detil dapat mengacu ada datasheet) 10-bit Resolution 65 - 260 s Conversion Time Up to 15 kSPS at Maximum Resolution 8 Multiplexed Single Ended Input Channels Optional Left Adjustment for ADC Result Readout 0 - VCC ADC Input Voltage Range Selectable 2.56V ADC Reference Voltage
86

Surabaya Roboholic Free Running or Single Conversion Mode ADC Start Conversion by Auto Triggering on Interrupt Sources Interrupt on ADC Conversion Complete Sleep Mode Noise Canceler

Gambar 7.1. Timer Diagram untuk Mode Single Conversion

Gambar 7.2. Konfigurasi LDR untuk masukan analog ke Atmega16

Register-register yang dipakai untuk mengakses ADC adalah: ADMUX ADC Multiplexer Selection Register
87

Surabaya Roboholic

88

Surabaya Roboholic

ADCSRA ADC Control and Status Register

89

Surabaya Roboholic

Bit 7 ADEN : ADC Enable Diisi 1 untuk mengaktifkan ADC, diisi 0 untuk mematikan ADC sekaligus memberhentikan konversi yang sedang berlangsung. Bit 6 ADSC : ADC Start Conversion Pada mode single-conversion, set bit ini untuk memulai tiap konversi. Pada mode free-running, set bit ini untuk konversi pertama kalinya. Bit ADSC bila dibaca akan bernilai 1 selama proses konversi, dan bernilai 0 bila konversi selesai. Mengisi bit ini dengan nilai 0 tidak akan mempunyai dampak. Bit 5 ADATE : ADC Auto Trigger Enable Bila bit ini diisi 1 maka auto trigger ADC akan diaktifkan. ADC akan memulai konversi pada saat tepi positif dari sumber sinyal trigger yang dipilih. Sumber sinyal trigger ditentukan dengan menseting bit ADTS pada register SFIOR. Bit 4 ADIF : ADC Interrupt Flag Bit ini akan bernilai 1 pada saat ADC selesai mengkonversi dan Data register telah diupdate. ADC Conversion Complete Interrupt akan dijalankan bila bit ADIE dan bit-I pada register SREG diset 1. ADIF akan di-clear secara hardware bila mengerjakan penanganan

90

Surabaya Roboholic vektor interrupt yang bersesuaian. Alternatifnya, ADIF dapat di-clear dengan menuliskan 1. Hati-hati bila bekerja dengan Read-Modify-Write pada ADCSRA, interrupt yang tertunda dapat dinonaktifkan/batal. Hal ini juga berakibat sama bila instruksi SBI dan CBI digunakan. Bit 3 ADIE : ADC Interrupt Enable Mengisi bit ini dan bit-I pada register SREG menjadi 1 akan mengaktifkan ADC Conversion Complete Interrupt. Bit 2:0 ADPS2:0 Bit pemilih ADC Prescaler Menentukan bilangan pembagi antara sumber clock XTAL ke clock ADC.

ADCL, ADCH ADC data register Bila ADCLAR = 0

91

Surabaya Roboholic

Bila ADCLAR = 1

Setelah ADC selesai melakukan konversi kedua register ini berisi hasil konversi. Bila channel differensial dipilih maka hasilnya dalam format twos complement. Saat ADCL dibaca, data register tidak akan meng-update data sampai ADCH dibaca. Jika hasilnya dirata kiri (left adjust) dan hanya butuh 8-bit maka cukuplah dengan membaca ADCH. Jika butuh 10-bit, baca ADCL dahulu kemudian ADCH. SFIOR Special Function I/O Register untuk sumber auto triger

92

Surabaya Roboholic

Bit 7:5 ADTS2:0 : ADC Auto Trigger Source Bila ADATE dalam register ADCSRA diset 1, maka nilai dalam bit-bit ini akan menentukan sumber mana yang akan mentrigger konversi ADC. Bila bit ADATE bernilai 0, maka bit-bit ini tidak akan mempunyai efek. Sebuah konversi ditrigger oleh sinyal rising-edge dari interrupt flag yang dipilih. Perlu diingat bahwa memindah sumber trigger yang di-clear ke sumber trigger lain yang di-set akan menyebabkan positive-edge pada sinyal trigger. Bila ADEN dalam register. ADCSRA diset, juga akan memulai konversi. Memindah mode ke mode freerunning tidak akan menyebabkan pulsa trigger, meskipun bila flag interrupt ADC diset.

Bit 4 RES : Reserved bit Bit cadangan, bila dibaca hasilnya nol. Berikut adalah langkah-langkah yang harus dilakukan untuk melakukan konversi mode

93

Surabaya Roboholic single-conversion pada ADC internal dari Atmega16: 1. Seting register ADMUX. 2. Seting register ADCSRA. 3. Seting register SFIOR (untuk nomor 1, 2, dan 3 dilakukan oleh CodeWizardAVR). 4. Pilih channel ADC pada register ADMUX. 5. Start konversi ADC dengan cara mengaktifkan bit ADSC pada register ADCSRA. 6. Bila ADC selesai melakukan konversi, program akan meloncat ke layanan interupsi ADC. 7. Ambil data pada register ADCH. 8. Tampilkan nilai pada LCD. 9. Delay sekitar 500 milidetik, agar tampilan pada LCD dapat dilihat. 10. Jika diinginkan, ulangi langkah 4. Berikut adalah langkah-langkah pemrograman ADC : 1. Jalankan software CodeVisionAVR. 2. Buatlah project baru, dengan menggunakan CodeWizardAVR: a. menseting chip menggunakan Atmega16 pada clock 11.0592 MHz b. menseting LCD pada portD c. menseting ADC seperti pada gambar 7.3.

94

Surabaya Roboholic

Gambar 7.3. Setting LCD dan ADC pada CodeWizardAVR

3. Pada CodeWizardAVR tersebut pilih File Generate, Save and Exit. Beri nama dan simpan pada direktori baru didalam direktori d:\dataku. 4. Pada source program-C yang dihasilkan, tambahkan header delay.h dan stdio.h. 5. Pada bagian bawah didalam mainprogram, tambahkan perintah (yang berwarna merah)
// LCD module initialization lcd_init(16); // Tambahkan baris berikut lcd_gotoxy(0,0); lcd_putsf("Cahaya pada LDR"); lcd_gotoxy(0,1); lcd_putsf("adalah ="); // Pilih ADC channel ke-7 ADMUX = ADMUX | 0x07;

95

Surabaya Roboholic
// Start ADC ! ADCSRA = ADCSRA | 0x40; // Global enable interrupts #asm("sei")

6. Pada rutin layanan interupsi ADC, tambahkan perintah berikut:


// ADC interrupt service routine interrupt [ADC_INT] void adc_isr(void) { unsigned char adc_data; char kalimat[10]; // Read the 8 most significant bits adc_data=ADCH; // Place your code here sprintf(kalimat,"%d ",adc_data); lcd_gotoxy(9,1); lcd_puts(kalimat); delay_ms(500); // Start ADC again ! ADCSRA = ADCSRA | 0x40; }

7. Lakukan check syntax, compile dan make. Bila tidak ada error, programkan ke dalam flash. Cobalah untuk membuka dan menutup LDR, perhatikan tampilan pada layar LCD.

96

Surabaya Roboholic

BAB VIII Interupsi, Timer dan Counter

Mikrokontroller dapat melakukan suatu aktivitas yang dinamakan interupsi, dimana mikro bisa menunda suatu aktivitas untuk melakukan aktivitas yang diminta saat itu. Seperti halnya bila seorang siswa yang mengangkat tangan dan menanyakan sesuatu kepada dosennya, dan saat itu juga dosen akan menjawab pertanyaan dari siswanya. Mikrokontroller juga dapat melakukan suatu tundaan aktvitas dengan melakukan perhitungan berdasarkan dari detak clock yang ditentukan pada codewizard, sehingga mikro tersebut bisa menunda atau menyelenggarakan jalannya suatu aktivitas selama masa waktu yang diinginkan. Pada percobaan ini akan kita buat program untuk membuat nyala lampu LED selama masa waktu yang telah ditemtukan dengan konsep Pulse Width Modulation atau PWM dengan Timer dan Interupsi. Adapun adalah : langkah-langkah yang dilakukan

97

Surabaya Roboholic Menyalakan lampu BARLED dengan konsep PWM menggunakan Interupsi Timer,

Gambar 8.1. Memilih Tipe IC AVR

98

Surabaya Roboholic

Gambar 8.2. Menentukan Timer 0 Overflow

Membuat dan menyisipkan program Interupsi Timer dan PWM


unsigned char x,pwm; // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Place your code here x++; if(x>=pwm) PORTB=0; // fungsi interupsi timer else PORTB=255; // PORTB = BARLED aktif Low } . while (1) { // Place your code here

99

Surabaya Roboholic
pwm=200; 200/256*T Mhz }; } // led akan menyala selama =

100

Surabaya Roboholic

BAB IX Komunikasi Serial


Mikrokontroller dapat melakukan komunikasi dengan PC dengan menggunakan PORT Tx dan PORT Rx yang dimilikinya. Adapun komunikasi yang terjadi adalah melalui IC RS232. Kecepatan berkomunikasi bisa ditentukan dengan cara melakukan setting pada codewizard dari codevision AVR, dan kemampuan berkomunikasi bisa kita tentukan dengan cara menentukan menggunakan komunikasi dua arah atau satu arah saja yaitu memilih aktivasi TX dan RX AVR. Adapun langkah-langkah komunikasi serial adalah : dari penentuan

101

Surabaya Roboholic

Gambar 9.1. Menentukan tipe AVR dan komunikasi serial

Pada gambar diatas, dipilih codewizard untuk mengaktifkan fungsi TX dan RX dari AVR Atmega16. Kemudian untuk mengecek data serial dari PC digunakan instruksi getchar() dan untuk mengirimkan data dari mikrokontroller ke PC digunakan instruksi putchar(). Berikut adalah program untuk melakukan komunikasi dua arah antara mikrokontroller dan PC secara serial. while (1) { if (getchar()=='a') { // memberi jawaban ke PC
102

Surabaya Roboholic putchar(66); } };

103