Trainer ATMega16

64

description

sbb

Transcript of Trainer ATMega16

Page 1: Trainer  ATMega16
Page 2: Trainer  ATMega16

DAFTAR ISI

i

ii

BAB I MENGENAL ATMEGA 16

1. ... 1

2. 2

3. .. 3

4. ... 4

BAB II MENGENAL BAHASA C

1. 5

2. 8

3. 11

BAB III TRAINER MIKROKONTROLER

1. Modul Boar .. 15

2. . 16

3. Menggunakan Trainer Mikrokontroler 18

BAB IV APLIKASI INPUT/OUTPUT MIKROKONTROLER

1. 20

2. Contoh Program 21

BAB V INTERUPSI

1. 28

2. . 29

BAB VI APLIKASI DENGAN SEVEN SEGMEN

1. 32

2. 33

BAB VII APLIKASI DENGAN MATRIK LED

1. 35

2. 38

BAB VIII TIMER/COUNTER

1. 49

2. 52

3. 54

4. 54

BABIX PWM 61

Page 3: Trainer  ATMega16

BAB I

MENGENAL ATMEGA16

1. Pengenalan Mikrokontroler AVR

ATMEGA16 merupakan salah satu jenis mikrokontroler AVR. Mirkokontroler

AVR ( ) 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, dapat menggunakan 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.

Page 4: Trainer  ATMega16

2. Fitur ATMEGA16

ATMega16 mempunyai throughput mendekati 1 MIPS per MHz membuat disainer

sistem untuk mengoptimasi konsumsi daya versus kecepatan proses. Beberapa

keistimewaan dari AVR ATMega16 antara lain:

Arsitektur RSIC

- 130 intruksi yang umumnya hanya membutuhkan 1 siklus clock.

- 32x8 general purpose register.

- Troughput hampir mencapai 16 MIPS pada frekuensi 16 MHz.

- CPU yang terdiri dari 32 register.

Nonvolatile Program and Data Memories

- Memory Flash sebesar 16KB dengan kemampuan Read While Write.

- Optional Boot Code Section with Independent Lock Bits

- EEPROM sebesar 512 byte dapat diprogram saat operasi.

- Internal SRAM sebesar 1KB.

Peripheral Features

- 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 with Separate Oscillator

- 4 chanel PWM

- ADC (Analog to Digital Converter) 10 bit sebanyak 8 channel.

- Port antarmuka SPI.

- Port USART programmable untuk komunikasi serial.

- Watchdog Timer dengan oscilator internal.

Fitur spesial mikrokontroler

- Power-on Reset and Programmable Brown-out Detection

- Internal Calibrated RC Oscillator

- Unit interupsi internal dan eksternal.

- Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down,

Standby and Extended Standby

Saluran I/O

- Saluran I/O ada 32 buah, yaitu Port A, Port B, Port C, dan Port D

- 40-pin PDIP, 44-lead TQFP, 44-lead PLCC, and 44-pad MLF

Tegangan operasi

- 2.7 - 5.5V untuk Atmega16L

Page 5: Trainer  ATMega16

- 4.5 - 5.5V untuk Atmega16

Spedd grade

- 0 8 MHz untuk ATMEGA16L

- 0 16 untuk ATMEGA16

3. 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

berikut:

Berikut penjelasan umum susunan kaki Atmega16 tersebut:

VCC merupakan pin masukan positif catudaya.

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 mereset ke kondisi semula.

XTAL 1 dan XTAL 2 sebagai pin masukan clock eksternal.

AVCC sebagai pin masukan tegangan untuk ADC.

AREF sebagai pin masukan tegangan referensi.

Page 6: Trainer  ATMega16

4. Status register

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 berikut adalah status register ATMEGA16.

Bit 7 6 5 4 3 2 1 0

I T H S V N Z C SREG

Read/write R/W R/W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Bit7 : I (global interupt enable)

Bit yang mengaktifkan interupsi, jika terjadi interupsi yang dipicu oleh

hardware I akan di-clear dan akan di set kembali menggunakan interupsi RETI

Bit6 : T (Bit copy interupt)

Bit5 : H (Half Carry Flag)

Bit4 : S (Sign Bit)

Bit S merupakan hasil operasi EXOR antara flag N (negative) dan flag V

(komplemen dua overflow)

Bit3 : V (

Bit berguna untuk mendukung operasi aritmatika

Bit2 : N (Negtive Flag)

Apabila suatu operasi menghasilkan bilangan negative, maka flag N akan di

set.

Bit1 : Z (Zero Flag)

Bit akan di set bila operasi yang diperoleh adalah nol

Bit0 : C (Carry flag)

Bit akan diset bila hasil operasi menghasilkan carry

Page 7: Trainer  ATMega16

BAB II

MENGENAL BAHASA C

1. Penulisan Bahasa C

Pengembangan sebuah sistem menggunakan mikrokontroler AVR buatan ATMEL

menggunakan software CodeVision AVR. CodeVision AVR merupakan software C-

cross compiler, program dapat ditulis dalam bahasa C, CodeVisionAVR memiliki IDE

(integrated development environment) yang lengkap, sehingga penulisan program,

compile, link, pembuatan code mesin (assembler) dan download program ke chip AVR

dapat dilakukan pada CodeVision. Berikut ini adalah aturan penulisan program dalam

bahasa C menggunakan CodeVision AVR

Preprocessor (#):

Digunakan untuk memasukan

(include) text dari file lain dan

mendefinisikan macro

/*

Atau jika untuk satu baris saja

Inisialisasi

Program utama

Program akan berulang terus karena syarat while (1) akan

selalu menghasilkan nilai benar (true)

Page 8: Trainer  ATMega16

Penjelasan:

Preprocessor (#) : digunakan untuk memasukan (include) text dari file lain,

mendefinisikan macro yang dapat mengurangi beban kerja pemrograman dan

meningkatkan legibility source code mudah dibaca.

#define : digunakan untuk mendefinisikan macro.

Contoh : #define sensor PINA.5

#define SUM(a,b) a+b

Komentar : penulisan komentar untuk beberapa baris sekaligus

Sedangkan penulisan komentar untuk 1 baris saja

Identifer : nama yang diberikan pada variable, fungsi, label atau objek lain.

Identifer dapat mengandung huruf dan angka

). Identifer berdifat case sensitive. Identifer dapat mencapai maksiml 32 karakter.

Konstanta

Cara menuliskan konstanta adalah:

- Konstanta integer dan long integer ditulis dalam bentuk desimal (1234), dalam

bentuk biner mempunyai awalan 0b (0b01011100), dalam bentuk hexadesimal

mempunyai awalan 0x (0x0e) atau dalam oktal mempunyai awalan o (o765).

- Unsigned integer mempunyai akhiran U (10000U)

- long integer mempunyai akhiran L (99L)

- unsigned long integer mempunyai akhiran UL (99UL)

- floating point mempunyai akhiran F (1.234F)

- character

Tipe data yang ada dalam bahasa C adalah sebagai berikut:

Tipe Ukuran (Bit) Range

Bit 1 0, 1 (tipe data bit hanya dapat digunakan untuk

variabel global)

Char 8 -128 sampai 127

Unsigned char 8 0 sampai 255

Signed char 8 -128 sampai 127

Int 16 -32768 sampai 32767

Short int 16 -32768 sampai 32767

Unsigned int 16 0 sampai 65535

Page 9: Trainer  ATMega16

Signed in 16 -32768 sampai 32767

Long int 32 -2147483648 sampai 2147483647

Unsigned long int 32 0 sampai 4294967295

Signed long int 32 -2147483648 sampai 2147483647

Float 32 + 1.175e-38 sampai + 3.402e38

Double 32 + 1.175e-38 sampai + 3.402e38

Operator yang dapat digunakan pada bahasa C adalah:

Jenis operator Operator Keterangan

Operator kondisi

< Lebih kecil

< = Lebih kecil atau sama dengan

> Lebih besar

> = Lebih besar atau sama dengan

= = Sama dengan

! = Tidak sama dengan

Operator aritmatika

+ Penjumlahan

- Pengurangan

* Perkalian

/ Pembagian

% Modulus (sisa bagi)

Operator logika

! Boolean not

&& Boolean and

| | Boolean or

Operator bitwise

~ Komplemen bitwise

& Bitwise and

| Bitwise or

^ Bitwise exor

>> Right shift

<< Left shift

Operator assignment

= Untuk memasukan nilai

+ = Untuk menambah nilai dari keadaan semula

- = Untuk mengurangi nilai dari keadaan semula

* = Untuk mengalikan nilai dari keadaan semula

/ = Untuk melakukan pembagian dari keadaan semula

% = Untuk memasukan nilai sisa bagi dari pembagian

bilangan semula

<< = Untuk memasukan shift left

Page 10: Trainer  ATMega16

>> = Untuk memasukan shift right

&= Untuk memasukan bitwise and

^ = Untk memasukan bitwise exor

\ = Untuk memasukan bitwise or

2. Program Kontrol

a. Percabangan

Digunakan untuk melakukan operasi perabangan bersyarat. Sintaks penulisan if

dapat ditulis sebagai berikut:

Jika hasil testing expresion memberikan hsil tidak nol, statemen dilaksanakan.

Pada keadaan sebaliknya statemen 2 yang akan dilaksanakan. Sebaiknya perintah

if untuk beberapa kondisi dilakukan dengan menggunakan blok-blok.

Percabangan switch

intah switch. Dalam pernyataan

switch sebuah variabel secara berurutan diuji oleh beberapa konstanta bilangan

bulat atau konstanta karakter. Sintaks perintah switch dapat dilihat sebagai berikut:

Hal-hal yang harus diperhatikan:

- Switch hanya dapat memeriksa variabel terhadap sebuah konstanta, sedangkan if

dapat memeriksa persyaratan perbandingan (lebih besar, lebih kecil, dll).

- Tidak ada konstanta yang sama dalam sebuah switch

- Perintah switch jika dimanfaatkan dengan tepat dapat memberikan hasil yang

/atau bersarang.

Page 11: Trainer  ATMega16

b. Perulangan (looping)

For

Untuk pengulangan yang melakukan proses increment dan dicrement. Sintaks

perintah for untuk pengulangan increment dapat ditulis sebagi berikut:

Sintaks untuk pengulangan decrement dapat ditulis sebagai berikut:

Syarat loop adalah pernyataan relasional yang menyatakan syarat berhentinya

pengulangan, biasanya berkaitan dengan variabel kontrol, nama_variabel++, dan

nama_variabel --, menyatakan proses increment dan proses decrement pada

variabel kontrol.

While

Perintah while dapat melakukan looping apabila persyaratan benar. Sintaks

perintah while dapat ditulis sebagai berikut:

Perintah while terlebih dahulu melakukan pengujian persyaratan sebelum

melakukan looping. Hal ini sebenarnya tidak perlu, untuk mengatasi hal tersebut

adalah sebagai berikut:

Page 12: Trainer  ATMega16

c. Array

Array adalah deretan variabel yang berjenis sama dan mempunyai nama yang sama.

Setiap anggota deretan (elemen) diberi nomor yang disebut indeks. Array diatur agar

mempunyai lokasi memory yang bersebelahan dengan alamat terkecil menunjukan

elemen array pertama dan alamat terbesar menunjukan elemen terakhir. Alamat array

dapat diakses dengan menggunakan alamat indeksnya. Bentuk deklarasi array adalah

sebagi berikut:

d. Fungsi

Sebuah program yang besar dapat dipecah-pecah menjadi beberapa subprogram yang

terpisah yang melakukan fungsi tertentu. Subprogram yang seperti itu disebut fungsi.

Fungsi merupakan sebuah blok yang melingkupi beberapa perintah. Deklarasi fungsi

dapat dilakukan dengan cara:

Parameter dalam fungsi dapat dijelaskan sebagai berikut:

- Tipe adalah nilai yang dihasilkan oleh fungsi, jika tidak dinyatakan hasil fungsi

disebut integer.

- Argumen : deklarasi variabel apa saja yang dibutuhkan oleh fungsi dan bersifat

optional.

- Fungsi dengan nilai balik (return value)

Fungsi ini memberikan hasil yang berupa nilai. Contoh:

- Fungsi tanpa nilai balik

Fungsi ini tidak memberikan hasil berupa nilai melainkan berupa sebuah proses.

Fungsi ini bertipe void. Contoh:

Page 13: Trainer  ATMega16

- Pernyataan return

Pernyataan return dapat menyatakan dua hal yaitu:

1. return mengakhiri jalanya fungsi dan kembali keprogram utama

2. mengirim nilai balik

Fungsi dapat ditulis pada akhir program dengan membuat sebuah prototype function

dibagian awal proogram. Cara menulis fugsi seperti itu memberikan kemudahan bagi

programer untuk memeriksa dan membaca ulang sebuag program yang besar.

parameter dalam sebuah fungsi ada dua yaitu parameter actual dan parameter formal.

Parameter actual adalah parameter yang terdapat pada saat pemanggilan fungsi,

parameter formal adalah parameter pada saat fungsi itu dibuat. Contoh:

3. Library Function pada CodeVisionAVR

a. Fungsi input/output

\INC. berkut

adalah beberapa fungsi dasar yang disediakan oleh code vision .

- char getchar(void) : menghasilkan nilai balikan berupa karakter yang diterima

dari UART, menggunakan sistem polling (menerima data serial).

-

sistem polling (mengirimkan data serial).

Sebelum menggunakan fungsi ini, lakukan terlebih dahulu pengaturan konfigurasi

komunikasi serial:

- inisialisasi baudrate UART

- mengaktikan transmitter UART

Page 14: Trainer  ATMega16

- mengaktifkan receiver UART

Fungsi I/O yang lainya menggunakan getchar dan putchar, seperti:

- void puts(char *str) : output, menggunakan putchar, null mengakhiri karakter

string, berlokasi di SRAM

- void putsf(char flash *str) : output menggunakan, putchar, null mengakhiri

karakter string, berlokasi di FLASH

- void printf (char flash *fmtstr[arg1, arg2, ...]) : output text terformat,

menggunakan putchar, sesuai dengan format specifiers dalam fmtstr string.

b. Fungsi tipe karakter

\INC. berkut

adalah beberapa fungsi tipe karakter yang disediakan oleh code vision

- char toascii (char c) : konersi char c menjadi tipe ascii

- char toint (char c) ; menginterprestasikan karakter c sebagai digit hexa desimal

dan mengkonversikan mejadi unsigned char dari 0 hingga 15

- char tolower (char c) : mengubah karakter c ke huruf kecil

- char toupper (char c) : mengubah karakter kehuruf besar

c. Standard library Function

\INC

- Int atoi (char *str) : mengubah string menjadi integer

- Long int atoi (char *str) : mengubah string mejadi long integer

- void itoa (int n, char *str) : mengubah integer menjadi karakter

- void itoa (long int n, char *str) : mengubah long integer menjadi karakter

- void float (float n, unsigned char decimal, char *str) : mengubah bilangan

floating point menjadi karakter pada string

d. Fungsi matematika

\INC. berikut adalah

contoh beberapa fungsi matematika yang disediakan CVAVR.

- unsigned char cabs (signed char x) : menghasilkan nilai absolute dari byte x

- unsigned int abs (int x) : menghasilkan nilai absolute dari bilangan integer x

- unsigned long labs (long int x) : menghasilkan nilai absolute dari bilangan long

integer x

- float abs (float x) : menghsilkan nilai absolute dari bilangan floating point x

- signed char cmax (signed char a, signed char b) : menghasilkan nilai maksimum

dari byte a dan b

Page 15: Trainer  ATMega16

- long int lmax (long int a, long int b) : menghasilkan nilai maksimum dari long

integer a dan b.

- signed char csign (signed char x) ; menghasilkan -1, 0, 1 jika byte x negative, nol,

positif

- unsigned char isqrt (unsigned int x) : menghasilkan akar kuadrat dari unsigned

integer x

e. Fungsi konversi BCD

\INC

- unsigned char bcd2bin (unsigned char n) : mengubah bilangan n dari bcd ke nilai

binernya.

- Unsigned char bin 2 bcd (unsigned char n) : mengubah bilangan n dari biner ke

nilai BCDnya, bilangan n harus (0 99)

f. Fungsi LCD

Fungsi lcd ditujukan ntuk mempermudah interfacing antara program c dengan modul

alphanumeric LCD yang dibuat dengan chip hitachi HD44780 atau yang lainya.

dimasukan (include) jika kita ingin menggunakan fitur fungsi lcd. Sebelum

menggunkan fungsi ini terlebih dahulu harus diatur port mikrokontroler yang

digunakan untuk komunikasi dengan modul LCD. Format lcd dalam modul lcd.h

mendukung : 1x8, 2x12, 3x12, 1x16, 2x16, 2x20, 4x20, 2x24 dan 2x40 karakter.

Fungsi untuk mengakses lcd diantaratnya adalah:

- Unsigned char lcd_init (unsigned char lcd_columns)

Untuk menginisialisasi modul lcd, menghapus layar dan meletakan fungsi

karakter pada baris ke 0 kolom ke 0. Jumlah kolom dalam lcd harus disebutkan

(misal 16). Kursor tidak dtampakan. Nilai yang dikembalikan adalah 1 bila

modul lcd terdeteksi, dan bernilai 0 jika tidak terdapat modul lcd. Fungsi ini

harus dipanggil pertama kali sebelum menggunakan fungsi yang lain.

- void lcd_clear (void)

menghapus layar lcd dan meletakan karakter pada baris ke 0 kolom ke 0

- void lcd_gotoxy (unsigned char x, unsigned char y)

meletakan posisi karakter pada kolom ke x baris ke . nomor baris dankolom

dimulai dari nol

- void lcd_putchar (char c)

menampilkan karakter pada lcd

- void lcd_puts (char *str)

Page 16: Trainer  ATMega16

menampilkan string yang disimpan pada SRAM pada lcd

- void lcd_putsf (char flash *str)

menampilkan string yang disimpan pada flash pada LCD.

g. Fungsi delay

Menghasilkan delay dalam program c, berada pada header delay.h yang harus

dimasukan (include) sebelum digunakan. Sebelum memanggil fungsi, interupsi harus

dimatikan terlebih dahulu, bila tidak maka delay akan lebih lama dari yang

diharapkan. Juga sangat penting untuk menyebutkan frekuens clock chip IC AVR

yang digunakan. Fungsi delay yang disediakan adalah :

- void delay_us (unsigned int n)

fungsi ini menghasilkan delay selama n mikro sekon, n adalah nilai konstan.

- void delay_ms (unsigned int n)

- fungsi ini menghasilkan delay selama n mili sekon, n adalah nilai konstan.

Kedu fungsi tersebut secara otomatis akan mereset watchdog timer setiap 1

milisekon dengan mengaktifkan intruksi wdr.

Page 17: Trainer  ATMega16

BAB III

TRAINER MIKROKONTROLER

1. Modul Board Mikrokontroler

Trainer mikrokontroler merupakan modul board yang dapat digunakan untuk belajar

pemrograman mikrokontroler. Spesifikasi modul board yang digunakan adalah :

Chip mikrokontroler : ATMEGA16 / ATMEGA8535

Downloader (ISP) : ATMEGA8 (on board)

Firmware programmer : usb asp

Pin output : 8 buah led pada port B (0 7)

Pin input : - dip switch 8 chanel pada port C (0 7)

- 4 push button NO pada port D (4 7)

Free pin : 12 port yaitu port A (0 7), port D (0 3) dapat

difungsikan sebagai port I/O

Fitur lain : - 4 buah seven segmen common anoda

- Dot matrik 5 x 7

Supply : 5 V DC (menggunakan keluaran USB komputer)

Berikut adalah gambar prototype board trainer mikrokontroler:

indikator board

indikator downloader Port B led output Reset

Button- PD0

Button- PD1

Button- PD2 (INT0) Button- PD3 (INT1)

Seven segmen 1 - 4

PWM led

Matrik 5x7

indikator busy

Port C - input

Page 18: Trainer  ATMega16

2. Instalasi Trainer Mikrokontroler

Modul board mikrokontroler ini menggunakan firmware usb asp. Firmware ini sebaiknya

digunakan pada windows Xp. Sebelum trainer mikrokontroler ini digunakan harus

dilakukan instlasi terlebih dahulu. Tahap instalasi firmware adalah sebagai berikut:

a. Hubungkan USB ke komputer, dan led akan menyala

b. Klik next dan p install from a list or spesific location (advanced)

c.

Page 19: Trainer  ATMega16

d. Include this location in the search

e. Klik next dan tunggu sampai instalasi selesai

f. Untuk mengetahui perangkat sudah terinstall dengan benar, lihat pada informasi

Page 20: Trainer  ATMega16

3. Menggunakan Trainer Mikrokontroler

Setelah usb asp terinstal, modul board sudah dapat digunakan untuk mendownload

program dari komputer. Supaya lebih mudah, kita gunakan software khazama. Caranya

adalah sebagai berikut:

a. Buka software khazama dan pilih chip AVR yang akan di program

b. Open program dengan cara tekan Ctrl+L atau klik File Load Flash file to Buffer

c. File yang dibuka adalah

Page 21: Trainer  ATMega16

d.

e. Jika proses download program berhasil maka akan muncul seperti gambar berikut

Page 22: Trainer  ATMega16

BAB IV

APLIKASI INPUT/OUTPUT MIKROKONTROLER

1. Setting Port I/O

Atmega 16 memiliki 4 buah port I/O yaitu port A, port B, port C, dan port D yang

masing masing terdiri dari 8 buah kaki. Sehingga secara keseluruhan Atmega16 memiliki

32 buah kaki bidirectional yang dapat diprogram sebagai input atau output dengan pilihan

internal pull-up. Masing port memiliki 3 buah register bit, yaitu DDxn, PORTxn dan

PINxn. Huruf x mewakili nama port, sedangkan n mewakili nama bit. Bit DDxn terdapat

pada I/O address DDRx, bit PORTxn terdapat pada I/O address PORTx dan bit PINxn

terdapat pada I/O addres PINx.

Deskripsi register untuk port A, port B, port C dan port D sama yaitu terdiri dari

DDxn, PORTxn dan PINxn berikut adalah deskripsi register untuk port A.

Port A data register - PORTA

Bit 7 6 5 4 3 2 1 0

PORTA7 PORTA6 PORTA5 PORTA4 PORTA3 PORTA2 PORTA1 PORTA0 PORTA

Read/write R/W R/W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Port A data direction register - DDRA

Bit 7 6 5 4 3 2 1 0

DDRA7 DDRA6 DDRA5 DDRA4 DDRA3 DDRA2 DDRA1 DDRA0 DDRA

Read/write R/W R/W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Port A input pin addres - PINA

Bit 7 6 5 4 3 2 1 0

PINA7 PINA6 PINA5 PINA4 PINA3 PINA2 PINA1 PINA0 PINAA

Read/write R R R R R R R R

Initial Value N/A N/A N/A N/A N/A N/A N/A N/A

Port I/O pada mikrokontroler AVR dapat difungsikan sebagai input atau output,

dengan cara mengubah isi I/O register Data Direction Register. Bit DDxn dalam register

DDRx (Data Direction Register) menentukan arah pin. Berikut adalah tabel pengaturan

port I/O :

DDR bit =1 DDR bit = 0

PORT bit = 1 Output high Input pull-up

PORT bit = 0 Output low Input floating

Page 23: Trainer  ATMega16

Misalnya :

Jika kita ingin Port C dikonfigurasikan sebagai ouput, maka DDRC (data direction register

port C) harus diset 0b11111111 atau 0xFF atau 255. Jika port C sebagai output, maka

DDRC harus diset 0x00 atau 0b00000000 atau 0.

Contoh:

Setiap pin I/O mikrokontroler AVR memiliki internal pull up. Misalnya port B

dikonigurasikan sebagai input dan internal pull up nya diaktifkan, maka DDRB = 0x00 dan

PORTB = 0xFF.

Contoh:

Untuk membaca data pada salah satu port, dapat digunakan fungsi PINx, sedangkan untuk

membaca data per pin pada suatu port dapat digunakan fungsi PINx.bit

Contoh:

dan arusnya sebesar 20 mA. Port I/O sebagai output hanya memberikan arus (sourcing)

sebesar 20 mA, keluaran dari suatu port mikrokontroler hanya dapat mengemudikan

perangkat output dengan arus yang kecil, sehingga untk peralatan elektronika dengan arus

yang besar perlu diberikan penguat tambahan, oleh karena itu biasanya dipergunakan

penguat lagi berupa transistor atau IC penguat.

2. Contoh Program Aplikasi

a. Program blink led

Menyalakan dan mematikan led, output berupa 8 buah led aktif low pada port B (PB0

PB7). Berikut adalah cara membuat program menggunakan CodeWizardAVR

- Create new file (klik projrect)

- Setting clock Amega16 sebesar kristal yang digunakan yaitu 12 MHz

Page 24: Trainer  ATMega16

- Konfigurasi port B sebagai output

- Save program

- Tuliskan program

Program :

Page 25: Trainer  ATMega16

- Build program dengan menekan Ctrl+F9 atau klik project build all

- Download program menggunakan software khazama, caranya:

Atur chip AVR yang digunakan

Program yang ditulis

Page 26: Trainer  ATMega16

Open program, dengan cara tekan Ctrl+L atau klik file load file flash

to buffer. Program yang didownloadkan adalah hasil compile dari

CVAVR yang

Lalu klik Auto Program

b. Program nyala berurutan

Menyalakan dan mematikan led secara berurutan, output berupa 8 buah led aktif low

pada port B (PB0 PB7). Gunakan CodeWizardAVR untuk membuat program.

- Create new file

- Konfigurasi chip, clock dan port B sebagai output

- Save program

- Tuliskan program

- Build dan download program ke Atmega16

Program :

Page 27: Trainer  ATMega16

c. Program Sakelar

Port C sebagai input dan Port B sebagai output. Langkah memprogram:

- Create new file

- Konfigurasi chip, clock

- Konfigurasi port B sebagai output dan port C sebagai input

- Save program

- Tuliskan program

- Build dan download program ke Atmega16

Program :

Page 28: Trainer  ATMega16
Page 29: Trainer  ATMega16

BAB V

INTERUPSI

Interupsi adalah keadaan dimana saat program utama dieksekusi oleh CPU, kemudian tiba-

tiba berhenti untuk sementara waktu karena ada rutin lain yang harus ditangani oleh CPU, dan

setelah selesai mengerjakan rutin tersebut, CPU kembali mengerjakan rutin utama. Amega 16

memili 21 sumber interupsi yang ditujukan pada tabel dibawah ini.

No

Vektor

Alamat

Program

Sumber

Interupt Keterangan

1 $000(1) RESET External pin, power on reset, brown-out

reset, Watchdog reset, JTAG AVR reset

2 $002 INT0 Eksternal interupt request 0

3 $004 INT1 Eksternal interupt request 1

4 $006 TIMER2 COMP Timer/Counter compare match

5 $008 TIMER2 OVF Timer/counter overflow

6 $00A TIMER1 CAPT Timer/counter capture event

7 $00C TIMER1 COMP A Timer/counter 1 compare match A

8 $00E TIMER 1 COMP

B Timer/counter 1 compare match B

9 $010 TIMER 1 OVF Timer/counter 1 overflow

10 $012 TIMER 0 OVF Timer/counter 2 overflow

11 $014 SPI, STC Serial transfer complete

12 $016 USART, RXC USART, Rx Complete

13 $018 USART, UDRE USART data register empty

14 $01A USART, TXC USART, Tx Complete

15 $01C ADC ADC conversion complete

16 $01E EE_RDY EEPROM ready

17 $020 ANA_COMP Analog comparator

18 $022 TWI Two wire serial interface

19 $024 INT2 External interupt request2

20 $026 TIMER 0 COMP Timer/counter 0 compare match

21 $028 SPM_RDY Store program memory ready

Page 30: Trainer  ATMega16

1. Interupsi eksternal

Pada Atmega16 terdapat 3 pin untuk interupsi eksternal, yaitu INT0, INT1, INT2.

Pengaturan kondisi keadaan yang menyebabkan terjadinya interupsi eksternal diatur oleh

register MCUCR (MCU control register), seperti gambar berikut.

Bit 7 6 5 4 3 2 1 0

SM2 SE SM1 SM0 ISC11 ISC10 ISC01 1SC0 MCUCR

Read/write R/W R/W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

a. Bit ISC01 dan ISC00 menentukan kondisi yang dapat menyebabkan interupsi eksternal

pada pin INT0. Konfigurasi bit ISC01 dan ISC00 dapat dilihat pada tabel dibawah ini.

ISC01 ISC00 Keterangan

0 0 Logika 0 pada pin INT0 menyebabkan interupsi

0 1 Perubahan logika pada INT0 menyebabkan interupsi

1 0 Perubahan logika dari 1 ke 0 pada pin INT0 menyebabkan interupsi

1 1 Perubahan logika dari 0 ke 1 pada pin INT0 menyebabkan interupsi

b. Bit ISC11 dan ISC10 menentukan kondisi yang dapat menyebabkan interupsi eksternal

pada pin INT1. Konfigurasi bit ISC11 dan ISC10 dapat dilihat pada tabel dibawah ini.

ISC11 ISC10 Keterangan

0 0 Logika 0 pada pin INT1 menyebabkan interupsi

0 1 Perubahan logika pada INT1 menyebabkan interupsi

1 0 Perubahan logika dari 1 ke 0 pada pin INT1 menyebabkan interupsi

1 1 Perubahan logika dari 0 ke 1 pada pin INT1 menyebabkan interupsi

Pemilihan pengaktifan interupsi eksternal diatur oleh register GICR (general interupt

control register), seperti dalam gambar berikut:

Bit 7 6 5 4 3 2 1 0

INT1 INT0 INT2 - - - IVSEL IVSE GICR

Read/write R/W R/W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Bit-bit INT1, INT0, INT2 pada register GICR digunakan untuk mengaktifkan masing-

masing interupsi eksternal. Ketika bit-bit tersebut di set 1 (aktif), maka interupsi eksternal

akan aktif. Jika bit I (interupt) pada SREG (status register) diset 1 maka enable interupt,

intruksi untuk mengaktifkan globa interupt yaitu sei. Program interupsi dari masing-

masing interupsi akan dimulai dari vektor interupsi pada masing-masing jenis interupsi

eksternal.

Page 31: Trainer  ATMega16

2. Praktik interupsi eksternal

Berikut adalah program interupsi eksternal INT 0 dan INT 1 aktif. Led akan nyala

bergantian, ketika ditekan push button PD2 (int 0 aktif) maka led akan menyala flip-flop,

ketika ditekan push button PD3 (int1 aktif) maka akan menjadi blink led.

Langkah kerja:

- Create new file

- Konfigurasi chip, clock

- Konfigurasi port B sebagai output dan PD 2 dan PD3 sebagai input pull up

- Aktifkan INT0 dan INT1

- Save program

- Tuliskan program

- Build dan download program ke Atmega16

Program:

Page 32: Trainer  ATMega16

Program Flip-flop

Program blink led

Page 33: Trainer  ATMega16

Program Utama, nyala

bergatian

Page 34: Trainer  ATMega16

g 10

f 9 CA 8

a 7

b 6

1 e

2 d

3 CA

4 c

5 Dp

b

a

c

f

e

d

g

Dp

BAB VI

APLIKASI DENGAN SEVEN SEGMEN

1. Seven Segmen

Seven segmen merupakan kumpulan dari 8 buah led A, B, C, D, E, F,

G, Dp yang disusun sedemikian rupa sehingga membentuk seven

segmen. gambar disamping adalah konfigurasi pin dari seven segmen:

Pada trainer mikrokontroler yang kita gunakan, menggunakan 4 bauh

seven segmen common anoda yang masing-masing dikendalikan

melalui PD4, PD5, PD6, PD7. Sebenarnya yang bisa dinyalakan dari

empat buah seven segmen tersebut hanya salah satu saja. Maka agar

tampak nyala bersamaan ke empat seven segmen harus dihidupkan

secara bergantian dengan waktu tunda yang sangat cepat.

Oleh kerena itu pada masing-masing segmen di drive oleh transistor NPN pada common

anodanya. Sehingga seven segmen akan nyala jika common anoda berlogika 1 dan kaki

lainya berlogika 0. Berikut adalah tabel format penyalaan seven segmen aktive low.

Angka 7 6 5 4 3 2 1 0

Hexa p g f e d c b a

0 1 1 0 0 0 0 0 0 C0

1 1 1 1 1 1 0 0 1 F9

2 1 0 1 0 0 1 0 0 A4

3 1 0 1 1 0 0 0 0 B0

4 1 0 0 1 1 0 0 1 99

5 1 0 0 1 0 0 1 0 92

6 1 0 0 0 0 0 1 0 82

7 1 1 1 1 1 0 0 0 F8

8 1 0 0 0 0 0 0 0 80

9 1 0 0 1 0 0 0 0 90

A 1 0 0 0 1 0 0 0 88

B 1 0 0 0 0 0 1 1 83

C 1 1 0 0 0 1 1 0 C6

D 1 0 1 0 0 0 0 1 A1

E 1 0 0 0 0 1 1 0 86

F 1 0 0 0 1 1 1 0 8E

Page 35: Trainer  ATMega16

2. Program Aplikasi Seven Segmen

a. Program menyalakan seven segmen 1, 2, 3, 4

b. Program up counter

Page 36: Trainer  ATMega16
Page 37: Trainer  ATMega16

BAB VII

APLIKASI DENGAN MATRIK LED

1. Menampilkan karakter

Dot matrik atau matrik led merupakan kumpulan led yang tersusun menjadi sejumlah

kolom dan baris.contaohnya seperti yang ada pada trainer mikrokontroler yang kita

gunakan yaitu dot matrik 5x7. Dot matrik 5x7 terdiri dari 5 baris dan 7 kolom. Untuk

menyalakan satu led diberi tegangan ke anoda dan menghubungkan katoda ke ground.

Untuk menghasilkan angka atau huruf, led tidak bisa ditampilkan secara bersamaan tetapi

led ini diaktifkan baris demi baris dengan cepat. Proses ini di ulangi untuk baris dan kolom

selanjutnya, proses ini dinamakan scanning. Berikut gambar rangkain dari dot matrik 5x7:

a. Program menampilkan karakter A

Karakter PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0

A

PD4 0 1 1 0 0 0 0 0

PD5 1 0 0 1 0 0 0 0

PD6 1 1 1 1 0 0 0 0

PD7 1 0 0 1 0 0 0 0

PA0 1 0 0 1 0 0 0 0

-on kan sebuah led

syaratnya adalah anoda lebih positif dari katoda. Misalnya untuk menghidupkan led

Page 38: Trainer  ATMega16

(1,1) maka PD4 = 1 dan PA7 = 0. Contoh lain untuk menghidupkan led (1,3), (1,4)

dan (1,7) secara bersamaan, PORTA= 0b11001100, PORTD = 0b0001000. Sedangkan

u

memperolehnya dengan cara teknik scanning, yaitu baris pertama aktif, kemudian

kedu, ketiga dan seterusnya dengan delay yang sangat cepat.

Program:

Page 39: Trainer  ATMega16

b. Program menampilkan karakter 12

Karakter PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0

12

PD4 0 1 0 0 1 1 0 0

PD5 1 1 0 1 0 0 1 0

PD6 0 1 0 0 0 1 0 0

PD7 0 1 0 0 1 0 0 0

PA0 0 1 0 1 1 1 1 0

Algoritma pemrogramanya adalah:

Matikan semua led

PORTA = 0b10110010; PORTD = 0b00010000; delay;

PORTA = 0b00101100; PORTD = 0b00100000; delay;

PORTA = 0b10111010; PORTD = 0b01000000; delay;

PORTA = 0b10110110; PORTD = 0b10000000; delay;

PORTA = 0b10100001; PORTD = 0b00000000; delay; ulang dari baris

pertama

Program:

Page 40: Trainer  ATMega16

2. Menampilkan karakter berjalan

Menampilkan tulisan ATMEGA 16 berjalan. Berikut adalah proses penampilan tulisan

berjalan.

PA7 PA6 PA5 PA4 PA3 PA2 PA1

PD4

PD5

PD6

PD7

PA0

PA7 PA6 PA5 PA4 PA3 PA2 PA1

PD4

PD5

PD6

PD7

PA0

PA7 PA6 PA5 PA4 PA3 PA2 PA1

PD4

PD5

PD6

PD7

PA0

PA7 PA6 PA5 PA4 PA3 PA2 PA1

PD4

PD5

PD6

PD7

PA0

Page 41: Trainer  ATMega16

PA7 PA6 PA5 PA4 PA3 PA2 PA1

PD4

PD5

PD6

PD7

PA0

PA7 PA6 PA5 PA4 PA3 PA2 PA1

PD4

PD5

PD6

PD7

PA0

PA7 PA6 PA5 PA4 PA3 PA2 PA1

PD4

PD5

PD6

PD7

PA0

PA7 PA6 PA5 PA4 PA3 PA2 PA1

PD4

PD5

PD6

PD7

PA0

PA7 PA6 PA5 PA4 PA3 PA2 PA1

PD4

PD5

PD6

PD7

PA0

PA7 PA6 PA5 PA4 PA3 PA2 PA1

PD4

PD5

PD6

PD7

PA0

PA7 PA6 PA5 PA4 PA3 PA2 PA1

PD4

PD5

PD6

PD7

PA0

PA7 PA6 PA5 PA4 PA3 PA2 PA1

PD4

PD5

PD6

PD7

PA0

Page 42: Trainer  ATMega16

Dan seterusnya sampai didapat tulisan mikrokontroler. Caranya yaitu dengan cara

memprogram pertahapan gambar diatas, dengan delay 0,5 s tiap tahapnya tulisan akan

nampak berjalan. Berikut adalah programnya :

Page 43: Trainer  ATMega16
Page 44: Trainer  ATMega16
Page 45: Trainer  ATMega16
Page 46: Trainer  ATMega16
Page 47: Trainer  ATMega16
Page 48: Trainer  ATMega16
Page 49: Trainer  ATMega16
Page 50: Trainer  ATMega16
Page 51: Trainer  ATMega16

BAB VIII

TIMER/COUNTER

Timer/counter adalah fasilitas dari ATMega16 yang digunakan untuk perhitungan

pewaktuan. AVR Atmega16 memiliki 3 buah timer diantaranya : timer 0 (8 bit), timer 1 (16

bit), timer 2 (8 bit).

1. Timer/Counter 8 bit

Timer/counter 0 dan timer/counter 2 adalah timer counter 8 bit yang mempunyai multi

fungsi. Fitur fiturnya yaitu :

Counter satu kanal

Timer di nol kan saat match compare (autoreload)

Glitch free, phase correct pulse width modulation

Frekuensi generator

I/O bit clock prescaler

Interupsi timer yang disebabkan timer overflow (TOVn) dan compare match

(OCFn)

Timer/counter 8 bit dapat menghitung maksiml sampai 255 (00 FF h) hitungan,

dimana periode setiap hitungan tergantung dari setting prescaler-nya. Untuk mengatur jenis

mode operasi dari timer/counter dan mengatur prescaler digunakan register timer/counter

control register TCCRn (n =0,2). TCCR adalah register 8 bit, sebagai berikut:

7 6 5 4 3 2 1 0

TCCRn FOCn WGMn COMn COMn WGMn CSn CSn Csn

- 0 1 0 1 2 1 0

Keterangan :

Bit 7 : FOCn (force output compare

Bit 6 dan Bit 3 : WGMn0 dan WGMn1 (waveform Generator Unit), bit

mengontrol kenaikan dari counter, sumber nilai maksimum dan

mode operasi timer/counter, yaitu mode normal, clear timer,

compare match, dan dua tipe PWM.

a. Mode operasi Timer

Mode Normal

Timer digunakan untuk menghitung saja, membuat delay, menghitung selang

waktu

Mode PWM, phase correct

Page 52: Trainer  ATMega16

Memberikan bentuk gelombang phase correct PWM resolusi tinggi. Mode phase

correct PWM berdasarkan operasi dual slope. Counter menghitung berulang-ulang

dari bottom ke max dan dari max ke bottom.

CTC (Clear Timer on Compare Match)

Pada mode CTC, nilai timer yang ada pada TCNTn akan di nol kan lagi jika TCTn

sudah sama dengan nilai yang ada pada register OCRn, sebelumnya OCR diset

dulu, karena timer 0 dan 2 maksimumnya 255, maka range OCR 0 255.

Fast PWM

Memberikan pulsa PWM frekuensi tinggi. Fast PWM berbeda dengan mode PWM

lain, fast PWM berdasarkan operasi single sloop. Counter menghitung dari bottom

hingga top kemudian kembali lagi menghitung dari bottom.

b. Seting Bit pada Timer 8 bit

Cara seting timer 8 bit adalah dengan cara mengatur register WGM01 dan WGM00,

berikut adalah tabel cara mengatur WGM01 dan WGM0.

Mode WGM01

(CTC0)

WGM00

(PWM0)

Timer/counter

mode of

operation

TOP Update of

OCR0

TOV 0 flag

set-on

0 0 0 Normal 0xFF Immediate MAX

1 0 1 PWM, phase

correct 0xFF TOP BOTTOM

2 1 0 CTC OCR0 Immediete MAX

3 1 1 Fast PWM 0xFF TOP MAX

Keterangan :

BOTTOM = 0x00, MAX = 0xFF, TOP = 0xFF atau nilai yang berada pada register

OCRn tergantung pada mode operasi.

Bit 5 dan bit 4: COMn1 dan COMn0 (Compare Match Output Mode)

untuk mengontrol pin Ocn (ouput compare pin), tergantung mode apa yang

digunakan (nilai WGMn0 dan WGMn1). COMn1 dan COMn0 digunakan untuk

pengaturan lebih spesifik suatu mode timer. Berikut tabel seting pada bit tersebut

untuk timer/counter 0 :

Page 53: Trainer  ATMega16

- Compare output mode, non PWM mode

COM01 COM00 Description

0 0 Normal port operation, OC0 disconected

0 1 Toogle OC0 on compare Match

1 0 Clear OC0 on compare match

1 1 Set OC0 on compare match

- Compare output mode, Fast PWM mode

COM01 COM00 Description

0 0 Normal port operation, OC0 disconected

0 1 Rserved

1 0 Clear OC0 on compare match

1 1 Set OC0 on compare match

- Compare output mode, phase correct PWM mode

COM01 COM00 Description

0 0 Normal port operation, OC0 disconected

0 1 Reserved

1 0 Clear OC0 on compare match when up-

counting. Set OC0 on compare match when

down-counting

1 1 Set OC0 on compare match. Clear OC0 on

compare match when down-counting

Bit 2, bit 1 dan bit 0 : CSn2, Csn1, CSn0 (clock select)

Sumber clock timer/counter dapat berasal dari internal maupun eksternal. Bit

CSn2, CSn1, CSn0 digunakan untuk memilih sumber clock yang akan digunakan

oleh timer/counter dan untuk prescaller, misalnya configurasi bit CSn2, CSn1,

CSn0 sebagai berikut:

0 0 0 : timer dihentikan jika diset nilai ini

0 0 1 : sekali detaknya sama dengan detak oscilator yang digunakan

0 1 0 : sekali detaknya sama dengan detak oscilator/8, sehingga timer akan

berdetak setelah oscilator berdetak 8 kali.

Page 54: Trainer  ATMega16

Berikut tabel seting bit tersebut untuk timer counter 0:

CS02 CS01 CS00 Description

0 0 0 No clock source (timer/counter stopped)

0 0 1 ClkI/O/no prescaling

0 1 0 ClkI/O/8 (from prescaler)

0 1 1 ClkI/O/64 (from prescaler)

1 0 0 ClkI/O/256 (from prescaler)

1 0 1 ClkI/O/1024 (from prescaler)

1 1 0 Eksternal clock source on T0 pin. Clock on falling edge

1 1 1 Eksternal clock source on T0 pin. Clock on rising edge

2. Timer/Counter 16 bit

Pada mode normal, TCNT1 akan meghitung naik dan membangkitkan interupt

timer/counter 1 ketika nilainya berubah dari 0xFFFF ke 0x0000. Untuk menggunakan

timer yang menghitung mundur, cukup dengan memasukan nilai yang diinginkan ke

TCNT1 dan menunggu sampai erjadi interupt, tetapi untuk timer yang menghitung maju,

maka nilai yang dimasukan ke dalam TCNT1 nilainya harus 65536 (timer value).

a. Register timer 16 bit

TCNT1

Timer/counter register digunakan untuk menyimpan nilai timer yang diinginkan.

TCNT1 dibagi menjadi 2 register 8 bit yaitu TCNT1H dan TCNT1L.

TIMSK & TIFR

Timer interupt mask regiter dan timer interupt flag register digunakan untuk

mengendalikan interupt mana yang diaktifkan dengan cara melakukan seting pada

TIMSK dan untuk mengetahui interupt mana yang sedang terjadi. Berikut adalah

bit pada register TIMSK (timer/counter interupt mask register).

Bit 7 6 5 4 3 2 1 0

OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0 TIMSK

Read/write R/W R/W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Keterangan:

Bit7 : OCIE2, timer/counter 2 output compare match interupt enable

Bit6 : TOIE2, timer/counter2 overflow interupt enable

Bit5 : TICIE1, timer1 input capture interupt enable

Page 55: Trainer  ATMega16

Bit4 : OCIE1A, timer/counter 1A output compare match interupt enable

Bit3 : OCIE1B, timer/counter1B output compare match interupt enable

Bit2 : TOEI1, timer/counter1 overflow interupt enable

Bit1 : OCIE0, timer/counter0 output compare match interupt enable

Bit0 : TOEI0 timer/counter0 overflow interupt enable

Berikut adalah bit pada register TIFR (timer/counter interupt flag register:

Bit 7 6 5 4 3 2 1 0

OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0 TIFR

Read/write R/W R/W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Keterangan:

Bit7 : OCF2, output compare flag

Bit6 : TOV2, timer/counter2 overflow flag

Bit5 : ICF1, timer1 input capture interupt flag

Bit4 : OCF1A, output compare flag 1A

Bit3 : OCF1B, output compare flag 1B

Bit2 : TOV1, timer counter1 overflow flag

Bit1 : OCF0, output compare flag0

Bit0 : TOV0, timer/counter0 overflow flag

TCCR1B

Timer/counter1control register B digunakan untuk mengatur mode timer, prescaler

dan pilihan lainya.

Bit 7 6 5 4 3 2 1 0

ICNC1 ICES1 - WGM13 WGM12 CS12 CS11 CS10 TCCR1B

Read/write R/W R/W R R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

CS12, CS11, CS10 sebagai Clock select bits, pemilih prescaler timer/counter 1 dan

hubunganya dengan clock eksternal pada pin T1.

CS12 CS11 CS10 Description

1 0 1 ClkI/O/1024 (from prescaler)

1 1 0 Eksternal clock source on T0 pin. Clock on falling edge

1 1 1 Eksternal clock source on T0 pin. Clock on rising edge

Page 56: Trainer  ATMega16

b. Interupt timer

Ada dua sumber interupi timer yaitu:

Overflow interupt, interupt terjadi jika TCNTn mencapai 255 untuk timer 0 dan

65555 untuk timer 2 .

Compare match interupt, interupt terjadi jika nilai OCR sama dengan TCNTn.

3. Prescaler

Pada dasarnya timer hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung

tersebut bisa sama dengan frekuensi crystal yang digunakan atau dapat diperlambat dengan

prescaler dengan faktor 8, 64, 256 atau 1024. Berikut penjelasan sebuah AVR

menggunakan kristal dengan frekuensi 8 MHz dan timer yang digunakan adalah timer 16

bit. Maka maksimum waktu timer yang bisa dihasilkan adalah:

TMAX = 1/FCLK x (FFFFh+1)

= 1/8MHz x (65535+1)

= 0.008192 s

Untuk menghasilkan waktu timer yang lebih lama dapat digunakan prescaler, misalnya

1024, maka maksimal waktu timer yang bisa dihasilkan adalah:

TMAX = 1/FCLK x (FFFF h+1) x N

= 1/8 MHz x (65535+1) x N

= 0

= 8.388608 s

4. Perhitungan waktu timer

TCNT = (1+FFFFh) TTimer x FCLK/N

Keterangan :

TCNT = nilai timer (hex)

FCLK = frekuensi clock kristal yang digunakan (Hz)

TTimer = waktu timer yang diinginkan (s)

N = prescaler (1, 8, 64, 256, 1024)

1+FFFFh = nilai maksimum timer adalah FFFFh dan oveflow saat FFFFh ke 0000h

Contoh :

Diinginkan sebuah timer 16 bit bekerja selama 1 detik, dengan frekuensi clock sebesar

11,0592 MHz dan prescaller 1024, maka diperoleh nilai TCNT sebesar:

TCNT = (1+FFFF h) 1 x 11059200/1024

Page 57: Trainer  ATMega16

= 10000h 10800d

= 10000h 2A30h

= D5D0 h

Dengan demikian, nilai TCNT1H = D5 dan TCNT1L = D0h

Timer 16 bit Atmega16 dapat menghasilkan waktu tunda maksimum sebesar 6,06805555

detik pada frekuensi 11,0592 MHz. Dengan nilai maksimum FFFFh maka akan dihasilkan

waktu timer selama:

FFFFh = Ttimer x 11059200/1024

65535 = Ttimer x 10800

Ttimer = 6,068055555s

Praktik 1:

Program menyalakan dan memadamkan led selama delay waktu 1s menggunakan timer

16 bit. Port B sebagai output, kristal yang digunakan 12 MHz dan prescaler 1024, maka

nilai TCNT didapat dari :

Program :

Page 58: Trainer  ATMega16
Page 59: Trainer  ATMega16
Page 60: Trainer  ATMega16

Praktik 2:

Membuat jam digital menggunakan timer 2 (timer 8 bit). Jam terdiri dari menit dan detik

yang akan ditmpilkan pada seven segmen. Gunakan compare match interupt, kristal

12Mhz, prescaler 8 dan timer 2.

Maka clock value = 12Mhz/8 = 1500 KHz.

Untuk mendapatkan periode 0.1 ms,

maka nilai register OCR

OCR = 10-4s x 1500 KHz = 150d = 96h

maka nilai register OCR = 0x96

Periodenya adalah 0,1ms, agar menjadi 1s

harus dikalikan 10000.

Program :

Page 61: Trainer  ATMega16
Page 62: Trainer  ATMega16
Page 63: Trainer  ATMega16

BAB IX

PWM (PULSE WITH MODULATION)

Pulse width modulation menggunakan gelombang kotak dengan lebar duty cycle tertentu

menghasilkan nilai rata-rata dari suatu bentuk gelombang. Jika kita menganggap bentuk

gelombang kotak f(t) dengan nilai batas bawah ymin batas atas ymax dan duty cycle D, sperti

dilihat dalam gambar.

Nilai rata rata daribentuk gelombang diatas adalah:

Jika f(t) adalah gelombang kotak, maka nilai ymax adalah ari 0 < t < DT dan nilai ymin dari D.T

< t < T. duty cycle menyatakan presentase keadaan logika high dalam suatu periode sinyal.

Satu siklus diawali oleh transisi low to high dari sinyal dan berakhir pada transisi berikutnya.

Selama satu siklus, jika waktu sinyal pada keadaan high sama dengan low maka dapat

dikatakan sinyal mempunyai duty cycle 50%. Besar duty cycle dapat diatur pada register

OCR. Semakin besar nilai data pada register OCR, maka semakin tingi juga nilai rata-rata

tegangan DC.

ymax

ymin

0 D.T T T+D.T 2T

0

255

OCR = 128

0

255

OCR = 200

Page 64: Trainer  ATMega16

Program : Mengatur intensitas cahaya led