Anda di halaman 1dari 16

REGISTER PADA AVR 16

Oleh: 1. Aida Pramudia 2. Khambali / 3.32.11.2.02 / EK-2C / 3.32.11.2.14 / EK-2C

PRODI D3 TEKNIK ELEKTRONIKA JURUSAN TEKNIK ELEKTRO

POLITEKNIK NEGERI SEMARANG


2013

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

Gambar konfigurasi kaki pin AVR Atmega16

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

AIN0 (Analog Comparator Positive Input) INT2 (External Interupt 2 Input)

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.

Tabel Fungsi Khusus Port C

Pin PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7

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.

a. Timer/Counter 1 Control Register A (TCCR1A)

Tabel Register TCCR1A 7 6 5 4 3 2 1 0

bit TCCR1A

COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10

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.

Tabel Compare Output Mode, Non-PWM

COM1A1/COM1B1 COM1A1/COM1B1 0 0

Deskripsi Normal Port Operation, OC1A/OC1Bdisconnected

0 1

1 0

Toggle OC1A/OC1B on compare match Clear OC1A/OC1B on compare match (low level)

Set OC1A/OC1B on compare match (high level)

Tabel Compare Output Mode, Fast PWM

COM1A1/COM1B1 COM1A1/COM1B1 0 0

Deskripsi Normal Port Operation, OC1A/OC1B disconnected

Toggle OC1A on compare match, OC1B disconnected

Clear OC1A/OC1B on compare match, set OC1A/OC1B at BOTTOM (non-inverting mode)

Set OC1A/OC1B on compare match, clear OC1A/OC1B at BOTTOM (inverting mode)

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

TOP 0xFFFF 0x00FF

Update of OCRn Immediate TOP

TOVn Flag Set-on MAX BOTTOM

0x01FF

TOP

BOTTOM

0x03FF

TOP

BOTTOM

OCR1A 0x00FF 0x01FF

Immediate BOTTOM BOTTOM

MAX TOP TOP

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

PWM, Phase and Frequency Correct

OCR1A

BOTTOM

BOTTOM

10

PWM, Phase Correct

ICR1

TOP

BOTTOM

11

PWM, Phase Correct

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

ICR1 ICR1 OCR1A

Immediate BOTTOM BOTTOM

MAX TOP TOP

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.

Tabel Register TCNT1 7 6 5 4 TCNT1[15:8] TCNT1[7:0] 3 2 1 0

Bit TCNT1H 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).

Tabel Register OCR1n 7 6 5 4 OCR1n[15:8] OCR1n[7:0] 3 2 1 0

Bit OCR1nH OCR1nL

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.

a. Clear Timer On Compare Match (CTC) fOCnA = _ ( ) ................................................................................... (2.1)

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.