Plan jest taki że chcę odczytywać wartość timera1 po każdym wywołaniu przerwania i go zerować.
Docelowo ma z tego powstać obrotomierz do silnika ale to teraz nie istotne.
Przerwanie jest wywoływane podaniem na wejście D2 syganłu z dokładnego generatora na AD9850 tak że przerwania zapewne są wywoływane bardzo równo.
Oto wynik działania programu dla 1Hz ! Dramat !
Wydaje mi się że różnice między kolejnymi odczytami powinny być prawie identyczne, + - klika klików.
Co zrobiłem źle ?
ps. serial dałem na full żeby wykluczyć że przerwanie wlezie na funkcje print
Docelowo ma z tego powstać obrotomierz do silnika ale to teraz nie istotne.
Kod:
volatile int timer_val=0;
volatile int timer_val_old=0;
void setup() {
Serial.begin(2000000);
pinMode(2, INPUT);
pinMode(2, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(2), alarm, FALLING);
TCCR1A = 0; // set entire TCCR1A register to 0
TCCR1B = 0; // same for TCCR1B
TCNT1 = 0; // Reset Timer1 Count
TCCR1B |= (1 << CS10); // prescaler 1024
TCCR1B |= (1 << CS12); // prescaler 1024
}
void loop() {
if(timer_val!=timer_val_old){
Serial.println(timer_val);
timer_val_old=timer_val;
}
}
void alarm() {
timer_val=TCNT1;
TCNT1=0;
}
Przerwanie jest wywoływane podaniem na wejście D2 syganłu z dokładnego generatora na AD9850 tak że przerwania zapewne są wywoływane bardzo równo.
Oto wynik działania programu dla 1Hz ! Dramat !
Wydaje mi się że różnice między kolejnymi odczytami powinny być prawie identyczne, + - klika klików.
Co zrobiłem źle ?
ps. serial dałem na full żeby wykluczyć że przerwanie wlezie na funkcje print