Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 1 paź 2020, o 04:22


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 11 wrz 2020, o 10:27 
Offline
Nowy

Dołączył(a): 11 wrz 2020
Posty: 2
Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 wrz 2020, o 11:42 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 542
Pomógł: 136

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.

_________________
Miksowanie kodu C i ASM przy użyciu GCC



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 wrz 2020, o 11:52 
Offline
Nowy

Dołączył(a): 11 wrz 2020
Posty: 2
Pomógł: 0

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:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO