Rabu, 30 Mei 2018

Timer dan Counter


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

Tujuan Penggunaan Timer & Counter
  1. Melaksanaan tugas secara ber-ulang
  2. Mengendalikan kecepatan motor DC (PWM)
  3. Melakukan perhitungan (Counter)
  4. 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.