Witam. Wykonuję pewien projekt, w którym używam Timerów programowych. Ale obliczenia nie zgadzają mi się z czasem, który faktycznie powinien wyjść.
Mianowicie dla Timerów programowych chcę uzyskać częstotliwość 100Hz.
Posiadam Atmege8 i taktuję ją częstotliwością 1843200 Hz.
Preskaler ustawiałem na wartość 1024.
Chcąc uzyskać częstotliwość 100 Hz wykonałem następujące obliczenia.
1843200 / 1024 / 100 = 18 - wartość wpisana do rejestru OCR2.
Ustawiania Timera 2:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Więc uzyskuję częstotliwość 100 Hz. Jest to 0,01 sekundy.
Wektor Przerwania:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Funkcja migania diodą w pętli while:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Otrzymuję 100 Hz czyli sygnał co 10ms.
Podstawiając za zmienna n wartość otrzymuję:
n = 10 0,01s*10=0,1s czyli 100 ms
n= 100 0,01*100=1s czyli 1000ms
Chce uzyskać efekt np 5 sekund:
n= 500 0,01*500=5s czyli 5000ms
Na płytce stykowej mam podłączony układ z diodą Led, po wgraniu do uC programu dioda zdecydowanie nie miga co 5 sekund. Tak ze stoperem w ręku co 10sek.
Zauważyłem powtarzalność:
Dla n=400 czas wynosi 8 sekund
Dla n=500 czas wynosi 10 sekund
Dla n=700 czas wynosi 14 sekund
Czy tak jest prawidłowo ?? (Wydaję mi się że nie) Gdzie popełniam błąd ??