From: Robin Krens Date: Thu, 19 May 2022 14:52:53 +0000 (+0200) Subject: hbc: timer with compare match output X-Git-Url: https://robinkrens.nl/gitweb/?a=commitdiff_plain;h=695d72fdf6ce4d714df79f4ac037e65cdd5ba640;p=lra-as-sensor hbc: timer with compare match output --- diff --git a/hbc.c b/hbc.c index d0169bd..5ff04c7 100644 --- a/hbc.c +++ b/hbc.c @@ -14,14 +14,18 @@ volatile int xvar = 1; * return PC after latest sleep_mode() call */ EMPTY_INTERRUPT(SIG_COMPARATOR); -ISR(TIM0_OVF_vect) +ISR(TIM0_COMPA_vect) +{ + xvar++; +} +ISR(TIM0_COMPB_vect) { xvar++; } -/* for debugging purposes */ -ISR(BADISR_vect) +ISR(TIM0_OVF_vect) { + //xvar++; } @@ -43,19 +47,20 @@ static void init_board(void) int main(void) { - init_board(); - - xvar = 1; + xvar = 1; cli(); - TCCR0A = 0x00; - TCCR0B = (1 << CS00) | (1 << CS02); + DDRB |= (1 << DDB0); /* set PB0 as output */ + TCCR0A = TCCR0B = 0; + TCCR0A |= (1 << WGM01) | (1 << WGM00) | (1 << COM0A1); + TCCR0B |= (1 << CS02) | (1 << CS00); /* clk/1024 prescaler */ + OCR0A = 0x7F; /* 50% duty cycle */ TCNT0 = 0; - TIMSK |= (1 << TOIE0); + TIMSK = (1 << OCIE0A) | (1 << OCIE0B) | (1 << TOIE0); /* enable interrupts for overflow and compare */ sei(); while(1) { - + _delay_ms(100); /* set LRA as sensor and switch to idle mode * check back-EMF of LRA: if treshold is surpassed * comparator intterupt is triggered */