#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
void TimerInit(); // Deklarasi prototipe fungsi TimerInit
unsigned char periode;
ISR (TIMER0_OVF_vect) // Interrupt Service Routine (ISR) untuk overflow Timer/Counter0
{
PORTB ^= (1 << PB7); // Toggle nilai pada pin PB7
TCNT0= - 125; // Set nilai ulang counter TCNT0 ke -125
}
/*
prescaller 8 , Xtal 16MHz
tick = 8/16Mhz= 0.5 us
delay=counter*tick
delay=counter*0.5us
counter=delayus/0.5us
untuk sampling rate 16 khz maka Tsampling= 1/16Khz= 62.5us
counter = 62.5/0.5us = 125
nilai TCNT1= -125 -> karena counter up
*/
int main(void) {
DDRB |= _BV(PB7); // Set pin PB7 sebagai output
TimerInit(); /// Panggil fungsi TimerInit untuk mengatur timer
sei(); // Aktifkan interrupt global
/// enable global interupsi
while (1) {
sleep_mode(); // Masuk ke mode sleep
}
}
void TimerInit(void) {
// TCNT0 = -125; // Set nilai awal counter TCNT0 ke -125 (tidak digunakan)
TCCR0B = (1 << CS01) ; // Atur prescaler menjadi 8
TIMSK0 |= (1 << TOIE0); // Aktifkan interrupt overflow
}