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:

Składnia: [ Pobierz ] [ Ukryj ]
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ę:)

Składnia: [ Pobierz ] [ Ukryj ]
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/