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



Teraz jest 12 lut 2026, o 10:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 5 lis 2015, o 21:48 
Offline
Nowy

Dołączył(a): 12 kwi 2015
Posty: 12
Lokalizacja: Wrocław
Pomógł: 0

Witam
Przeczytałem w niebieskiej książce wyd. 2 do rozdziału z Tryb PWM włącznie.
Po przeczytaniu wnioskuję na przykładowych liczbach:
Częstotliwość 8 MHz, powoduje 8 000 000 impulsów na sekundę.
Timer 8 bitowy zlicza impulsy od 0 do 255, po zliczeniu 255 impulsów włączy się procedura przerwania.
Częstotliwość włączenia procedury przerwania wynosi :
8 MHz/ ( prescaler(zakładam 1) * 256) = ok. 31,372 kHz

Na podstawie 4.5 Multipleksowanie LED,
OCR0= 38, taką wartość założono.
Domyślam się że timer zlicza od 0 do OCR0= 38, gdy przekroczy 38, następuje przerwanie.
Prescaler = 1024 i CPU 8 MHz.
8 MHz /( 1024 * 38,08) – 1 = 204 Hz

Uruchamia się procedura przerwania
Pytanie:
Czy operacje do wykonania w procedurze przerwania zmienią częstotliwość na inną niż ustalona wcześniej
, 204 Hz ?

4.7 Sterowanie PWM
CPU 8MHz, Tryb fast pwm
Timer 8bitowy
Strona 242, TCNT2 = 56,
licznik zlicza 200 impulsów od 56 do 255. Po 255 przechodzi do procedury przerwania.
Częstotliwość wynosi 8MHz / 200 = 40kHz

Program dla 3 kanałów PWM
Strona 243
Jeżeli nasz licznik zlicza z częst. 40 kHz , to jeśli utworzymy PWM 8 bitowy, częstotliwość tę trzeba podzielić przez 256 żeby dowiedzieć się jaka będzie ostatecznie częstotliwość naszych kanałów PWM , 40 000/256 = ok. 156 Hz
(dlaczego dzielimy przez licznik timera 8 bitowego z procedury przerwania w PWM = 255 ?? )

W procedurze przerwania
Kod:
ISR {
    TCNT2 = 56;
}


Dlaczego drugi raz zapisujemy wartość TCNT2 = 56 w procedurze przerwania ?
W jaki sposób procedura przerwania wpływa na zmianę częstotliwości w PWM ( chyba tego nie było w CTC)
Na początku programu dzięki TCNT2 = 56; dobraliśmy częstotliwość 40kHz. Po co jest ponownie ten zapis w procedurze przerwania ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2015, o 21:59 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Działa to w ten sposób timer zaczyna liczyć impulsy tak czyli od 0 do 255 a ty na samym początku zmieniasz zawartość zliczonych impulsów na 56 a mikrokontroler liczy dalej doliczy do 255 i następuje przepełnienie i uruchamia się procedura przerwania więc ten rejestr zaczyna liczyć od zera a ty znowu mu musisz przypisać wartość 56 a on zacznie dodawać aż do 255 i tak w kółko. Mikrokontroler ma rejestr w którym jest zapisana liczba tyknięć timera, a ty ingerujesz tam i piszesz np 56, więc licznik nie zastanawia się tylko zaczyna dodawać do swojego rejestru 1 aż do 255 i znowu następuje obsługa przerwania i tak dalej. Mam nadzieję, że zrozumiałeś jak nie to pisz czego nadal nie rozumiesz postaram ci pomóc. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 14:00 
Offline
Nowy

Dołączył(a): 12 kwi 2015
Posty: 12
Lokalizacja: Wrocław
Pomógł: 0

Dziękuję za odpowiedź. Przeczytałem ponownie rozdział i nasuwają mi się kolejne pytania.

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


Przeczytałem ponownie rozdział 4.7 Sterowanie PWM

Timer0 -> tryb FastPWM
Timer2 -> tryb Normal lub CTC -> ustawiamy częstotliwość wystąpienia przerwania

Timer2 , wybrałem tryb Normal ,liczy od 0 do 255, przepełnienie zawsze jest po 255 i przejście do procedury przerwania.

TCNT2 = 56; -> licznik Timer2’a liczy od 56 do 255, zlicza 200 impulsów.
Częstotliwość dla wystąpienia przerwania wynosi 8MHz / 200 = 40kHz

Tryb FastPWM, założono 3 kanały.
A. Ile można maksymalnie kanałów założyć ?
B. Czy ta informacja jest zapisana W nocie pdf dla procesora?

Opisuję działanie programu wg mnie:
Uruchamiam program procesor o FCPU = 8MHz zaczyna wysyłać impulsy. Licznik_FCPU będzie hipotetycznie zliczał impulsy z procesora.
Timer2 jest 8bitowy (0-255).
FCPU wysłał 2*200 = 400 impulsów, Licznik_FCPU = 510.
Licznik_Timer2 zliczył już raz od 56 do 255 i było 1 przerwanie. Teraz Licznik_Timer2 = 255.
Teraz następuje przerwanie od Timer2 w trybie Normal.

Pytanie:
Domyślam się że w czasie trwania przerwania Licznik_FCPU nadal zlicza ? Licznik_FCPU pomiędzy przerwaniami wysyła 200 impulsów.
C. Czyli w czasie działania przerwania Licznik_FCPU nie może wykonać więcej niż 200-1=199 impulsów ?


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


Wg opisu z niebieskiej książki
Program dla 3 kanałów PWM
Strona 243
Jeżeli nasz licznik zlicza z częst. 40 kHz , to jeśli utworzymy PWM 8 bitowy, częstotliwość tę trzeba podzielić przez 256 żeby dowiedzieć się jaka będzie ostatecznie częstotliwość naszych kanałów PWM , 40 000/256 = ok. 156 Hz

D. dlaczego dzielimy przez licznik timera 8 bitowego= 255 ??
E. Czy nie powinniśmy zapisać … ostatecznie częstotliwość naszych kanałów PWM , 40 000/200 zamiast
40 000/256 ?


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


F. W książce użyto w kodzie porty: PD2, PD6, PD7, PC0, PC1, PC2 do komunikacji z diodami.
Czy należy ich użyć, czy są one przypadkowe ?
Zmieniłem w kodzie na Port D, ze wględu na łatwiejsze połączenie na zestawie ATB.



Ostatnio edytowano 8 lis 2015, o 14:46 przez pipu123, łącznie edytowano 3 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 14:11 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8630
Pomógł: 338

Albo się stosujecie do zaleceń i poprawiacie kody , albo dostajecie po warnie i kasuję posty .......
topic7402.html

SunRiver



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 14:37 
Offline
Nowy

Dołączył(a): 12 kwi 2015
Posty: 12
Lokalizacja: Wrocław
Pomógł: 0

Poprawiłem. Jeszcze coś poza syntax=C mam poprawić ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 14:37 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Ilość sprzętowych kanałów pwm jest napisana w nocie czyli np: 3x 8bit pwm. Powinno być 256 nie 200 tak jak piszesz. Żeby uzyskać częstotliwość przerwania 40khz to trzeba wpisać do rejestry tcnt 56. Tworzysz 8 bitowy pwm 8bit = 1=256 więc te 40khz musisz jeszcze podzielić przez 256. 40khz - częstotilwość timera 156hz-częstotliwość pwm. W programowym pwm możesz użyć pinu jaki ci się podoba, ale w pwm sprzętowym musisz skorzystać z pinu który jest do tego przystosowany. Popraw wstawianie kodu. Sorry nie mam talentu do tłumaczenia, ale się staram :( :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 14:50 
Offline
Nowy

Dołączył(a): 12 kwi 2015
Posty: 12
Lokalizacja: Wrocław
Pomógł: 0

Dziękuję za chęci.
Celowo dopisałem litery na początku pytań. Proszę odpisać z podaniem litery na początku np. A. ...
G. Czy Piny w pwm sprzętowym to ?
* OC0 -> PB3 timer0 8bit
* OC2 -> PD7 timer1 8bit
* OC1A -> PD5 OC1B -> PD4 timer1 16bit
Cytuję " Popraw wstawianie kodu. " proszę napisać który fragment kodu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 16:00 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Tak to te piny. Kiedy pisałem posta jeszcze nie poprawiłeś. :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 16:30 
Offline
Nowy

Dołączył(a): 12 kwi 2015
Posty: 12
Lokalizacja: Wrocław
Pomógł: 0

Cytuję " Popraw wstawianie kodu. " proszę napisać który fragment kodu. Nie wiem w którym miejscu mam zmienić.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 18:16 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

No dobra po wiem bardziej dosłownie kiedy jeszcze cały kod nie był wstawiony to ja wtedy pisałem jeszcze posta, dopiero po paru chwilach od napisania mojego postu edytowałeś go i poprawnie wstawiłeś kod. Mój post napisany został o 14:37 a ty edytowałeś swój o 14:46. Teraz jest wszystko ok.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 20:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
pipu123 napisał(a):
D. dlaczego dzielimy przez licznik timera 8 bitowego= 255 ??

Ja może zacznę w drugą stronę:
W trybie PWM mamy dwa elementy ( czy jak by to nazwać ):częstotliwość i wypełnienie.
Dla poj. PWM częstotliwość jaką oko przyjmie za świecenie można przyjąć 40Hz ( jeśli więcej kanałów to 40Hz * liczba kanałów).
Teraz każdy takt można wypełnić sygnałem od 0 taktów świecenia/255 zgaszenia do 255_ON/0_OF; czyli mamy 4kanały * 40Hz * 255 =(ok) 40 000Hz.
Różnica pomiędzy świeceniem w multipleksowaniu a PWM polega na tym, że w PWM'ie masz wpływ jak długo w swojej jednostce czasu ma coś świecić ( w multipleksowaniu tylko decydujesz czy świeci)
pipu123 napisał(a):
F. W książce użyto w kodzie porty: PD2, PD6, PD7, PC0, PC1, PC2 do komunikacji z diodami.
Czy należy ich użyć, czy są one przypadkowe ?

Jakbyś dokładnie poszperał w rzeczonej książce, to autor wyraźnie zaznacza że specjalnie "miesza w PORT'ach" aby uświadomić o ich dowolności.
Wiadomo że chodzi tu o porty do których możemy się dobrać, bo jeśli chodzi o funkcje sprzętowe tych portów to tu już trzeba stosować się do noty.

Pozdr.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO