Praktikum Sistem Mikroprosesor Modul 2
Praktikum Sistem Mikroprosesor Modul 2
Abstrak— Pada praktikum Timer, Counter, Interrup ini akan Mikrokontroler AVR ATmega8535 telah dilengkapi dengan
dilakukan percobaan untuk memahami bagaimana suatu ADC internal EEPROM internal, Timer/Counter, PWM,
timer/counter yang ada pada suatu microprocessor ATMega analog comparator, dll. Sehingga dengan fasilitas yang
8335 berjalan. Dimana pertama-tama praktikan diharapkan lengkap ini memungkinkan kita belajar mikrokontroler
mampu memahami datasheet dari ATMega 8535, untuk
keluarga AVR dengan lebih mudah dan efisien, serta dapat
melihat bagaimana fungsi dari tiap register yang ada serta
nilai bit yang dimiliki pada timer/counter ATMega 8535.
mengembangkan kreativitas penggunaan mikrokontroler
Untuk melakukan praktikum ini digunakan bahasa ATmega8535. Timer/Counter ialah salah satu fitur yang
pemrograman C pada CV AVR. Konfigurasi untuk terdapat pada mikrokontroller yang mempunyai fungsi
timer/counter ini juga akan diaplikasikan dengan membuat penyacah nilai berdasarkan nilai frekuensi yang digunakan.
sebuah delay melalui register timer/counter yang ada pada Nilai frekuensi ini juga bisa kita ubah-ubah sesuai dengan
ATMega 8535. Delay yang telah dibuat akan ditampilkan kebutuhan. Nilai Frekuensi ini didapat dari hasil bagi antara
pada LED Display yang akan diamati dan dimodifikasi frekuensi mikrokontroller dengan nilai prescaller. Adapun
sebagai keluaran untuk delay serta external interrupt. tujuan dari penggunaan timer dan counter AVR ialah
Sehingga pada akhirnya praktikan mampu membuat
melaksanakan tugas tertentu secara berulang (mode
aplikasi External Interrupt pada AVR dengan menggunakan
bahasa pemprograman C pada CV AVR.
normal), menghitung panjang pulsa (input capture),
menghitung banyaknya event (sebagai counter),
mengendalikan kecepatan motor DC (pulsa wide
Kata Kunci: Counter, Interrupt, Timer. modulation /PWM), membuat penundaan waktu (delay),
sinyal generator. Komponen utama Timer/Counter adalah
sebuah register yg tugasnya hanya berhitung dari 0 sampai
I. PENDAHULUAN
batas maximumnya, register ini pada AVR disebut register
TCNT. Misalnya sebuah register TCNT pada AVR
Mikrokontroler adalah IC yang dapat deprogram adalah 8 bit, maka nilai maksimunya adalah 255.
berulang kali, baik ditulis atau dihapus. Biasanya Poin penting yang ingin dicapai pada praktikum ini ialah
digunakan untuk pengontrolan otomatis dan manual pada agar praktikan:
perangkat elektronika. Beberapa tahun terakhir, a. Praktikan memahami datasheet ATMega 8535.
mikrokontroler sangat banyak digunakan terutama dalam b. Praktikan mampu membuat aplikasi Timer/ Counter dan
pengontrolan robot. Seiring perkembangan elektronika, Interrupt pada AVR dengan menggunakan bahasa
mikrokontroler dibuat semakin kompak dengan bahasa pemprograman C pada CV AVR.
pemrograman yang juga ikut berubah. Salah satunya adalah c.Praktikan mampu membuat aplikasi External Interrupt
mikrokontroler AVR (Alf and Vegard’s Risc processor) pada AVR dengan menggunakan bahasa pemprograman
ATmega8535 yang menggunakan teknologi RISC (Reduce C pada CV AVR.
Instruction Set Computing) dimana program berjalan lebih
cepat karena hanya membutuhkan satu siklus clockuntuk
mengeksekusi satu instruksi program. Secara umum, AVR II. LANDASAN TEORETIS
dapat dikelompokkan menjadi 4 kelas, yaitu kelas ATtiny, Dasar teori yang akan digunakan pada praktikum ini ialah
keluarga AT90Sxx, keluarga ATmega, dan AT86RFxx. sebagai berikut:
Pada dasarnya yang membedakan masing-masing kelas 1. ATmega 8535
adalah memori, peripheral, dan fungsinya. Dari segi
arsitektur dan instruksi yang digunakan, mereka bisa ATMega8535 adalah mikrokontroler CMOS 8 bit daya
dikatakan hampir sama. Mikrokontroler AVR rendah berbasis arsitektur RISC. Instruksi dikerjakan
ATmega8535 memiliki fitur yang cukup lengkap.
pada satu siklus clock, ATMega8535 mempunyai Avcc Pin tegangan suplai untuk port A dan ADC. Pin ini
throughput mendekati 1 MIPS per MHz, hal ini harus dihubungkan ke Vcc walaupun ADC tidak digunakan,
membuat ATMega8535 dapat bekerja dengan maka pin ini harus dihubungkan ke Vcc melalui low pass
kecepatan tinggi walaupun dengan penggunaan daya filter
Aref pin referensi tegangan analog untuk ADC
rendah. Mikrokontroler ATmega8535 memiliki
AGND pin untuk analog ground. Hubungkan kaki ini ke
beberapa fitur atau spesifikasi yang menjadikannya GND, kecuali jika board memiliki analog ground yang
sebuah solusi pengendali yang efektif untuk berbagai terpisah, Berikut ini adalah penjelasan dari pin
keperluan. Fitur-fitur tersebut antara lain: mikrokontroler ATMega8535 menurut port-nya masing-
masing:
1. Saluran I/O sebanyak 32 buah, yang terdiri atas - Port A
Port A, B, C dan D Pin33 sampai dengan pin 40 merupakan pin dari port A.
2. ADC (Analog to Digital Converter) Merupakan 8 bit directional port I/O. Setiap pin-nya dapat
3. Tiga buah Timer/Counter dengan kemampuan menyediakan internal pull-up resistor (dapat diatur per bit).
perbandingan Output buffer port A dapat memberi arus 20 mA dan dapat
4. CPU yang terdiri atas 32 register mengendalikan display LED secara langsung. Data
Direction Register port A (DDRA) harus di-setting terlebih
5. Watchdog Timer dengan osilator internal
dahulu sebelum port A digunakan. Bit-bit DDRA diisi 0 jika
6. SRAM sebesar 512 byte ingin memfungsikan pin-pin port A yang disesuaikan
7. Memori Flash sebesar 8kb dengan kemampuan sebagai input, atau diisi 1 jika sebagai output. Selain itu,
read while write pin-pin pada port A juga memiliki fungsi-fungsi alternatif
8. Unit Interupsi Internal dan External khusus seperti yang dapat dilihat dalam tabel:
9. Port antarmuka SPI untuk men-download program Penjelasan pin pada port A
ke flash Pin Keterangan
10. EEPROM sebesar 512 byte yang dapat diprogram PA.7 ADC7 (ADC Input Channel 7)
saat operasi PA.6 ADC6 (ADC Input Channel 6)
11. Antarmuka komparator analog PA.5 ADC7 (ADC Input Channel 5)
12. Port USART untuk komunikasi serial. PA.5 ADC4 (ADC Input Channel 4)
PA.3 ADC3 (ADC Input Channel 3)
PA.2 ADC2 (ADC Input Channel 2)
- Konfigurasi Pin ATMega8535 PA.1 ADC1 (ADC Input Channel 1)
PA.0 ADC0 (ADC Input Channel 0)
Mikrokontroler AVR ATMega memiliki 40 pin dengan 32
pin diantaranya digunakan sebagai port paralel. Satu port - Port B
paralel terdiri dari 8 pin, sehingga jumlah port pada Pin 1 sampai dengan pin 8 merupakan pin dari port B.
mikrokontroler adalah 4 port, yaitu port A, port B, port C Merupakan 8 bit directional port I/O. Setiap pin-nya dapat
dan port D. Sebagai contoh adalah port A memiliki pin menyediakan internal pull-up resistor (dapat diatur per bit).
antara port A.0 sampai dengan port A.7, demikian Output buffer port B dapat memberi arus 20 mA dan dapat
selanjutnya untuk port B, port C, port D. Diagram pin mengendalikan display LED secara langsung. Data
mikrokontroler dapat dilihat pada gambar berikut: Direction Register port B (DDRB) harus di-setting terlebih
Berikut ini adalah tabel penjelasan mengenai pin yang dahulu sebelum port B digunakan. Bit-bit DDRB diisi 0 jika
terdapat pada mikrokontroler ATMega8535: ingin memfungsikan pin-pin port B yang disesuaikan
sebagai input, atau diisi 1 jika sebagai output. Selain itu,
Vcc Tegangan suplai (5 volt) pin-pin port B juga memiliki fungsi-fungsi alternatif khusus
GND Ground seperti berikut:
RESET Input reset level rendah, pada pin ini selama lebih Penjelasan pin pada port B
dari panjang pulsa minimum akan menghasilkan reset Pin Keterangan
walaupun clock sedang berjalan. RST pada pin 9 PB.7 SCK (SPI Bus Serial Clock)
merupakan reset dari AVR. Jika pada pin ini diberi PB.6 VISO (SPI Bus Master Input/Slave Output)
masukan low selama minimal 2 machine cycle maka sistem PB.5 VOSI (SPI Bus Master Output/Slave Input)
akan di-reset PB.4 SS (SPI Slave Select Input)
XTAL 1 Input penguat osilator inverting dan input pada PB.3 AIN1 (Analog Comparator Negative Input)
rangkaian operasi clock internal OCC (Timer/Counter0 Output Compare Match Output)
XTAL 2 Output dari penguat osilator inverting
PB.2 AIN0 (Analog Comparator Positive Input) memungkinkan dua register yang berbeda dapat diakses
INT2 (External Interrupt2 Input) dalam satu siklus clock
PB.1 T1 (Timer/Counter1 External Counter Input)
PB.0 T0 (Timer/Counter0 External Counter Input) 2. Prescaler
XCK (JSART External Clock Input/Output)
- Port C Timer pada dasarnya hanya menghitung pulsa clock.
Pin 22 sampai dengan pin 29 merupakan pin dari port C.
Frekuensi pulsa clock yang dihitung tersebut bisa
Port C sendiri merupakan port input atau output. Setiap pin-
nya dapat menyediakan internal pull-up resistor (dapat sama dengan frekuensi crystal yang dipasang atau
diatur per bit). Output buffer port C dapat memberi arus 20 dapat diperlambat menggunakan prescaler dengan
mA dan dapat mengendalikan display LED secara faktor 8, 64, 256 atau 1024. Berikut penjelasannya:
langsung. Data Direction Register port C (DDRC) harus di- Sebuah AVR menggunakan crystal dengan frekuensi
setting terlebih dahulu sebelum port C digunakan. Bit-bit 8 MHz dan timer yang digunakan adalah timer 16 bit,
DDRC diisi 0 jika ingin memfungsikan pin-pin port C yang maka maksimum waktu timer yang bisa dihasilkan
disesuaikan sebagai input, atau diisi 1 jika sebagai output. adalah:
Selain itu, pin-pin port D juga memiliki fungsi-fungsi
alternatif khusus seperti berikut: TMAX = 1/fCLK x (FFFFh+1) = 0.125uS x 65536
Penjelasan pin pada port C = 0.008192 S
Pin Keterangan
PC.7 TOSC2 (Timer Oscillator Pin 2)
PC.6 TOSC1 (Timer Oscillator Pin 1) Untuk menghasilkan waktu timer yang lebih lama
PC.1 SDA (Two-Wire Serial Bus Data Input/Output Line) dapat digunakan prescaler, misalnya 1024, maka
PC.0 SCL (Two-Wire Serial Bus Clock Line) maksimum waktu timer yang bisa dihasilkan adalah:
c. Timer/Counter 2
Bit 2,1,0 (CS22; CS21, CS20): Clock Select. Ketiga bit ini
memilih sumber clock yang akan digunakan oleh
Timer/Counter.
START
TRUE (1)
END
Dimana untuk mendapatkan delay selama 5 detik digunakan Tampilkan nilai Counter 0 di LCD
timer counter 2 agar mendapatkan nilai lebih 32 bit. Hal ini
dikarenakan untuk TCNT1 tidak menghasilkan delay > = 4
detik.
2^32 = 4294967296, sebagai nilai maksimal Dimana input counter 0 berasal dari tombol yang ketika
4294967296 – (15535*5) = 4294889171 tombol terbuka menjadi tidak ada sinyal input, maka kondisi
Maka akan didapatkan nilai delay 5 detik, dengan prescaler portb.0 (T0) dibuat input pull-up (Portb.0=1) supaya ketika
tetap yaitu 1024. tombol terbuka logika pada pin T0 adalah High.
Diatur nilai dari TCCR0 = 0b110, dimana ini akan membuat
B. Tugas II: EXTERNAL CLOCK SEBAGAI COUNTER
nilai External Clock Sources T0 pin. Clock on Falling edge.
- Tugas II.B.1 Konfigurasi timer 0 yang difungsikan sebagai counter dengan
Pada percobaan ini diatur dimana nilai counter yang sinyal deteksi pada sisi turun (falling), secara otomatis pula
ditampilkan pada LCD merupakan hasil dari banyaknya Counter 0 akan aktif, sehingga ketika ada pulsa yang masuk
keypad ke pin T0 mulai dicacah/dihitung. Pulsa berasal dari
perubahan logika pada pin T0. Ketika SW 1 ditekan maka
#include <mega8535.h> logika pin T0=Low, sehingga timbul pulsa hig-low-high.
#include <alcd.h> Selanjutnya menampilkan hasil cacahan counter 0 ke LCD.
#include <stdio.h>
Nilai counter 0 ada di register TCNT0. Bertipe integer supaya
char str[10]; tampil di LCD kita konversi dulu ke string dengan
void main() menggunakan fungsi sprintf(str,”%i”,TCNT0).
{
DDRB.0 = 0;
Perintah ini akan dikerjakan terus-menerus, sehingga
PORTB.0 = 1; ditempatkan dalam loop while(1). Pada saat praktikum,
lcd_init(16); terdapat nilai-nilai yang tidak sesuai antara jumlah keypad
lcd_clear(); yang ditekan dengan jumlah counter yang ditampilkan di
lcd_putsf("Counter 0= "); LCD. Hal tersebut dikarenakan bounching pada saklar
TCCR0 =0b110; mekanik, jadi semacam pantulan pada dua sisi koneksi saklar
while(1)
{
mekanik tersebut. Anda dapat menggunakan masukan pulsa
sprintf(str,"%i",TCNT0); dari function generator untuk mendapatkan hasil yang bagus.
lcd_gotoxy(10,0);
lcd_puts(str);
}
}
Hasil yang didapat:
- Tugas II.B.2
#include <mega8535.h>
START
#include <delay.h>
#include <alcd.h>
#include <stdio.h>
char str[10];
void main() DDRB.0 = 0 dan PORTB.0=1 Untuk
{ mengatur inoput dari saklar
DDRA = 0xFF;
//PORTA =0xFF;
DDRB.0 = 0;
PORTB.0 = 1;
lcd_init(16); TRUE (1)
lcd_clear();
lcd_putsf("Counter 0= ");
TCCR0 =0b110;
while(1) Counter 0 bertipe integer di TCNT di konversi ke
{ String
sprintf(str,"%i",TCNT0);
lcd_gotoxy(10,0);
lcd_puts(str);
PORTA = 0b11111111;
delay_ms(200*TCNT0);
PORTA = 0b00000000;
Tampilkan Keluaran LED Blink delay setiap 1 detik
delay_ms(200*TCNT0); dikali dengan jumlah yang ditekan (nilai Counter 0
pada TCNT0)
}
}
Tampilkan nilai Counter 0 di LCD
C. Tugas III: PORT A SEBAGAI OUTPUT DAN PORT D Hasil yang didapat:
SEBAGAI INPUT
- Tugas I.C.1
Pada percobaan ini dilakukan display pada LCD sebagai
keterangan interrupt yang digunakan dengan menekan keypad
yang telah diatur:
#include <mega8535.h>
#include <alcd.h>
void main()
{
DDRD.2 = 0;
DDRD.3 = 0;
PORTD.2 = 1;
PORTD.3 = 1;
GICR = 0b11000000;
MCUCR = 0b00000000;
#asm("sei")
lcd_init(16);
lcd_clear(); Diatur output pada lcd dengan memanggil fungsi interrupt
lcd_putsf("Ext Interrupt"); global yaitu #asm(“sei”), sehingga dapat diatur jenis fungsi
while(1); untuk menampilkan keterangan interrupt pada bagian LCD.
} Yang disesuaikan dengan PORTD pada keypad.
interrupt[2]void interupsi_ext0(void)
{
- Tugas I.C.2
lcd_gotoxy(0,1);
lcd_putsf("INT Ext 0"); Digunakan interrupt untuk melakukan interupsi pada suatu main
} program,
#include <mega8535.h>
interrupt[3]void interupsi_ext1(void) #define F_CPU 8000000UL
{ #include <delay.h>
lcd_gotoxy(0,1); #include <alcd.h>
lcd_putsf("INT Ext 1"); void main()
} {
unsigned char i = 0xFE; //254 = 1111 1110
DDRA = 0xFF;
PORTA = i;
START DDRD.2 = 0;
DDRD.3 = 0;
PORTD.2 = 1;
PORTD.3 = 1;
GICR = 0b11000000;
Set nilai MCUCR sesuai dengan MCUCR = 0b00000000;
Konfigurasi 0b00000000 #asm("sei")
Dan #asm(“sei”) global interrupt lcd_init(16);
lcd_clear();
lcd_putsf("Ext Interrupt");
while(1) // (untuk rotasi pada led display)
TRUE (1) {
PORTA = i;
delay_ms(40);
i=(i<<1)|(i>>7);
Diatur nilai PORTD sebagai input pada Fungsi }
interrupt while(1);
}
interrupt[2]void interupsi_ext0(void)
{
PORTA = 0xFF;
Jalankan fungsi pertama (ext0) atau kedua (ext1)
delay_ms(200);
ketika menerima input dari PORTD lcd_gotoxy(0,1);
lcd_putsf("INT Ext 0");