Monday, February 21, 2011

Timer ATtiny dengan osilator internal


Timer ATtiny menggunakan internal calibrate RC oscilator
Led berkedip dengan frekuensi 1 Hz



Menggunakan internal calibrate RC oscilator 8.000.000 hz, mikrokontroler akan menjalankan timer dan membandingkan dengan nilai 0x7d (decimal 125) bila sama, CPU akan terinterupsi ( = terjadi setiap 1 ms) dan berulang terus-menerus, dengan menggunakan fasilitas interupsi dan menuliskan code pada Timer 0 output compare A interrupt service routine seperti pada potongan program di bawah, maka akan mengakibatkan led yang dipasang pada PORTD.0 menyala berkedip dengan frekuensi  1hz dan duty cycle 50% (low level 500 ms dan high level 500ms). Berikut potongan programnya

#include <tiny2313.h>
Int temp_count= 0;

// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
if (timercount == 500) PORTD.0 = ~PORTD.0;
}
void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out
// State6=T State5=T State4=T State3=T State2=T State1=T State0=0
PORTD=0x00;
DDRD=0x01;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: CTC top=OCR0A
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x02;
TCCR0B=0x03;
TCNT0=0x00;
OCR0A=0x7D;
OCR0B=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
// Global enable interrupts
#asm("sei")
while (1)
      {
      // Place your code here
      };
}