Witam!
Mam program, który wykorzystuje liczniki do wysyłania impulsów o danej częstotliwości. Częstotliwością steruję za pomocą zmiennej okres1, która jest mnożnikiem preskalera. Np. preskaler=8 clkio=1000000Mhz okres1=127, czyli co 8*128=1024us zmienia się stan na danym pinie przerwania od przepełnienia licznika (dla timera1a jest to pd5), co znaczy, że co 2048us jest ustawiana jedynka co daje nam częstotliwość 488,28Hz
Po przeliczeniu wychodzi nam, że w ciągu 10s wysłanych będzie 4882 takich impulsów. Wektor przerwania wywołany dwa razy tyle 2*4882 wyłącza timer i zapala diode (lub zeruje zmienną pomocniczą i zmienia stan na diodzie)
Wszystko działa dobrze - trwa to 10s, sprawdzane wiele razy.
Klocki się zaczynają jak zmniejszam okres poniżej tej wartości.
Co gorsza jeśli w takim przypadku chce zatrzymać w jednym momencie wszystkie 3 timery to jest problem, a przy wyższych częstotliwościach np. jeden timer się zatrzymuje, a reszta nie... Nie mam oscyloskopu pod ręką :/
oto mój kod testowy:
Podsumowując, potrzebuję odpowiedzi na pytanie:
Dlaczego przerwanie od porównania dla okresów pomiędzy przerwaniami mniejszych od 1024us nie działa poprawnie?
Czy wywołanie wektora od przerwania zajmuje czas?
Jak to inaczej zrealizować, żeby program zliczał poprawnie impulsy w odstępach np 8us, a po zliczeniu wyłączał licznik? A właściwie wszystkie 3 liczniki - bo wszystkich potrzebuje?
Czy zwiększenie częstotliwości oscylatora wewnętrznego coś da?
Proszę o pomoc...
Mam program, który wykorzystuje liczniki do wysyłania impulsów o danej częstotliwości. Częstotliwością steruję za pomocą zmiennej okres1, która jest mnożnikiem preskalera. Np. preskaler=8 clkio=1000000Mhz okres1=127, czyli co 8*128=1024us zmienia się stan na danym pinie przerwania od przepełnienia licznika (dla timera1a jest to pd5), co znaczy, że co 2048us jest ustawiana jedynka co daje nam częstotliwość 488,28Hz
Po przeliczeniu wychodzi nam, że w ciągu 10s wysłanych będzie 4882 takich impulsów. Wektor przerwania wywołany dwa razy tyle 2*4882 wyłącza timer i zapala diode (lub zeruje zmienną pomocniczą i zmienia stan na diodzie)
Wszystko działa dobrze - trwa to 10s, sprawdzane wiele razy.
Klocki się zaczynają jak zmniejszam okres poniżej tej wartości.
Co gorsza jeśli w takim przypadku chce zatrzymać w jednym momencie wszystkie 3 timery to jest problem, a przy wyższych częstotliwościach np. jeden timer się zatrzymuje, a reszta nie... Nie mam oscyloskopu pod ręką :/
oto mój kod testowy:
Kod: C / C++
Podsumowując, potrzebuję odpowiedzi na pytanie:
Dlaczego przerwanie od porównania dla okresów pomiędzy przerwaniami mniejszych od 1024us nie działa poprawnie?
Czy wywołanie wektora od przerwania zajmuje czas?
Jak to inaczej zrealizować, żeby program zliczał poprawnie impulsy w odstępach np 8us, a po zliczeniu wyłączał licznik? A właściwie wszystkie 3 liczniki - bo wszystkich potrzebuje?
Czy zwiększenie częstotliwości oscylatora wewnętrznego coś da?
Proszę o pomoc...