#include <avr/io.h>
void TimerInit();
/*
Frekuensi diinginkan = 1KHz
prescaller 64 , Xtal 16MHz
tick = 64/16Mhz= 4 us
delay=counter*tick
delay=counter*4 us
counter=delayus/4 us
untuk sampling rate 2 khz maka Tsampling= 1/2Khz= 500 us
counter = 500/4 us = 125
nilai TCNT0= -125 -> karena counter up
*/
int main(void) {
DDRB |= _BV(PB5); //pin PB5 sebagai output
TimerInit(); // menjalankan fungsi TimerInit
while (1) {
if (TIFR0&(1<<TOV0)) { //jika timer counter overflow...
TCNT0= (unsigned char)-125; //...reset counter kembali ke 125 hitungan sebelum overflow
//clear flag
TIFR0|=(1<<TOV0); //clear flag overflow dari timer counter
PORTB ^= (1 << PB5); //toggle pin PB5
}
}
}
void TimerInit(void) {
TCNT0 = (unsigned char) -125; // reset counter
TCCR0B = (1 << CS01)|(1 << CS00) ; //prescaller 64
}