Witam.
Niedokońca rozumim działanie tego przerwania napisałem sobie taki prosty program który
(wiedząc, że licznik liczy od wartości TCNT1=.... do 65535) wyświetla aktualny stan ICR1 podczas przechwycenia,no i zdziwiłem sie nie miło kiedy okazało się ,że licznik zamiast pokazywać wartość od 0 do (65535-34286=39714) wyświetla czasem ponad 10 000 . Barzo prosze o jakąs pomoc a najlepiej jakąś przykłądową działąjącą realizacje takiego przerwania.
Program:
#include <avr/io.h>
#include <avr/eeprom.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include "lcd.h"
#include "definicje.h"
int main(void)
{
LCD_init();
TCCR1B=4;
TCNT1=34286;
TIMSK=(1<<TICIE1)|(1<<TOIE1);
sei();
for(;;)
{
piszliczba_float_xy(o,10,0);
piszliczba_float_xy(OBR,10,1);
}}
/////////////////////////////////////////////////////////////
SIGNAL(SIG_INPUT_CAPTURE1)
{
o=ICR1-34286;
OBR=((ICR1-34286)*16.0f)/1000000.0f;//jle sekund od ostatniego impulsu
TCNT1=34286;
}
SIGNAL (SIG_OVERFLOW1) {TCNT1=34286;}