WItam
Mam problem z Timerem1, chcę żeby zliczał impulsy bez użycia przerwania,
tzn podaję przebieg prostokątny na dowolny pin procesora i T1 ma zliczać ilość taktów w czasie trwania stanu niskiego, czyli mierzyć czas impulsu zerowego, napisałem poniższy listing i wyświetla głupoty (około 13000), podaję 2kHz czyli T1 powinien zliczyć do 2000 bo okres jest 500us co daje 250us na stan niski i przy prescale 1 i kwarcu 8Mhz (0.125us/takt) daje 250us/0.125us = 2000, co jest źle?
Mam problem z Timerem1, chcę żeby zliczał impulsy bez użycia przerwania,
tzn podaję przebieg prostokątny na dowolny pin procesora i T1 ma zliczać ilość taktów w czasie trwania stanu niskiego, czyli mierzyć czas impulsu zerowego, napisałem poniższy listing i wyświetla głupoty (około 13000), podaję 2kHz czyli T1 powinien zliczyć do 2000 bo okres jest 500us co daje 250us na stan niski i przy prescale 1 i kwarcu 8Mhz (0.125us/takt) daje 250us/0.125us = 2000, co jest źle?
uint16_t czas;
DDRB &= 0b11111110;
TCCR1A = 0;
TCCR1B |= _BV(CS10);//start timer z prescale 1
for(;;)
{
while(bit_is_set(PINB,0)) //czekaj aż skończy się stan H
{}
// początek stanu L
TCNT1=0;
while(bit_is_clear(PINB,0)) //czekaj aż skończy się stan L
{}
czas=TCNT1;
lcd_goto(0);
lcd_puts("T1=");
itoa(czas, dana, 10);
lcd_puts(dana);
_delay_ms(500);
} 