Anda di halaman 1dari 64

DAFTAR ISI

i ii BAB I MENGENAL ATMEGA 16 1. 2. 3. 4. BAB II MENGENAL BAHASA C 1. 2. 3. BAB III TRAINER MIKROKONTROLER 1. Modul Boar 2. 3. Menggunakan Trainer Mikrokontroler BAB IV APLIKASI INPUT/OUTPUT MIKROKONTROLER 1. 2. Contoh Program BAB V INTERUPSI 1. 2. BAB VI APLIKASI DENGAN SEVEN SEGMEN 1. 2. BAB VII APLIKASI DENGAN MATRIK LED 1. 2. BAB VIII TIMER/COUNTER 1. 2. 3. 4. BABIX PWM 49 52 54 54 61 35 38 32 33 28 . 29 20 21 .. 15 . 16 18 5 8 11 ... 1 2 .. 3 ... 4

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.

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

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

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 I 6 T R/W 0 5 H R/W 0 4 S R/W 0 3 V R/W 0 2 N R/W 0 1 Z R/W 0 0 C R/W 0 SREG

Read/write Initial Value

R/W 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 : T (Bit copy interupt) : H (Half Carry Flag) : S (Sign Bit) Bit S merupakan hasil operasi EXOR antara flag N (negative) dan flag V (komplemen dua overflow) : V( Bit berguna untuk mendukung operasi aritmatika

Bit6 Bit5 Bit4

Bit3

Bit2

: N (Negtive Flag) Apabila suatu operasi menghasilkan bilangan negative, maka flag N akan di set.

Bit1 Bit0

: Z (Zero Flag) Bit akan di set bila operasi yang diperoleh adalah nol : C (Carry flag) Bit akan diset bila hasil operasi menghasilkan carry

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 Ccross 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)

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 #define sensor SUM(a,b) PINA.5 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 Bit Char Unsigned char Signed char Int Short int Unsigned int Ukuran (Bit) 1 8 8 8 16 16 16 Range 0, 1 (tipe data bit hanya dapat digunakan untuk variabel global) -128 sampai 127 0 sampai 255 -128 sampai 127 -32768 sampai 32767 -32768 sampai 32767 0 sampai 65535

Signed in Long int Unsigned long int Signed long int Float Double

16 32 32 32 32 32

-32768 sampai 32767 -2147483648 sampai 2147483647 0 sampai 4294967295 -2147483648 sampai 2147483647 + 1.175e-38 sampai + 3.402e38 + 1.175e-38 sampai + 3.402e38

Operator yang dapat digunakan pada bahasa C adalah:


Jenis operator Operator < <= Operator kondisi > >= == != + Operator aritmatika * / % ! Operator logika && || ~ & Operator bitwise | ^ >> << = += -= Operator assignment *= /= %= << = Lebih kecil Lebih kecil atau sama dengan Lebih besar Lebih besar atau sama dengan Sama dengan Tidak sama dengan Penjumlahan Pengurangan Perkalian Pembagian Modulus (sisa bagi) Boolean not Boolean and Boolean or Komplemen bitwise Bitwise and Bitwise or Bitwise exor Right shift Left shift 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 Keterangan

>> = &= ^= \=

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.

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:

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:

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

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

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 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. 99)

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)

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.

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 Downloader (ISP) Firmware programmer Pin output Pin input : ATMEGA16 / ATMEGA8535 : ATMEGA8 (on board) : usb asp : 8 buah led pada port B (0 7) 7) 7) 3) dapat

: - dip switch 8 chanel pada port C (0 - 4 push button NO pada port D (4 :

Free pin

12 port yaitu port A (0 7), port D (0 difungsikan sebagai port I/O

Fitur lain Supply

: - 4 buah seven segmen common anoda - Dot matrik 5 x 7 : 5 V DC (menggunakan keluaran USB komputer)

Berikut adalah gambar prototype board trainer mikrokontroler:


indikator downloader Port B led output Reset Seven segmen 1 - 4

indikator busy

PWM led

indikator board

Button- PD0 Button- PD1

Button- PD2 (INT0)

Button- PD3 (INT1)

Port C - input

Matrik 5x7

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.

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

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

d.

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

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 PORTA7 Read/write Initial Value R/W 0 6 PORTA6 R/W 0 5 PORTA5 R/W 0 4 PORTA4 R/W 0 3 PORTA3 R/W 0 2 PORTA2 R/W 0 1 PORTA1 R/W 0 0 PORTA0 R/W 0 PORTA

Port A data direction register - DDRA


Bit 7 DDRA7 Read/write Initial Value R/W 0 6 DDRA6 R/W 0 5 DDRA5 R/W 0 4 DDRA4 R/W 0 3 DDRA3 R/W 0 2 DDRA2 R/W 0 1 DDRA1 R/W 0 0 DDRA0 R/W 0 DDRA

Port A input pin addres - PINA


Bit 7 PINA7 Read/write Initial Value R N/A 6 PINA6 R N/A 5 PINA5 R N/A 4 PINA4 R N/A 3 PINA3 R N/A 2 PINA2 R N/A 1 PINA1 R N/A 0 PINA0 R N/A PINAA

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 PORT bit = 1 PORT bit = 0 Output high Output low DDR bit = 0 Input pull-up Input floating

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

Konfigurasi port B sebagai output

Save program

Tuliskan program

Program :

Program yang ditulis

Build program dengan menekan Ctrl+F9 atau klik project

build all

Download program menggunakan software khazama, caranya: Atur chip AVR yang digunakan

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 :

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 :

BAB V INTERUPSI
Interupsi adalah keadaan dimana saat program utama dieksekusi oleh CPU, kemudian tibatiba 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 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Alamat Program $000(1) $002 $004 $006 $008 $00A $00C $00E $010 $012 $014 $016 $018 $01A $01C $01E $020 $022 $024 $026 $028 Sumber Interupt RESET INT0 INT1 TIMER2 COMP TIMER2 OVF TIMER1 CAPT TIMER1 COMP A TIMER 1 COMP B TIMER 1 OVF TIMER 0 OVF SPI, STC USART, RXC USART, UDRE USART, TXC ADC EE_RDY ANA_COMP TWI INT2 TIMER 0 COMP SPM_RDY Keterangan External pin, power on reset, brown-out reset, Watchdog reset, JTAG AVR reset Eksternal interupt request 0 Eksternal interupt request 1 Timer/Counter compare match Timer/counter overflow Timer/counter capture event Timer/counter 1 compare match A Timer/counter 1 compare match B Timer/counter 1 overflow Timer/counter 2 overflow Serial transfer complete USART, Rx Complete USART data register empty USART, Tx Complete ADC conversion complete EEPROM ready Analog comparator Two wire serial interface External interupt request2 Timer/counter 0 compare match Store program memory ready

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 SM2 6 SE R/W 0 5 SM1 R/W 0 4 SM0 R/W 0 3 ISC11 R/W 0 2 ISC10 R/W 0 1 ISC01 R/W 0 0 1SC0 R/W 0 MCUCR

Read/write Initial Value

R/W 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 0 0 1 1 ISC00 0 1 0 1 Keterangan Logika 0 pada pin INT0 menyebabkan interupsi Perubahan logika pada INT0 menyebabkan interupsi Perubahan logika dari 1 ke 0 pada pin INT0 menyebabkan interupsi 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 0 0 1 1 ISC10 0 1 0 1 Keterangan Logika 0 pada pin INT1 menyebabkan interupsi Perubahan logika pada INT1 menyebabkan interupsi Perubahan logika dari 1 ke 0 pada pin INT1 menyebabkan interupsi 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 INT1 6 INT0 R/W 0 5 INT2 R/W 0 4 R/W 0 3 R/W 0 2 R/W 0 1 IVSEL R/W 0 0 IVSE R/W 0 GICR

Read/write Initial Value

R/W 0

Bit-bit INT1, INT0, INT2 pada register GICR digunakan untuk mengaktifkan masingmasing 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 masingmasing interupsi akan dimulai dari vektor interupsi pada masing-masing jenis interupsi eksternal.

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:

Program Flip-flop

Program blink led

Program Utama, nyala bergatian

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.
1 e e d 2 3 4 5 d CA c Dp f g c
Dp

g f CA a 10 9 8 7 a b

b 6

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 0 1 2 3 4 5 6 7 8 9 A B C D E F 7 p 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 g 1 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 5 f 0 1 1 1 0 0 0 1 0 0 0 0 0 1 0 0 4 e 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 0 3 d 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 2 c 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 1 1 b 0 0 0 0 0 1 1 0 0 0 0 1 1 0 1 1 0 a 0 1 0 0 1 0 0 0 0 0 0 1 0 1 0 0 Hexa C0 F9 A4 B0 99 92 82 F8 80 90 88 83 C6 A1 86 8E

2. Program Aplikasi Seven Segmen a. Program menyalakan seven segmen 1, 2, 3, 4

b. Program up counter

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 PD4 PD5 A PD6 PD7 PA0 PA7 0 1 1 1 1 PA6 1 0 1 0 0 PA5 1 0 1 0 0 PA4 0 1 1 1 1 PA3 0 0 0 0 0 PA2 0 0 0 0 0 PA1 0 0 0 0 0 PA0 0 0 0 0 0

-on kan sebuah led syaratnya adalah anoda lebih positif dari katoda. Misalnya untuk menghidupkan led

(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:

b. Program menampilkan karakter 12 Karakter


PD4 PD5 PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0

0 1 0 0 0

1 1 1 1 1

0 0 0 0 0

0 1 0 0 1

1 0 0 1 1

1 0 1 0 1

0 1 0 0 1

0 0 0 0 0

12

PD6 PD7 PA0

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; pertama PORTD = 0b00000000; delay; ulang dari baris

Program:

2. Menampilkan karakter berjalan Menampilkan tulisan ATMEGA 16 berjalan. Berikut adalah proses penampilan tulisan berjalan.
PA7 PD4 PD5 PA6 PA5 PA4 PA3 PA2 PA1 PD4 PD5 PA7 PA6 PA5 PA4 PA3 PA2 PA1

PD6 PD7 PA0

PD6 PD7 PA0

PA7 PD4 PD5

PA6

PA5

PA4

PA3

PA2

PA1 PD4 PD5

PA7

PA6

PA5

PA4

PA3

PA2

PA1

PD6 PD7 PA0

PD6 PD7 PA0

PA7 PD4 PD5

PA6

PA5

PA4

PA3

PA2

PA1 PD4 PD5

PA7

PA6

PA5

PA4

PA3

PA2

PA1

PD6 PD7 PA0

PD6 PD7 PA0

PA7 PD4 PD5

PA6

PA5

PA4

PA3

PA2

PA1 PD4 PD5

PA7

PA6

PA5

PA4

PA3

PA2

PA1

PD6 PD7 PA0

PD6 PD7 PA0

PA7 PD4 PD5

PA6

PA5

PA4

PA3

PA2

PA1 PD4 PD5

PA7

PA6

PA5

PA4

PA3

PA2

PA1

PD6 PD7 PA0

PD6 PD7 PA0

PA7 PD4 PD5

PA6

PA5

PA4

PA3

PA2

PA1 PD4 PD5

PA7

PA6

PA5

PA4

PA3

PA2

PA1

PD6 PD7 PA0

PD6 PD7 PA0

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 :

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 FOCn 6 WGMn 0 5 COMn 1 4 COMn 0 3 WGMn 1 2 CSn 2 1 CSn 1 0 Csn 0 TCCRn

Keterangan : Bit 7 : FOCn (force output compare 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.

Bit 6 dan Bit 3 :

a. Mode operasi Timer Mode Normal Timer digunakan untuk menghitung saja, membuat delay, menghitung selang waktu Mode PWM, phase correct

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

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 0 1 2 3 WGM01 (CTC0) 0 0 1 1 WGM00 (PWM0) 0 1 0 1 Timer/counter mode of operation Normal PWM, phase correct CTC Fast PWM TOP 0xFF 0xFF OCR0 0xFF Update of OCR0 Immediate TOP Immediete TOP TOV 0 flag set-on MAX BOTTOM MAX 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 :

Compare output mode, non PWM mode


COM01 0 0 1 1 COM00 0 1 0 1 Description Normal port operation, OC0 disconected Toogle OC0 on compare Match Clear OC0 on compare match Set OC0 on compare match

Compare output mode, Fast PWM mode


COM01 0 0 1 1 COM00 0 1 0 1 Description Normal port operation, OC0 disconected Rserved Clear OC0 on compare match Set OC0 on compare match

Compare output mode, phase correct PWM mode


COM01 0 0 1 COM00 0 1 0 Description Normal port operation, OC0 disconected Reserved Clear OC0 on compare match when upcounting. Set OC0 on compare match when down-counting 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.

Berikut tabel seting bit tersebut untuk timer counter 0:


CS02 0 0 0 0 1 1 1 1 CS01 0 0 1 1 0 0 1 1 CS00 0 1 0 1 0 1 0 1 Description No clock source (timer/counter stopped) ClkI/O/no prescaling ClkI/O/8 (from prescaler) ClkI/O/64 (from prescaler) ClkI/O/256 (from prescaler) ClkI/O/1024 (from prescaler) Eksternal clock source on T0 pin. Clock on falling edge 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 OCIE2 6 TOIE2 R/W 0 5 TICIE1 R/W 0 4 OCIE1A R/W 0 3 OCIE1B R/W 0 2 TOIE1 R/W 0 1 OCIE0 R/W 0 0 TOIE0 R/W 0 TIMSK

Read/write Initial Value

R/W 0

Keterangan: Bit7 Bit6 Bit5 : OCIE2, timer/counter 2 output compare match interupt enable : TOIE2, timer/counter2 overflow interupt enable : TICIE1, timer1 input capture interupt enable

Bit4 Bit3 Bit2 Bit1 Bit0

: OCIE1A, timer/counter 1A output compare match interupt enable : OCIE1B, timer/counter1B output compare match interupt enable : TOEI1, timer/counter1 overflow interupt enable : OCIE0, timer/counter0 output compare match interupt enable : TOEI0 timer/counter0 overflow interupt enable

Berikut adalah bit pada register TIFR (timer/counter interupt flag register:
Bit 7 OCF2 6 TOV2 R/W 0 5 ICF1 R/W 0 4 OCF1A R/W 0 3 OCF1B R/W 0 2 TOV1 R/W 0 1 OCF0 R/W 0 0 TOV0 R/W 0 TIFR

Read/write Initial Value

R/W 0

Keterangan: Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 : OCF2, output compare flag : TOV2, timer/counter2 overflow flag : ICF1, timer1 input capture interupt flag : OCF1A, output compare flag 1A : OCF1B, output compare flag 1B : TOV1, timer counter1 overflow flag : OCF0, output compare flag0 : TOV0, timer/counter0 overflow flag

TCCR1B Timer/counter1control register B digunakan untuk mengatur mode timer, prescaler dan pilihan lainya.
Bit 7 ICNC1 6 ICES1 R/W 0 5 R 0 4 WGM13 R/W 0 3 WGM12 R/W 0 2 CS12 R/W 0 1 CS11 R/W 0 0 CS10 R/W 0 TCCR1B

Read/write Initial Value

R/W 0

CS12, CS11, CS10 sebagai Clock select bits, pemilih prescaler timer/counter 1 dan hubunganya dengan clock eksternal pada pin T1.
CS12 1 1 1 CS11 0 1 1 CS10 1 0 1 Description ClkI/O/1024 (from prescaler) Eksternal clock source on T0 pin. Clock on falling edge Eksternal clock source on T0 pin. Clock on rising edge

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

= 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 :

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 :

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

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

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.
255 OCR = 200 OCR = 128 0 0 255

Program : Mengatur intensitas cahaya led