Wednesday, July 13, 2011

Tutorial Code Vision AVR Dan Atemega16, y

Install CODEVISIONAVR

TENTANG CODEVISIONAVR
CodeVisionAVR merupakan sebuah cross-compiler 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 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
  • EEPROM DS2430 dan DS2433 dari Maxim/Dallas Semiconductor
  • SPI
  • Power Management
  • Delay
  • Konversi ke Kode Gray

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 Real-Time Clock PCF8563, PCF8583, DS1302, dan DS1307
  • Inisialisasi Bus 1-Wire dan Sensor Suhu DS1820, DS18S20
  • Inisialisasi modul LCD

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 is1. file setup.exe

Untuk pilihan bahasa pilih English, klik OK, seperti pada Gambar is2.

Gambar is2 Pilihan bahasa

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

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

Gambar is4. Menyetujui syarat-syarat yang diberikan

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

Gambar is5. Menentukan lokasi tujuan
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 is6.

Gambar is6. Setuju untuk membuat tempat baru

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

Gambar is7. Nama folder pada Start Menu

Program CodeVisionAVR telah siap untuk di-install. Tekan tombol Install seperti pada Gambar is8. Maka proses instalasi akan bekerja seperti ditunjukkan oleh Gambar is9. Setelah selesai akan dimunculkan kotak dialog informasi seperti pada Gambar is10.

Gambar is8. Nama folder pada Start Menu


Gambar is9. Proses instalasi sedang berlangsung


Gambar is10. Informasi tambahan

Klik tombol next pada Gambar is10 untuk mengakhiri proses instalasi. Setelah kotak dialog seperti yang ditunjukkan oleh Gambar is11 muncul, Anda dapat menekan tombol Finish dengan pilihan langsung menjalankan software CodeVisionAVR atau tidak.

Gambar is11. 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 cvi1.

Gambar cvi1. Shortcut untuk melakukan un-install

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

Gambar cvi2. Yakin akan membuang aplikasi dari komputer

Berikutnya proses pembuangan aplikasi berlangsung seperti ditunjukkan oleh Gambar cvi3. Lalu kotak dialog seperti Gambar cvi4 akan muncuk, klik OK untuk menutup proses pembuangan.

Gambar cvi3. Proses un-install sedang berlangsung


Gambar cvi4. Proses selesai

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 1. CodeVisionAVR pada Desktop

Sebuah Splash Screen akan muncul seperti ditunjukkan oleh Gambar 2. Informasi tentang versi yang dipakai dan keterangan evaluation akan terlihat.

Gambar 2. Tampilan Splash Screen
Beberapa detik kemudian IDE dari CodeVisionAVR akan muncul seperti yang ditunjukkan oleh Gambar 3.

Gambar 3. IDE CodeVisionAVR

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

Gambar 4. Membuat file baru

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

Gambar 5. Membuat project baru

Berikutnya Anda akan ditanya apakah akan menggunakan CodeWizardAVR. Tentu saja lebih menyenangkan bila Anda memilih jawaban “ya” dengan cara menekan tombol Yes seperti pada Gambar 6.

Gambar 6. Memilih untuk menggunakan CodeWizardAVR

Tampilan CodeWizardAVR yang sederhana namun lengkap ditunjukkan oleh Gambar 7. 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.

Gambar 7. 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 8. Artinya Port A digunakan sebagai port output dengan nilai awal nol setelah kondisi reset. Kemudian lakukan inisialisasi Port B seperti pada Gambar 9. 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 dengan huruf P. Dengan mengaktifkan resistor pull-up internal, Anda tidak perlu menambahkan resistor pull-up pada saklar.

Gambar 8. Seting Port A sebagai pin output


Gambar 9. Seting Port B sebagai pin input dengan pull-up resistor
LCD alphanumeric yang dihubungkan dengan Port C haruslah mempunyai pengkawatan seperti yang ditunjukkan oleh Gambar 10. Pada tab LCD, pilihlah Port C.

Gambar 10. 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 11.

Gambar 11. Menyimpan seting
Agar file yang dihasilkan tidak berantakan, buatlah sebuah folder baru, misalnya folder bernama “my project”, seperti yang ditunjukkan oleh Gambar 12.

Gambar 11. 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 12. File tersebut nantinya akan mempunyai akhiran .C.

Gambar 12. 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 13. File tersebut nantinya akan mempunyai akhiran .prj.

Gambar 13. 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 14. File tersebut nantinya akan mempunyai akhiran .cwp.

Gambar 14. 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 15.

Gambar 15. 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 16.

Gambar 16. 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 iaktifkan maka LED yang bersesuaian akan aktif pula. Kemudian pilih menu Project �� Compile untuk melakukan kompilasi seperti yang ditunjukkan oleh Gambar 17. Lalu kotak dialog seperti ditunjukkan Gambar 18 akan muncul. Klik tombol OK.

Gambar 17. Melakukan kompilasi


Gambar 18. 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 19.

Gambar 19. Melakukan seting pada programmer

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

Gambar 20. Menggunakan programmer STK200+/300

Kemudian pilih menu Project �� Configure, seperti yang ditunjukkan oleh Gambar 21. Kotak dialog pada Gambar 22 akan muncul, pada tab After Make, pilih “Program the Chip”. Lalu klik tombol OK.

Gambar 21. Melakukan konfigurasi project


Gambar 22. Memilih opsi “Program the Chip” After Make

Setelah melakukan seting, lakukan make project dengan memilih menu Project �� Make, seperti ditunjukkan oleh Gambar 23. Apabila tidak ada kesalahan maka kotak dialog informasi seperti pada Gambar 24 akan muncul. Klik tombol Program untuk mentransfer program kedalam mikrokontroler.

Gambar 23. Melakukan make project


Gambar 24. Kotak dialog informasi hasil make

Apabila muncul kotak dialog seperti pada Gambar 25 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 25. Gagal melakukan transfer program

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

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


Tuesday, July 12, 2011

Sistem Kontrol Tertutup & mikrokontroler Atmega16

1.1    Sistem Kontrol Tertutup
Sistem kontrol tertutup adalah cara tebaik untuk mengontrol suatu sistem, dimana sistem ini biasanya dilengkapi dengan sebuah sensor untuk mengukur keluaran dan kemudian membandingkan keluaran tersebut dengan keluaran yang kita inginkan dari suatu sistem. Perbedaan antara keluaran yang dihasilkan dengan keluaran yang diinginikan sering disebut dengan eror. Eror tersebut digunakan untuk mengarahkan dari sistem pada titik dimana nilai keluaran yang dihasilkan dengan nilai keluaran yang kita inginkan  (setting point) adalah sama.
Cara ini disebut menggunkan sistem kontrol tertutup atau bisa juga disebut sebagai pengontrolan dengan feedback. Gamabar 1.1 menunjukkan sebuah sistem kontrol tertutup . satu dari keuntungan sistem kontrol tertutup adalah kemampuannya untuk menghindari/ mengurangi gangguan dari luar dan hasil dari proses tersebut lebih tepat meski banyaknya prosentasi dari gangguan yang diperoleh plant. Gambar sistem kontrol tertutup dapat dilihat pada gambar 1.1.





Gambar 1.1 Sistem Kontrol Tertutup

Sebuah kontrol biasanya digunakan untuk membaca eror dan mengarahkan plant ke arah nilai eror cenderung sama dengan nol. Sistem kontrol tertutup ini mempunyai keuntungan lebih besar keakuratannya dibandingkan dengan sistem kontrol terbuka. Sistem ini juga lebih sensitif terhadap gangguan dan perubahan dari lingkungannya. Waktu dari respon dan eror dari steady state  dapat dikontrol dalam sebuah sistem kontrol tertutup.

1.2  Mikro Kontroler Atmega 16
       Mirkokontroler AVR (Alf and Vegard’s Risc processor) standar memiliki arsitektur 8 bit, dimana semua instruksi dikemas dalam kode 16-bit, dan sebagian besar intruksi dieksekusi dalam 1(satu) siklus clock. AVR berteknologi RISC (Reduced Instruction Set Computing), sedangkan MCS51 berteknologi CISC (Complex Intruction Set Computing).
       AVR dapat dikelompokkan menjadi empat kelas, yaitu keluarga Attiny, keluarga AT902xx, keluarga Atmega, dan keluarga AT86RFxx. Pada dasarnya yang membedakan masing-masing kelas adalah memori, peripheral, dan fungsinya. Silahkan buka www.atmel.com untuk informasi lebih lanjut tentang berbagai variasi AVR. Untuk mikrokontroler AVR yang berukuran lebih kecil, silahkan mencoba Atmega8, Attiny2313 dengan ukuran Flash Memory 2KB dengan dua input analog.
Mikrokontroler pada dasarnya diprogram dengan bahasa assembler. Tetapi  Saat ini mikrokontroler dapat deprogram dengan menggunakan bahasa tingkat tinggi sepert BASIC, PASCAL atau C. Bahasa tingkat tinggi tersebut memiliki beberapa keuntungan dibandingkan dengan bahasa asembler :
·         Lebih mudah membangun program dengan menggunakan bahasa tingkat tinggi
·         Perbaikan program lebih mudah jika program dibangun menggunakan bahasa tingkat tinggi
·         Testing program didalam bahasa tingkat tinggi lebih mudah
·         Bahasa tingkat tinggi lebih banyak dikenal dan error program yang dibuat dapat dihindari
·         Mudah mendokumentasikan sebuah program tingkat tingggi
      Meskipun demikian, bahasa tingkat tinggi juga memiliki beberapa kelemahan, contohnya ukuran kode memori biasanya besar, dan program yang dibangun menggunakan bahasa asembler biasanya bekerja cepat dibangdingkan dengan program yang dibangun menggunakan bahasa tingkat tinggi. 

Didalam mikrokontroler Atmega16 terdiri dari:
  • Saluran I/O ada 32 buah, yaitu Port A, Port B, Port C, dan Port D.
  • ADC (Analog to Digital Converter) 10 bit sebanyak 8 channel.
  • Tiga buah Timer/Counter dengan kemampuan perbandingan.
  • CPU yang terdiri dari 32 register.
  • 131 intruksi andal yang umumnya hanya membutuhkan 1 siklus clock.
  • Watchdog Timer dengan oscilator internal.
  • Dua buah Timer/Counter 8 bit.
  • Satu buah Timer /Counter 16 bit.
  • Tagangan operasi 2.7 V - 5.5 V pada Atmega16.
  • Internal SRAM sebesar 1KB.
  • Memory Flash sebesar 16KB dengan kemampuan Read While Write.
  • Unit interupsi internal dan eksternal.
  • Port antarmuka SPI.
  • EEPROM sebesar 512 byte dapat diprogram saat operasi.
  • Antar muka komparator analog.
  • 4 channel PWM.
  • 32x8 general purpose register.
  • Hampir mencapai 16 MIPS pada Kristal 16 MHz.
  • Port USART programmable untuk komunikasi serial.
1.2 .1 Konfigurasi Pin ATmega16
Atmega 16 memepunyai kaki standart 40 pin PID yang mempunyai fungsi sendiri-sendiri. Untuk lebih jelas tentang konigurasi Pin Atmega 16 bisa di lihat pada gambar 1.2.

Gambar 1.2 Konfigurasi Pin Atmega 16

Gambar di atas merupakan susunan kaki standar 40 pin mikrokontroler AVR Atmega16. Berikut penjelasan umum susunan kaki Atmega16 tersebut:
  • VCC merupakan pin masukan positif catudaya. Setiap peralatan elektronika digital tentunya butuh sumber catu daya yang umumnya sebesar 5 V, itulah sebabnya di PCB kit rangkaian mikrokontroler selalu dipasang IC regulator 7805.
  • GND sebagai PIN ground.
  • Port A (PA0 ... PA7) merupakan pin I/O dua arah dan dapat diprogram sebagai pin masukan ADC.
  • Port B (PB0 ... PB7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu Timer/Counter, Komparator Analog, dan SPI.
  • Port C (PC0 ... PC7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu TWI, komparator analog, dan Timer Oscilator.
  • Port D (PD0 ... PD7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu komparator analog, interupsi eksternal, dan komunikasi serial.
  • Reset merupakan pin yang digunakan untuk me-reset mikrokontroler ke kondisi semula.
  • XTAL 1 dan XTAL 2 sebagai pin masukan clock eksternal. Suatu mikrokontroler membutuhkan sumber detak (clock) agar dapat mengeksekusi intruksi yang ada di memori. Semakin tinggi  nilai kristalnya, maka semakin cepat pula mikrokontroler tersebut dalam mengeksekusi program.
  • AVCC sebagai pin masukan tegangan untuk ADC.
  • AREF sebagai pin masukan tegangan referensi.
1.2 .2  Port sebagai input/output digital
ATMega16 mempunyai empat buah port yang bernama  PortA, PortB, PortC, dan PortD. 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 register 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  tri-state  (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 sepenuhnya, selama lingkungan impedansi tinggi tidak memperhatikan perbedaan antara sebuah  strong high driver  dengan sebuah  pull-up. Untuk lebih jelasnya, dapat dilihat pada gambar 1.3 .
Gambar 1.3  Diagram Blok Mikrokontroler ATMega16
1.2.3   Peta Memori
       AVR ATMega16 memiliki ruang pengalamatan memori data dan memori program yang terpisah. Memori data terbagi menjadi 3 bagian, yaitu 32 buah register umum, 64 buah register I/O, dan 1kb SRAM internal.
Register keperluan umum menempati space data pada alamat terbawah, yaitu $00 sampai $1F. Sementara itu, register khusus untuk menangani I/O dan kontrol terhadap mikrokontroler menempati 64 alamat berikutnya, yaitu mulai dari $20 hingga $5F. Register tersebut merupakan register yang khusus digunakan untuk mengatur fungsi terhadap berbagai peripheral mikrokontroler,
seperti kontrol register, timer/counter, fungsi – fungsi I/O, dan sebagainya. Alamat memori berikutnya yang digunakan untuk SRAM 1kb, yaitu pada lokasi $60 sampai dengan $45F. Konfigurasi memori data ditunjukan pada gambar 1.4

Gambar 1.4 Konfigurasi Memori Data AVR ATMega 16
       Mikrokontroler disini digunakan sebagai komunikasi antara computer dengan Plant, dimana digunakan komunikasi serial RS232 sebagai komunikasi antara Mikrokontroler dengan Komputer. (Wardhana.L ,2006).

1.2.4   Pulse Width Modulation (PWM)
       PWM atau modulasi lebar pulsa adalah salah satu keunggulan dari Timer/Counter yang terdapat pada ATMega16. Ketiga jenis Timer/Counter pada ATMega32 dapat menghasilkan pulsa PWM. Pulsa PWM adalah sederetan pulsa yang lebar pulsanya dapat diatur. Pulsa PWM berfungsi mengatur kecepatan motor DC, mengatur gelap terang LED dan lain sebagainya.
        Untuk memahami penggunaan PWM, disini digunakan Timer/Counter  1 sebagai PWM. PWM adalah Timer Mode Output Compare yang canggih. Mode PWM timer juga dapat mencacah turun yang berlawanan dengan mode Timer lainya yang hanya mencacah naik. Pada mode PWM tersebut, Timer  mencacah naik hingga mencapai nilai TOP, yaitu 0xFF untuk PWM 8 bit. Timer/Counter 1 memiliki PWM 9 bit dan PWM 10 bit, selain PWM 8 bit. Pemilihan Timer Mode PWM diseting melalui bit WGM01 dan bit WGM00 pada register TCCR0. Tabel Konfigurasi Bit WGM01 dan WGM00 dapat dilihat pada tabel 1.1.

Tabel 1.1 Konfigurasi Bit WGM01 dan WGM00
Mode
WGM01 (CTC 0)
WGM00
(PWM0)
Timer Conunter Mode of Operation
TOP
Update of OCR0
TOV0 Flag Set-on
0
0
0
Normal
0XFF
Immadiete
MAX
1
0
1
PWM, Phase Correct
0XFF
TOP
BOTTOM
2
1
0
CTC
OCR0
Immadiete
MAX
3
1
1
Fast PWM
0XFF
TOP
MAX

       Sebagai penggunaan mode PWM Timer / Counter 0, keluaran sinyal PWM terletak pada pin OC0 sehingga pada contoh ini LED diletakkan pada pin OC0. Ketika nilai TCNT0 sama dengan nilai pada OCR0, maka output pada OC0 akan berlogika nol atau berlogika satu, tergantung pada pemilihan mode PWM. Anda dapat memilih mode normal atau mode inverted PWM. Pemilihan mode PWM diseting melalui bit COM01 dan bit COM00 pada register TCCR0 yang konfigurasinya seperti tabel 2.2
Tabel 1.2 Konfigurasi Bit COM01 dan COM00 Compare Output Mode Phase Correct PWM
COM01
COM00
Dscription
0
0
Normal port operation,OC0 disconnected
0
1
Reserved
1
0
Clear OC0 on compare match when up-connection Set OC0 on compare match downcounting
1
1
Set OC0 on compare match when up-counting. Clear OC0 on compare match when downcounting

       Dari tabel diatas  dapat diketahui saat COM00 clear dan COM01 set, pin OC0 clear saat timer mencacah diatas Compare Match dan pin OC0 set saat timer mencacah dibawah Compare Match atau non-inverting PWM. Kebalikannya, saat COM00 set dan COM01 juga set, maka pin OC0 set saat timer mencacah diatas Compare Match dan pin OC0 clear saat mencacah dibawah Compare Match atau disebut juga inverting PWM. Untuk lebih jelasnya, perhatikan gambar 1.5.

Gambar 1.5 Pulse PWM Inverting dan Non – Inverting


by : Siagian.P

Reff : Atmel.com