Trainer Book ATMega16
January 19, 2017 | Author: Roni Nepology | Category: N/A
Short Description
Download Trainer Book ATMega16...
Description
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
3.
-
0 8 MHz untuk ATMEGA16L
-
0 16 untuk ATMEGA16
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
6
5
4
3
2
1
0
I
T
H
S
V
N
Z
C
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
SREG
Bit7
: I (global interupt enable)
Bit6
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)
Bit5
: H (Half Carry Flag)
Bit4
: S (Sign Bit)
Bit3
Bit S merupakan hasil operasi EXOR antara flag N (negative) dan flag V (komplemen dua overflow) : 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 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
PINA.5
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 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
=
2.
Untuk memasukan shift right
&=
Untuk memasukan bitwise and
^=
Untk memasukan bitwise exor
\=
Untuk memasukan bitwise or
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
Pin input
Free pin
Fitur lain Supply
7)
: - dip switch 8 chanel pada port C (0 - 4 push button NO pada port D (4 :
7) 7)
12 port yaitu port A (0 7), port D (0
3) dapat
difungsikan sebagai port I/O : - 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
c.
install from a list or spesific location (advanced)
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
c. File yang dibuka adalah
Load Flash file to Buffer
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
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
PORTA
Port A data direction register - DDRA Bit
7
6
5
4
3
2
1
0
DDRA7
DDRA6
DDRA5
DDRA4
DDRA3
DDRA2
DDRA1
DDRA0
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
DDRA
Port A input pin addres - PINA Bit
7
6
5
4
3
2
1
0
PINA7
PINA6
PINA5
PINA4
PINA3
PINA2
PINA1
PINA0
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
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
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 :
Program yang ditulis
-
Build program dengan menekan Ctrl+F9 atau klik project
-
Download program menggunakan software khazama, caranya: Atur chip AVR yang digunakan
build all
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
Alamat Program
Sumber Interupt
Keterangan External pin, power on reset, brown-out
1
$000(1)
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
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
TIMER 1 COMP B
reset, Watchdog reset, JTAG AVR reset
Timer/counter 1 compare match B
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
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
MCUCR
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
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
GICR
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 f CA a 10 9 8 7
G, Dp yang disusun sedemikian rupa sehingga membentuk seven
b 6
a
segmen. gambar disamping adalah konfigurasi pin dari seven segmen: g
seven segmen common anoda yang masing-masing dikendalikan e
melalui PD4, PD5, PD6, PD7. Sebenarnya yang bisa dinyalakan dari
secara bergantian dengan waktu tunda yang sangat cepat.
c
Dp
d
empat buah seven segmen tersebut hanya salah satu saja. Maka agar tampak nyala bersamaan ke empat seven segmen harus dihidupkan
b
f
Pada trainer mikrokontroler yang kita gunakan, menggunakan 4 bauh
1 e
2 3 4 5 d CA c Dp
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
A
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PA0
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
12
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PA0
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; pertama
Program:
PORTD = 0b00000000;
delay;
ulang dari baris
2. Menampilkan karakter berjalan Menampilkan tulisan ATMEGA 16 berjalan. Berikut adalah proses penampilan tulisan berjalan. PA7
PA6
PA5
PA4
PA3
PA2
PA1
PD4
PD4
PD5
PD5
PD6
PD6
PD7
PD7
PA0
PA0
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PD4
PD4
PD5
PD5
PD6
PD6
PD7
PD7
PA0
PA0
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PD4
PD4
PD5
PD5
PD6
PD6
PD7
PD7
PA0
PA0
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PD4
PD4
PD5
PD5
PD6
PD6
PD7
PD7
PA0
PA0
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PD4
PD4
PD5
PD5
PD6
PD6
PD7
PD7
PA0
PA0
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PD4
PD4
PD5
PD5
PD6
PD6
PD7
PD7
PA0
PA0
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PA7
PA6
PA5
PA4
PA3
PA2
PA1
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
FOCn
WGMn
COMn
COMn
WGMn
CSn
CSn
Csn
-
0
1
0
1
2
1
0
TCCRn
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)
0
0
0
1
0
1
2
1
3
1
Timer/counter mode of operation Normal
TOP
Update of OCR0
TOV 0 flag set-on
0xFF
Immediate
MAX
PWM, phase correct
0xFF
TOP
BOTTOM
0
CTC
OCR0
Immediete
MAX
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
1
1
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
CS01
CS00
Description
0
0
0
No clock source (timer/counter stopped)
0
0
1
ClkI/O/no prescaling
0
1
ClkI/O/8 (from prescaler)
0
1
0 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
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
TIMSK
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
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
TIFR
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
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
TCCR1B
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. 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
255 OCR = 200
OCR = 128 0
0
Program : Mengatur intensitas cahaya led
View more...
Comments