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).
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.
Konfigurasi Pin ATmega16
Atmega 16 memepunyai kaki standart 40 pin PID yang mempunyai
fungsi sendiri-sendiri seperti gambar di bawah ini.
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.
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 berikut.
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 berikut.
Mikrokontroler disini digunakan sebagai komunikasi antara computer
dengan Plant, dimana digunakan komunikasi serial RS232 sebagai
komunikasi antara Mikrokontroler dengan Komputer. (Wardhana.L ,2006).
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 berikut.
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 berikut.
Tabel Konfigurasi Bit COM01 dan COM00 Compare Output Mode Phase Correct PWM
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 berikut.