ATNEL tech-forum https://forum.atnel.pl/ |
|
ATTiny2313A Licznik ma częstotliwość różną od CPU https://forum.atnel.pl/topic23334.html |
Strona 1 z 1 |
Autor: | oskar_zaremba [ 11 wrz 2020, o 10:27 ] |
Tytuł: | ATTiny2313A Licznik ma częstotliwość różną od CPU |
Dzień Dobry, Mam pytanie odnośnie programowania mikro kontrolerów. Zajmuję się akurat ATTINY2313A. Mam ustawiony wewnętrzny oscylator na częstotliwość 4 MHz bez wewnętrznego podziału zegara przez 8. Poniżej mój krótki kod w C: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. W moim przypadku według dokumentacji czyli wzoru poniżej: fOC0A=fclk_I/O/(2·N·(1+OCR0A)) fOC0A=4000000/(2·1·(1+1)) fOC0A=1000000=1MHz A teraz do meritum:) Co robię nie tak? Częstotliwość którą uzyskuję to --> 207.4KHz. W załączniku przesyłam zdjęcie z oscyloskopu z widocznym przebiegiem na pinie PB0. Pozdrawiam, Oskar Zaremba |
Autor: | andrews [ 11 wrz 2020, o 11:42 ] |
Tytuł: | Re: ATTiny2313A Licznik ma częstotliwość różną od CPU |
oskar_zaremba napisał(a): A teraz do meritum:) Co robię nie tak? Częstotliwość którą uzyskuję to --> 207.4KHz. Po pierwsze - tego się tak nie robi. Zamiast programowego sprawdzania flagi i zerowania jej należałoby wykorzystać przerwania. Po drugie - flaga przerwania jest ustawiana co 4 takty zegara. Twój kod sprawdzający flagę, zerujący ją i ustawiający stan pinu na pewno nie zdąży się wykonać w tym czasie (nawet jeśli użyjesz przerwań), więc niektóre przerwania zostaną pominięte. Stąd ta niższa częstotliwość. W zasadzie jedynym rozwiązaniem w celu uzyskania częstotliwości tak bardzo zbliżonej do częstotliwości taktowania mikrokontrolera jest generowanie sprzętowe na jednym z pinów: PB2 (OC0A) lub PD5 (OC0B) poprzez właściwe ustawienie odpowiednich bitów COM0A1:COM0A0 lub COM0B1:COM0B0 w rejestrze TCCR0A na tryb (w przypadku trybu CTC timera): Toggle OC0x on Compare Match. |
Autor: | oskar_zaremba [ 11 wrz 2020, o 11:52 ] |
Tytuł: | Re: ATTiny2313A Licznik ma częstotliwość różną od CPU |
Uprzejmie dziękuje:) O taką odpowiedź mi właśnie chodziło:)))) Poniżej kod który zrobił robotę:) język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Jeszcze raz wielkie dzięki:) |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |