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



Teraz jest 20 kwi 2024, o 02:29


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 29 lip 2017, o 10:40 
Offline
Użytkownik

Dołączył(a): 10 gru 2016
Posty: 34
Pomógł: 1

Cześć,
Napisałem kod do testów PWM i spotkałem problemy z ustalaniem częstotliwości :
1. Jak SPRZĘTOWO ustalić częstotliwość? Wiem, że można za pomocą preskalerów osiągnąć kilka wartości częstotliwości wynikających z podziału, ale zakładając, że takie częstotliwości mnie nie zadowalają chciałbym ustalić swoje wartości.
2. Programowy PWM : procka taktuję zegarem 1MHz, chciałem osiągnąć PWM 1kHz wykorzystując tryb CNC, używam preskalera 256 oraz wpisuję do rejestru OCR2 liczbę 4. (1MHz/256/4) = 1kHz, natomiast uzyskuję bardzo niską częstotliwość ~80Hz, co może być problemem?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Z góry dziękuję za odpowiedź !
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lip 2017, o 11:34 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Czy częstotliwość z drugiego timera (3,9kHz) jest prawidłowa?
Jesteś pewien, że otrzymujesz ok. 80Hz?

Jeśli chcesz otrzymać okres o czasie trwania 256*4 taktów, to do OCR2 powinieneś wpisać 3 a nie 4 (szczegóły w datasheet).

RybaSG napisał(a):
(1MHz/256/4) = 1kHz

To co obliczasz to częstotliwość przerwań, a nie PWM. Pełny okres przebiegu na pinie wyjściowym będzie trwał 256 przerwań, bo do tylu będzie zliczana zmienna 'counter' w przerwaniu.

Przy taktowaniu 1MHz uzyskanie częstotliwości programowego PWM rzędu 1kHz (o rozsądnej rozdzielczości) jest raczej mało realne.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lip 2017, o 12:06 
Offline
Użytkownik

Dołączył(a): 10 gru 2016
Posty: 34
Pomógł: 1

andrews napisał(a):
Czy częstotliwość z drugiego timera (3,9kHz) jest prawidłowa?

Tak, sprawdzone na oscyloskopie.
andrews napisał(a):
Jesteś pewien, że otrzymujesz ok. 80Hz?

Pomyliłem się, 80 Hz uzyskuję przy ustawieniu preskalera na 1 i OCR na 0.
andrews napisał(a):
Jeśli chcesz otrzymać okres o czasie trwania 256*4 taktów, to do OCR2 powinieneś wpisać 3 a nie 4 (szczegóły w datasheet).

Faktycznie, zapomniałem o tym, że liczmy od 0.
andrews napisał(a):
To co obliczasz to częstotliwość przerwań, a nie PWM. Pełny okres przebiegu na pinie wyjściowym będzie trwał 256 przerwań, bo do tylu będzie zliczana zmienna 'counter' w przerwaniu.

Racja, spróbuję pokombinować.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lip 2017, o 21:32 
Offline
Użytkownik

Dołączył(a): 10 gru 2016
Posty: 34
Pomógł: 1

Poprawiłem trochę kod i zmieniłem oscylator na 8MHz.
Dzielę 8MHz przez 31 żeby uzyskać częstotliwość ~256kHz, licznik w przerwaniu ma pojemność bajta, co powinno dać częsttowliość 1kHz, natomiast dostaję około 625Hz ( sprawdzone na oscyloskopie ).

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lip 2017, o 21:56 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Musisz zastanowić się jak działają przerwania ... Odpalanie przerwań w CTC z częstotliwością 256 kHz .... i to przy TAK ŚLIMACZYM taktowaniu jak 8 MHz to po prostu harakiri piłą tarczową.

To i tak dobrze że chociaż 625 Hz ci wychodzi .... ale jak będziesz chciał coś więcej robić w programie głównym to będziesz zdziwiony, że program główny w zasadzie stoi w miejscu.

Polecam moje poradniki o tym jak dziaają przerwania ... a szczególnie ostatni z udziałem analizatora stanów logicznych, z oscylem tym bardziej dasz radę


_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lip 2017, o 22:15 
Offline
Użytkownik

Dołączył(a): 10 gru 2016
Posty: 34
Pomógł: 1

Hmm.. tylko jedyną rzeczą w tym przypadku jaka przychodzi mi do głowy, to zmniejszenie rozdzielczości licznika w przerwaniu żeby uzyskać tego 1kHz. Jedynym wyjściem będzie zewnętrzny oscylator?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 lip 2017, o 01:35 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

RybaSG napisał(a):
Jedynym wyjściem będzie zewnętrzny oscylator?

Nie zen oscylator tylko zewn kwarc, po prostu sprawdź - daj kwarc 16 - (bardziej) 20Mhz i zobacz co ci wyjdzie ..

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2017, o 15:54 
Offline
Użytkownik

Dołączył(a): 10 gru 2016
Posty: 34
Pomógł: 1

Dla potomnych : faktycznie zmiana kwarcu i co za tym idzie rejestru OCR2 pomogła, jest piękne 1kHz tak jak chciałem.
Dziękuję i pozdrawiam



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: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 9 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