TCNT1, digunakan untuk menyimpan nilai timer yang diinginkan dan dibagi menjadi 2 register 8 bit, yaitu: TCNT1H dan TCNT1L.

TIMSK dan TIFR, Timer Interrupt Mask Register (TIMSK) dan Timer Interrupt Flag (TIFR) digunakan untuk mengendalikan interrupt mana yang akan diaktifkan dengan cara melakukan setting pada TIMSK dan untuk mengetahui interrupt mana yang sedang terjadi.

Keterangan:
Bit 7: Timer/Counter2 Output Compare Match Interrupt Enable
Bit 6: Timer/Counter2 Overflow Interrupt Enable
Bit 5: Timer1 Input Capture Interrupt Enable
Bit 4: Timer/CounterA Output Compare Match Interrupt Enable
Bit 3: Timer/CounterB Output Compare Match Interrupt Enable
Bit 2: Timer/Counter1 Overflow Interrupt Enable
Bit 1: Timer/Counter0 Output Compare Match Interrupt Enable
Bit 0: Timer/Counter0 Overflow Interrupt Enable

Keterangan:
Bit 7: Output Compare Flag2
Bit 6: Timer/Counter2 Overflow Flag
Bit 5: Timer1 Input Capture Interrupt Flag
Bit 4: Output Compare Flag1A
Bit 3: Output Compare Flag1B
Bit 2: Timer/Counter1 Overflow Flag
Bit 1: Output Compare Flag0
Bit 0: Timer/Counter0 Overflow Flag
OCR1n, Output Compare Register Timer 1 n (n = A, B) merupakan register yang digunakan untuk membangkitkan interupsi eksternal dengan melakukan perbandingan (Output Compare) atau juga dapat digunakan untuk membangkitkan bentuk gelombang (PWM). Fungsi tersebut dikeluarkan oleh pin OC1n (n = A, B).

Dalam perhitungan, Timer1 dapat menggunakan rumus sebagai berikut:
Timer 1 = Tosc*(65536-TCNT1)*N → (16 Bit = 65536 ≈ 2^16)
Contoh penggunaan untuk timer 1 detik (Timer1 = 1 detik) dengan crystal 12 MHz dan menggunakan skala clock 1024 maka akan menghasilkan :
Tosc = 1/Fosc = 1/12 = 0,083
1 = 0.083*(65536-TCNT1)*1024
TCNT = 53818 = D23A (Hexadesimal)
Berdasarkan perhitungan diatas maka hasil yang diperoleh adalah D23A, maka nilai tersebut harus dimasukkan kedalam register TCNT1 agar timer 1 bernilai 1 detik. Berikut ini contoh penggunaannya pada Codevision AVR:

Membuat Blink Led dengan Timer1 (16 bit)
Buatlah program menyalakan Led selama delay 1 detik menggunakan Timer1 (Timer 16 bit). PORTB sebagai output yang dihubungkan ke Led.

/***************************************************** 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 : 23/08/2015 Author : Sh.mukti Company : Jangan gunakan software bajakan! Comments: Chip type : ATmega16 Program type : Application AVR Core Clock frequency: 10,800000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/ #include <mega16.h> // Timer1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { // Reinitialize Timer1 value TCNT1H=0xD5; TCNT1L=0xD0; // Place your code here if(f1_timer==1) //periksa flag timer { PORTC=0xff; //jika f1_timer=1 -> Led Mati f1_timer=0; //clear f1_timer } else { PORTC=0x00; //jika f1_timer=0 -> led nyala f1_timer=1; //set f1_tmer } } // 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=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTB=0x00; DDRB=0xFF; // 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: System Clock // Clock value: 10800,000 kHz // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=0x01; TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 10800,000 kHz // Mode: Normal top=0xFFFF // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: On // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x05; TCNT1H=0xD5; TCNT1L=0xD0; 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: Off // INT2: Off MCUCR=0x00; MCUCSR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x04; // 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; // Global enable interrupts #asm("sei") f1_timer=0; //kondisi awal flag timer berlogika '0' while (1) { // Place your code here } }
Jika artikel ini bermanfaat buat Anda, mohon untuk di Share because “Sharing is Caring”
Referensi:
- Heri Andrianto, Pemrograman Mikorkontroler AVR ATMega16 Menggunakan Bahasa C (CodeVisionAVR), Informatika, Bandung, 2008.
- www.geyosoft.com
- www.academia.edu
One thought on “Timer/Counter 1 (16 bit) pada AVR”