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
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 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.
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
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)
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
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
>> = 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 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)
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 : 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
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 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
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 :
- 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
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 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
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.
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
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
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 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
(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 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:
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
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
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 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
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 :
- 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.
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
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
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.
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
Program : Mengatur intensitas cahaya led
Top Related