Professional Documents
Culture Documents
A. Pengertian AVR ATMEGA 16 AVR merupakan seri mikrokontroler Complementary Metal Oxide
Semiconductor (CMOS) 8-bit buatan Atmel berbasis arsitektur RISC (Reduced Instruction Set Computer). Hampir semua instruksi pada program dieksekusi dalam satu siklus clock. AVR mempunyai 32 register general-purpose, timer/counter fleksibel dengan mode compare, interupsi internal dan eksternal, serial UART, programmable Watchdog Timer, power saving mode, ADC dan PWM. AVR pun mempunyai In-System Programmable (ISP) Flash on-chip yang mengijinkan memori program untuk diprogram ulang (read/write) dengan koneksi secara serial yang disebut Serial Peripheral Inteface (SPI).
B. Keunggulan AVR ATMEGA 16 AVR memilki keunggulan dibandingkan dengan mikrokontroler lain, keunggulan mikrokontroler AVR yaitu memiliki kecepatan dalam mengeksekusi program yang lebih cepat, karena sebagian besar instruksi dieksekusi dalam 1 siklus clock (lebih cepat dibandingkan mikrokontroler keluarga MCS 51 yang memiliki arsitektur Complex Intrukstion Set Compute). ATMEGA16 mempunyai throughput mendekati 1 Millions Instruction Per Second (MIPS) per MHz, sehingga membuat konsumsi daya menjadi rendah terhadap kecepatan proses eksekusi perintah. Beberapa keistimewaan dari AVR ATMEGA16 antara lain: 1. Mikrokontroler AVR 8 bit yang memilliki kemampuan tinggi dengan konsumsi daya rendah 2. Arsitektur RISC dengan throughput mencapai 16 MIPS pada frekuensi 16MHz 3. Memiliki kapasitas Flash memori 16 Kbyte, EEPROM 512 Byte dan SRAM 1 K byte 4. Saluran I/O sebanyak 32 buah, yaitu Port A, Port B, Port C dan Port D 5. CPU yang terdiri dari 32 buah register 6. Unit interupsi dan eksternal 7. Port USART untuk komunikasi serial 8. Fitur peripheral Tiga buah Timer/Counter dengan kemampuan perbandingan (compare) Dua buah Timer/Counter 8 bit dengan Prescaler terpisah dan Mode Compare
Satu buah Timer/Counter 16 bit dengan Prescaler terpisah, Mode Compare dan Mode Capture Real Time Counter dengan Oscillator tersendiri Empat kanal PWM 8 kanal ADC 8 Single-ended Channel dengan keluaran hasil konversi 8 dan 10 resolusi (register ADCH dan ADCL) 7 Diferrential Channel hanya pada kemasan Thin Quad Flat Pack (TQFP) 2 Differential Channel dengan Programmable Gain Antarmuka Serial Peripheral Interface (SPI) Bus Watchdog Timer dengan Oscillator Internal On-chip Analog Comparator 9. Non-volatile program memory C. Konfigurasi AVR Atmega 16
Konfigurasi pin ATMEGA16 dengan kemasan 40 pin Dual In-line Package (DIP) dapat dilihat pada Gambar 2.13. dari gambar diatas dapat dijelaskan fungsi dari masing-masing pin ATMEGA16 sebagai berikut. 1. VCC merupakan pin yang brfungsi sebagai masukan catu daya 2. GND merupakan pin Ground 3. Port A (PA0 PA7) merupakan pin input/output dua arah (full duplex) dan selain itu merupakan pin masukan ADC 4. Port B (PB0 PB7) merupakan pin input/output dua arah (full duplex) dan selain itu merupakan pin khusus, seperti dapat dilihat pada tabel dibawah ini.
Tabel Fungsi khusus PORT B PIN PB7 PB6 PB5 PB4 PB3 SCK (SPI Bus Serial Clock) Master Input/ Slave Otput MISO (SPI Bus Master Output/ Slave Input (SPI Slave Select Input) AIN1 (Analog Comparator Negative Input) OC0 (Timer/ Counter Output Compare Match Output) Fungsi khusus
PB2
PB1 PB0
T1 (Timer/ Counter1 External Counter Input) T0 T1 (Timer/ Counter0 External Counter Input) XCK (USART External Clock Input/Output)
5. Port A (PC0 PC7) merupakan pin input/output dua arah (full duplex) dan selain itu merupakan pin khusus, seperti dapat dilihat pada tabel dibawah ini.
Fungsi Khusus SCL (Two-wire Serial Bus Clock Line) SDA (Two-wire Serial BusData Input/Output Line) TCK Joint Test Action Group Test Clock) TMS (JTAG Test Mode Select) TDO (JTAG Data Out) TDI (JTAG Test Data In) TOSC1 (Timer Oscillator pin 1) TOSC2 (Timer Oscillator pin 2)
6. Port D (PD0 PD7) merupakan pin input/output dua arah (full duplex) dan selain itu merupakan pin khusus, seperti dapat dilihat pada tabel dibawah ini.
Tabel Fungsi Khusus Port D Pin PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 Fungsi Khusus RXD (USART Input Pin) TXD (USART Output Pin) INT0 (External Interupt 0 Input) INT1 (External Interupt 1 Input) OC1B (Timer/Counter1 Output Compare B Macth Output) OC1A (Timer/Counter1 Output Compare A Macth Output) ICP (Timer/Counter1 Input Capture Pin) OC2 (Timer/Counter2 Output Compare Macth Output)
7. RESET merupakan pin yang digunakan untuk me-reset mikrokontroler 8. XTAL1 dan XTAL2, merupakan pin masukan external clock 9. AVCC merupakan pin masukan tegangan untuk ADC 10. AREF merupakan pin masukan tegangan referensi untuk ADC.
D. Timer / Counter Mikrokontroler Atmega 16 Mikrokontroler AVR ATMEGA16 memiliki tiga buah Timer/Counter, yaitu: Timer 0 (8 bit), Timer 1 (16 bit) dan Timer 2 (8 bit). Namun, pada sub bab ini hanya akan membahas mengenai Timer/Counter 1 saja. Timer/Counter 1 mempunyai keunggulan dibanding Timer/Counter 0 atau 2, namun cara mengatur Timer 0, 1, 2 sama saja, yaitu pada masing-masing registernya. Timer/Counter 1 dapat menghitung sampai dengan 65536 Timer/Counter 0 atau 2 hanya sampai dengan 256. Selain itu, Timer 1 ini memiliki mode operasi sebanyak 16 mode (Tabel 2.8). Register pada Timer ini dibagi menjadi beberapa register dengan fungsi khusus, yaitu: control register A, control register B dan interrupt mask. Register register pada Timer/Counter 1 yang berfungsi untuk mengatur timer dan mode operasinya. Register tersebut mempunyai fungsi masing-masing sebagai berikut.
bit TCCR1A
Keterangan: Bit 7 dan 6 : Compare Output untuk kanal A Bit 5 dan 4 : Compare Output untuk kanal B
Bit COM1 ini mempunyai Compare Output Mode pada setiap mode operasinya. Mode tersebut mempengaruhi pin I/O OC1 A dan B.
COM1A1/COM1B1 COM1A1/COM1B1 0 0
0 1
1 0
Toggle OC1A/OC1B on compare match Clear OC1A/OC1B on compare match (low level)
COM1A1/COM1B1 COM1A1/COM1B1 0 0
Tabel Compare Output Mode Phase Correct dan Phase Correct & Frequency PWM COM1A1/COM1B1 COM1A1/COM1B1 Deskripsi 0 0 Normal Port Operation, OC1A/OC1B disconnected 0 1 Toggle OC1A on compare match, OC1B disconnected 1 0 Clear OC1A/OC1B on compare match when upcounting,set OC1A/OC1B on compare match when downcounting Clear OC1A/OC1B on compare match when upcounting, set OC1A/OC1B on compare match when down-counting
Bit 3 : Force Output untuk kanal A Bit 2 : Force Output untuk kanal B Bit 1 dan 0 : Waveform Generation Mode Mode operasi sebanyak 16 mode, diatur dalam bit WGM ini. Mode operasi tersebut ditunjukkan oleh Tabel di bawah ini. Tabel Deskripsi Bit WGM
Mode 0 1 WGM13 0 0 WGM12 (CTC1) 0 0 WGM11 (PWM11) 0 0 WGM10 (PWM10) 0 1 Mode Operasi Normal PWM, Phase Correct 8Bit 2 0 0 1 0 PWM, Phase Correct 9Bit 3 0 0 1 1 PWM, Phase Correct 10-Bit 4 5 6 0 0 0 1 1 1 0 0 1 0 1 0 CTC
Fast PWM, 8-Bit
0x01FF
TOP
BOTTOM
0x03FF
TOP
BOTTOM
Fast
PWM, 9Bit 7 0 1 1 1 Fast PWM, 10Bit 8 1 0 0 0 PWM, Phase and Frequency Correct ICR1 BOTTOM BOTTOM 0x03FF BOTTOM TOP
OCR1A
BOTTOM
BOTTOM
10
ICR1
TOP
BOTTOM
11
OCR1A
TOP
BOTTOM
12 13 14 15
1 1 1 1
1 1 1 1
0 0 1 1
0 1 0 1
CTC Reserved
Fast PWM Fast PWM
b. Timer/Counter Control Register 1 B (TCCR1B) Tabel TCCR1B 7 ICNC1 6 ICES1 5 4 WGM13 3 WGM12 2 CS12 1 CS11 0 CS10
Bit TCCR1B
Keterangan: Bit 7 : Input Capture Noise Canceler, ketika bit ini diset 1(high) maka Noise Canceler aktif dan masukkan dari Input Capture Pin (ICP1) terfilter. Bit 6 : Input Capture Edge Select, bit ini digunakan untuk trigger yang disebabkan oleh edge ICP1. Jika bit ini diset 1 maka sebuah rising edge (positif) akan men-trigger capture, Jika bit ini diset 0 maka sebuah falling edge (negatif)
akan men-trigger capture. Bit 5 : Reserved, bit ini akan digunakan pada tahap pengembangan selanjutnya. Bit 4 dan 3 : lihat deskripsi register TCCR1A. Bit 2, 1 dan 0 : Clock Select, bit ini digunakan untuk memilih jenis sumber clock untuk digunakan pada suatu timer/counter.
Tabel Deskripsi Clock Select Bit CS12 0 0 0 0 1 1 1 CS11 0 0 1 1 0 0 1 0 1 0 1 0 1 0 CS10 Deskripsi Tidak ada clock (Timer/Counter terhenti) CLK_I/O/1 (tanpa Prescaling) CLK_I/O/8 (dari Prescaling) CLK_I/O/64 (dari Prescaling) CLK_I/O/256 (dari Prescaling) CLK_I/O/1024 (dari Prescaling) Sumber clock (eksternal)berasal dari pin T1, clock pada falling edge 1 1 1 Sumber clock (eksternal)berasal dari pin T1, clock pada rising edge
c. TCNT1, digunakan untuk menyimpan nilai timer yang diinginkan. TCNT1 dibagi menjadi 2 register 8 bit, yaitu TCNT1H dan TCNT1L.
d. TIMSK dan TIFR, Timer Interrupt Mask Register (TIMSK) dan Timer Interrupt Flag (TIFR) digunakan untuk mengendalikan interrupt mana yang diaktifkan, dengan cara melakukan setting pada TIMSK dan untuk mengetahui interrupt mana yang sedang terjadi.
Tabel Register TIMSK 7 OCIE2 6 TOIE2 5 TICIE1 4 OCIE1A 3 OCIE1B 2 TOIE1 1 OCIE0 0 TOIE0
Bit TIMSK
Keterangan: Bit 7 : Timer/Counter2 Output Compare Match Interrupt Enable Bit 6 : Timer/Counter2 Overflow Interrupt Enable Bit 5 : Timer1 Input Capture Interrupt Enable Bit 4 : Timer/CounterA Output Compare Match Interrupt Enable Bit 3 : Timer/CounterB Output Compare Match Interrupt Enable Bit 2 : Timer/Counter1 Overflow Interrupt Enable Bit 1 : Timer/Counter0 Output Compare Match Interrupt Enable Bit 0 : Timer/Counter0 Overflow Interrupt Enable
Tabel Register TIFR 7 OCF2 6 TOV2 5 ICF1 4 OCF1A 3 OCF1B 2 TOV1 1 OCF0 0 TOV0
Bit TIFR
Keterangan: Bit 7 : Output Compare Flag2 Bit 6 : Timer/Counter2 Overflow Flag Bit 5 : Timer1 Input Capture Interrupt Flag Bit 4 : Output Compare Flag1A Bit 3 : Output Compare Flag1B Bit 2 : Timer/Counter1 Overflow Flag Bit 1 : Output Compare Flag0 Bit 0 : Timer/Counter0 Overflow Flag
e. OCR1n, Output Compare Register Timer 1 n (n = A, B) merupakan register yang digunakan untuk membangkitkan interupsi eksternal dengan melakukan perbandingan (Output Compare) atau juga dapat digunakan untuk membangkitkan bentuk gelombang (PWM). Fungsi tersebut di atas dikeluarkan oleh pin OC1n (n = A, B).
Setiap mode timer seperti CTC, Fast PWM, Phase Correct PWM dan Phase and Frequency Correct PWM, mempunyai persamaan untuk menghitung frekuensi (clock) yang akan dihasilkannya.
Dimana: fOCnA = frekuensi mode CTC pada OCRnA (n: H atau L) fclk_I/O = frekuensi kristal yang digunakan N = variable prescaler factor (1, 8, 64, 256 atau 1024) OCRnA = nilai register OCRnA (n: 1 atau 2)
b. Fast PWM RFPWM = () () ..................................................................................... (2.2) Dimana: RFPWM = Resolusi mode Fast PWM TOP = nilai maksimal pada register TCCRn (n: A atau B) fOCnxPWM = _ () .................................................................................. (2.3) Dimana: fOCnxPWM = frekuensi mode Fast PWM pada OCRnx (n: H atau L; x: A/B) fclk_I/O = frekuensi kristal yang digunakan
N = variable prescaler factor (1, 8, 64, 256 atau 1024) TOP = nilai maksimal pada register TCCRn (n: A atau B) c. Phase Correct PWM RPCPWM = RFPWM ......................................................................................... (2.4) Dimana: RPCPWM= resolusi mode Phase Correct PWM fOCnxPCPWM = _ ................................................................................... (2.5) Dimana: fOCnxPCxPWM = frekuensi mode Phase Correct PWM pada OCRnx (n: H atau L; x: A atau B) fclk_I/O = frekuensi kristal yang digunakan N = variable prescaler factor (1, 8, 64, 256 atau 1024) TOP = nilai maksimal pada register TCCRn (n: A atau B)
d. Phase and Frequency Correct PWM RPFCPWM = RFPWM ........................................................................................ (2.6) Dimana: RPFCPWM = resolusi mode Phase and Frequency Correct PWM fOCnxPFCPWM = fOCnxPCPWM ............................................................................ (2.7) Dimana: RPCPWM = frekuensi mode Phase and Frequency Correct PWM pada OCRnx (n: H atau L; x: A atau B) E. Masukan/Luaran (I/O) pada Mikrokontroler AVR Kali ini kita akan membahas tentang hal dasar berkaitan dengan konsep I/O atau masukan/luaran pada mikrokontroler AVR: Membaca tingkat tegangan masukan, apakah berlogika 0 (tegangan disekitar 0 volt) atau 1 (tegangan sekitar 5 volt maksimal); Mengeluarkan tingkat tegangan 0 (sekitar 0 volt) atau 1 (sekitar 5 volt); Untuk keperlua tersebut, AVR memiliki beberapa register yang terkait, yaitu DDRx, PORTx dan PINx9, berikut penjelasan masing-masing. 1. Register DDRx Digunakan untuk menentukan apakah sebuah pin pada sebuat PORT (A, B, C atau D) sebagai masukan atau luaran atau disebut sebagai arah (direction) dari pin yang bersangkutan: Berikan logika 1 (satu) pada bit yang terkait agar dijadikan sebagai luaran atau
output. Berikan logika 0 (nol) pada bit yang terkait agar dijadikan sebagai masukan atau input. Misal PORTA semua bit akan digunakan sebagai masukan, maka untuk mengaturnya kita gunakan perintah. DDRA= 0x00; //seluruh pin-pin pada Port A digunakan sebagai input Misalnya lagi, PORTA.0 akan dijadikan masukan sedangkan PORTA.2 sampai PORTA.7 akan digunakan sebagai luaran, maka perintahnya... DDRA= 0xFE; Perhatikan 0xFE (heksa) = 0b11111110 (biner), perhatikan baik-baik konversi biner ini, setiap bit nilai biner mewakili Pin-Pin pada PortA.
2. Register PORTx Sebagaimana dijelaskan sebelumnya, jika sebuah PORT, semua atau sebagian, dikonfigurasi sebagai masukan, maka register ini berfungsi sebagai penentu apakah kondisi pin yang terkait di-pullup atau Floating. Begitu juga jika dikonfigurasi sebagai luaran, maka register ini menentukan kondisi pin yang terkait terbaca HIGH atau LOW. Untuk memahami hal ini, perhatikan Gambar. Gambar Kondisi pullup pada suatu PORT
Penjelasan: Jika PIN.1 dihubungkan ke VCC (tegangan 5 Volt) melalui resistor (R), maka inilah yang di maksud dengan pullup. Saat tidak ada tegangan dari luar, PIN.1 akan cenderung berkondisi HIGH (logika 1). Sedangkan PIN.2 dibiarkan begitu saja sehingga kondisi logik dari PIN.2 begitu rentan terhadap pengaruh disekitarnya. PIN.2 bisa berlogika HIGH, bisa juga berlogika LOW, ini
artinya logika PIN.2 mengambang (floating). Kondisi floating biasanya diperlukan saat PIN sebuah mikrokontroler dihubungkan ke suatu sensor. Karena jika di pullup, dikhawatirkan kondisi logik PIN tersebut mengganggu kondisi logik pin-pin sensor yang bersangkutan. Perhatikan contoh-contoh berikut... DDRA=0x00; PORTA = 0xFF; Ini berarti seluruh pin-pin pada PORTA dijadikan sebagai masukan dan di-pullup, artinya pada rangkaian yang terkait, jika menggunakan tombol atau pushbutton, jika tidak ditekan akan terbaca HIGH dan jika ditekan akan terbaca LOW. Gunakan contoh rangkaian pada Gambar 15 dan perhatikan tanda panah, pushbutton satu ujung dihubungkan ke pin yang terkait sedangkan ujung lainnya di-GND-kan. INGAT! Ini bukan satu-satu-nya cara membuat rangkaian masukan dengan pushbutton, tetapi ini cara yang mudah dan murah meriah... he he he... Contoh lainnya... DDRB= 0x00; PORTB=0x0F; Ini artinya seluruh pin-pin PORTB dijadikan masukan, dengan konfigurasi 0x0F (0b00001111) atau PORTB.0 sampai PORTB.3 di-pullup, sedangkan PORTB.4 sampai PORTB.7 dikonfigurasi floating.
3.
Register PINx Digunakan untuk membaca masukan pada pin yang bersangkutan.