LAPORAN
PRAKTIK
MIKROKONTROLLER
DOSEN
PENGAMPU MUSLIKHIN, M.Pd.
TIMER
DAN COUNTER
Disusun
oleh:
Istiqomah 16507134035 Angkatan 2016
TEKNIK
ELEKTRONIKA-D3
PENDIDIKAN
TEKNIK ELEKTRONIKA DAN INFORMATIKA
FAKULTAS
TEKNIK
UNIVERSITAS
NEGERI YOGYAKARTA
2018
A.
TUJUAN
Setelah melakukan praktik mahasiswa diharapkan dapat:
1. Memahami prinsip kerja timer/counter
2. Mampu mengirim menggunakan timer/counter aplikasi tertentu
B.
TEORI
DASAR
Timer/Counter
ialah salah satu fitur yang terdapat pada mikrokontroller yang mempunyai fungsi
penyacah nilai berdasarkan nilai frekuensi yang digunakan. Nilai frekuensi ini
juga bisa kita ubah-ubah sesuai dengan kebutuhan kita sobat. Nilai Frekuensi
ini didapat dari hasil bagi antara frekuensi mikrokontroller dengan nilai prescaller.
Apa sih prescaller itu?? Prescaller ialah nilai pembagi yang besarnya ialah
1,8,32,64,128,256,1024. Jadi jika kita menggunakan frekuensi mikrokontroller
dengan frekuensi 11.059200 MHZ dan kita menggunakan nilai prescaller nya ialah
1024 maka frekuensi yang akan didapat untuk timer itu sebesar 10.800 MHz.
Berikut kita bahas selengkapnya mengenai timer/counter.
Komponen utama Timer/Counter adalah
sebuah register yg tugasnya hanya berhitung dari 0 sampai batas
maximumnya, register ini pada AVR disebut register TCNT . Misalnya
sebuah register TCNT pada AVR adalah 8 bit, maka nilai
maksimunya adalah 255.
Register yang digunakan untuk mendukung operasi Timer
Counter pada AVR :
·
Register
TCNT = register pencacah dari 0 sampai nilai maximum yg kita tentukan.
·
Register
TCCR =Untuk pengaturan mode operasi Timer/Counter
·
Register
TIMSK =Untuk memilih Timer Counter mana yg aktif.
·
Register
TIFR = Untuk mengetahui adanya interupsi akibat operasi Counter Timer .
·
Register OC
(output compare) = untuk menyimpan nilai pembanding dgn nilai pd register
TCNT.
·
Fosc =
Frekuensi Crystall Clock
·
N =
Prescaler (1, 8, 64, 256, 1024)
Prescaler
Pada dasarnya Timer hanya menghitung pulsa clock.
Frekuensi pulsa clock yang dihitung tersebut bisa sama dengan frekuensi crystal
yang digunakan atau dapat diperlambat menggunakan prescaler dengan faktor 8,
64, 256 atau 1024.
Contoh penggunaan prescaler :
Suatu mikrokontroler menggunakan crystal dengan
frekuensi 8 MHz dan timer yang digunakan adalah Timer 1 (16 Bit) maka maksimum
waktu Timer yang bisa dihasilkan adalah :
TMAX = 1/fCLK x (FFFFh + 1)
= 0.125 µs x 65536
= 0.008192 s
= 0.125 µs x 65536
= 0.008192 s
Untuk menghasilkan waktu Timer yang
lebih lama dapat menggunakan prescaler 1024, maka waktu Timer yang bisa
dihasilkan adalah :
TMAX = 1/fCLK x (FFFFh+1) x N
= 0.125 µs x 655536 x 1024
= 8.388608 s
= 0.125 µs x 655536 x 1024
= 8.388608 s
Tujuan Penggunaan Timer & Counter
- Melaksanaan tugas secara ber-ulang
- Mengendalikan kecepatan motor DC (PWM)
- Melakukan perhitungan (Counter)
- Membuat penundaan waktu (delay)
C.
ALAT
DAN BAHAN
a. Modul AVR Atmega8535/8/16/32
b. PC (Personal computer)/laptop
c. Jumper
d. Power Supply 5-12 V
D.
SKEMA
RANGKAIAN
E.
LANGKAH
KERJA
1.Membuat alat dan bahan seperti
rangkaian di atas;
2. Sebelum anda menulis program aturlah
seperti gambar berikut;
3. Selanjutnya menulis
program di CVAVR
F.
HASIL
DAN ANALISIS
/*****************************************************
This
program was produced by the
CodeWizardAVR
V2.05.3 Standard
Automatic
Program Generator
©
Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project
:
Version
:
Date : 05/04/2018
Author : tyery08
Company
: embeeminded.blogspot.com
Comments:
Chip
type : ATmega16
Program
type : Application
AVR
Core Clock frequency: 11,059200 MHz
Memory
model : Small
External
RAM size : 0
Data
Stack size : 256
*****************************************************/
#include
<mega16.h>
#include
<alcd.h>
#include
<stdio.h>
//
Alphanumeric LCD functions
unsigned int hitung_naik;
//unsigned int hitungLSB;
unsigned int counter;
unsigned char bufferCounter[15];
unsigned int hitungan;
//
External Interrupt 1 service routine
interrupt
[EXT_INT1] void ext_int1_isr(void)
{
//
Place your code here
hitung_naik=hitung_naik+1;
}
//
Declare your global variables here
void
main(void)
{
//
Declare your local variables here
//
Input/Output Ports initialization
//
Port A initialization
//
Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
//
State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
//
Port B initialization
//
Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
//
State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
//
Port C initialization
//
Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
//
State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
//
Port D initialization
//
Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
//
State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
//
Timer/Counter 0 initialization
//
Clock source: T0 pin Falling Edge
//
Mode: Normal top=0xFF
//
OC0 output: Disconnected
TCCR0=0x06;
TCNT0=0x00;
OCR0=0x00;
//
Timer/Counter 1 initialization
//
Clock source: T1 pin Falling Edge
//
Mode: Normal top=0xFFFF
//
OC1A output: Discon.
//
OC1B output: Discon.
//
Noise Canceler: Off
//
Input Capture on Falling Edge
//
Timer1 Overflow Interrupt: Off
//
Input Capture Interrupt: Off
//
Compare A Match Interrupt: Off
//
Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x06;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
//
Timer/Counter 2 initialization
//
Clock source: System Clock
//
Clock value: Timer2 Stopped
//
Mode: Normal top=0xFF
//
OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
//
External Interrupt(s) initialization
//
INT0: Off
//
INT1: On
//
INT1 Mode: Low level
//
INT2: Off
GICR|=0x80;
MCUCR=0x00;
MCUCSR=0x00;
GIFR=0x80;
//
Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
//
USART initialization
//
USART disabled
UCSRB=0x00;
//
Analog Comparator initialization
//
Analog Comparator: Off
//
Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
//
ADC initialization
//
ADC disabled
ADCSRA=0x00;
//
SPI initialization
//
SPI disabled
SPCR=0x00;
//
TWI initialization
//
TWI disabled
TWCR=0x00;
//
Alphanumeric LCD initialization
//
Connections are specified in the
//
Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
//
RS - PORTD Bit 2
//
RD - PORTD Bit 1
//
EN - PORTD Bit 3
//
D4 - PORTD Bit 4
//
D5 - PORTD Bit 5
//
D6 - PORTD Bit 6
//
D7 - PORTD Bit 7
//
Characters/line: 16
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("NGITUNG AMAL..");
//
Global enable interrupts
#asm("sei")
while
(1)
{
// Place your code here
hitungan=TCNT1; //hitunganMSB
sprintf(bufferCounter,"%i
Liter", hitungan );
lcd_gotoxy(0,1);
lcd_puts(bufferCounter);
}
}
Berdasarkan hasil praktikum yang
telah dilakukan maka dapat dilakukan analisa pada praktik ini digunakan
mikrokontroler atmega16 yang disimulasikan menggunkan proteus 8 dan pemrograman
menggunakan Code Vision AVR. Sebelum menulis program dilakukan setting terlebih
dahulu pada port-port LCD dimana yang digunakan adalah port D. Selanjutnya
mengatur timernya juga seperti pada langkah kerja diatas. Jika setting telah
dilakukan dengan benar maka menuliskan program sesuai perintah pada job sheet.
Kemudian mensimulasikan di proteus dimana muncul tampilan pada LCD seperti pada
gambar rangkaian. Program akan melakukan counter up dimana dimulai dari 0,
1,2,..,dst. Sedangkan timer berfungsi sebagai pewaktu kapan program akan
dijalankan dan akan berhenti. Pengaplikasian timer dan counter dapat
diaplikasikan pada penghitung amal, penghitung barang, dsb.
G.
KESIMPULAN
Berdasarkan
hasil praktikum yang telah dilakukan dan teori yang ada maka dapat disimpulkan
bahwa
1. Timer
merupakan fungsi waktu yang sumber clocknya berasal dari clock internal yang
diguanakan sebagai pewaktu. Sedangkan counter merupakan fungsi perhitungan yang
sumber clocknya berasal dari external mikrokontroler atau sebagai pencacah.
2. Pada
mikrokontroler ATMEGA 16 memiliki 3 buah timer yaitu timer 0 (8bit), timer1
(16bit), dan timer 2 (8bit). Untuk mengenai register lengkapnya bisa dibaca
pada datasheet. Namun yang akan dibahas pada tulisan kali ini hanya timer
0(8bit) dan timer1 (16 bit) saja.


