Celem jest zrobienie funkcji zliczającej czas między przerwaniami generowanymi przez zewnętrzny generator (docelowo będzie to obrotomierz). Generator jest precyzyjny, AD9850. Na wejście zapodaje prostokąt o różnym od 50% stopniu wypełnienia ale to właśnie nie powinno mieć znaczenia. Wyjaśniam.
W poniższym kodzie korzystam z funkcji micros która mierzy czas od włączenia kontrolera, robię różnice i wyświetlam przez Seriala.
Wyniki są błędne w pewnym znaczeniu bo np przy 10Hz dostaje...
Wynikiem są naprzemiennie lecące 2 bardzo zbliżone wartości. Tak się dzieje niezależnie od zapodanej częstotliwości.
Zauważyć należy że jeśli weźmiemy parę dwu kolejnych liczb to wynik się zgadza. W tym przypadku dla 10Hz 45276+55032=100308 czyli jest OK.
Mój wniosek jest taki że przerwanie się wykonuje zarówno na opadającym o rosnącym zboczu a jako że stopień wypełnienia nie jest 50% to wynikiem są właśnie takie pary liczb odzwierciedlające poszczególne połówki okresu a nie cały okres (raczej poprawnie zmierzone).
Pierwotnie nie korzystałem z funkcji micros tylko na piechotę odczytywałem stan timera1 i go zerowałem i wyniki były takie same (w taktach licznika oczywiście a nie mikrosekundach) .
Pytanie, czy wg fachowców faktycznie problem jest z wywołaniem przerwania na obydwu zboczach zamiast jednego ?
Jeśli tak to gdzie tkwi błąd.
W poniższym kodzie korzystam z funkcji micros która mierzy czas od włączenia kontrolera, robię różnice i wyświetlam przez Seriala.
Code: c
Wyniki są błędne w pewnym znaczeniu bo np przy 10Hz dostaje...
Code:
Roznica: 45276
Roznica: 55032
Roznica: 45276
Roznica: 55036
Roznica: 45276
Roznica: 55032
Roznica: 45280
Roznica: 55028
Roznica: 45276
Roznica: 55032
Wynikiem są naprzemiennie lecące 2 bardzo zbliżone wartości. Tak się dzieje niezależnie od zapodanej częstotliwości.
Zauważyć należy że jeśli weźmiemy parę dwu kolejnych liczb to wynik się zgadza. W tym przypadku dla 10Hz 45276+55032=100308 czyli jest OK.
Mój wniosek jest taki że przerwanie się wykonuje zarówno na opadającym o rosnącym zboczu a jako że stopień wypełnienia nie jest 50% to wynikiem są właśnie takie pary liczb odzwierciedlające poszczególne połówki okresu a nie cały okres (raczej poprawnie zmierzone).
Pierwotnie nie korzystałem z funkcji micros tylko na piechotę odczytywałem stan timera1 i go zerowałem i wyniki były takie same (w taktach licznika oczywiście a nie mikrosekundach) .
Code: c
Pytanie, czy wg fachowców faktycznie problem jest z wywołaniem przerwania na obydwu zboczach zamiast jednego ?
Jeśli tak to gdzie tkwi błąd.