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



Teraz jest 29 mar 2024, o 08:35


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 19 lut 2019, o 12:07 
Offline
Nowy

Dołączył(a): 19 lut 2019
Posty: 4
Pomógł: 0

Cześć. Chciałem skonfigurować sobie przerwanie (na razie zmiana stanu diody) na mojej ATmedze w oparciu o niebieską książkę tylko, że pojawił się problem. W nocie katalogowej znalazłem że mam tylko jeden timer z trybem CTC, który ma dwa kanały (nie bardzo wiem co to znaczy). No to patrzę dalej, chcę ustawić tryb. Na stronie 97 jest tabelka tylko, że tam są dwa tryby CTC ( też nie wiem zbytnio czemu) no ale wybrałem ten pierwszy. Chcę ustawić preskaler. W TCCR1A nie ma takiej możliwości ale jest w TCCR1B. No to skoro tu użyłem kanału B no to wszędzie go użyję. Wyszło na to, że wszędzie mogę mieć te rejestry z dopiskiem B ale wartość którą ma porównywać musi być w w OCR1A. Dlaczego nie w OCR1B?
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: 19 lut 2019, o 12:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1146
Lokalizacja: Kraków
Pomógł: 93

Ale to nie do końca tak działa. TCCR1 jest podzielony na dwa rejestry, ponieważ jest zbyt dużo nastaw jak na jeden 8-bitowy rejestr.
TCCR1A nie odnosi się tylko do kanału A!
Zauważ: w rejestrze TCCR1A bity 7 i 6 dotyczą kanału A, bity 5 i 4 dotyczą kanału B.
Bit 3 dotyczy kanału A, bit 2 - kanału B.
Bity 1 i 0 razem z bitami 4 i 3 z rejestru TCCR1B! służą do wyboru trybu pracy.

W Twoim przypadku, jeśli chcesz ustawić tryb 4 (CTC), ustawiasz bit WGM12, który jest w rejestrze TCCR1B.

miszczu18 napisał(a):
dwa tryby CTC ( też nie wiem zbytnio czemu)
Różnią się maksymalną wartością - poczytaj dobrze.

Tak mi przyszło do głowy, a nie możesz ustawić bitu COM1A0 (w rejestrze TCCR1A), żeby stan pinu sam się zmieniał? (To tylko taka luźna myśl, poprawcie mnie, jeśli się mylę).


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2019, o 13:07 
Offline
Nowy

Dołączył(a): 19 lut 2019
Posty: 4
Pomógł: 0

Okej ale w takim razie po co jest OCR1B skoro liczy do OCR1A bo nie bardzo czaje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2019, o 13:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 310
Pomógł: 18

OCR1A bierze decydujący udział w pracy licznika i wynik porówna może wysłać do pinu OC1A jeśli wyjście jest ustawione.
Porównanie TCNT1 z OCR1B obsługuje tylko drugi kanał, czyli OC1B.
Należy pamiętać, by wartość OCR1A była większa od wartości OCR1B.
Oto schemat blokowy Timera1:
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2019, o 14:13 
Offline
Nowy

Dołączył(a): 19 lut 2019
Posty: 4
Pomógł: 0

Czyli tylko OCR1A reaguje na przerwanie i zeruje licznik?
Bo próbowałem obsłużyć to tak że OCR1B<OCR1A ale tak jakby działało tylko na OCR1A a drugą wartość ignorowało. I nie wiem jak skorzystać z tej drugiej wartości. I co to są te kanały? Tak jakby licznik liczy ale mogę obsłużyć dwa różne przerwania?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2019, o 14:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1146
Lokalizacja: Kraków
Pomógł: 93

Kanały oznaczają, że możesz sterować dwoma pinami - opisanymi jako OC1A, OC1B. To, o czym pisałem wcześniej:
Marhef napisał(a):
możesz ustawić bitu COM1A0 (w rejestrze TCCR1A), żeby stan pinu sam się zmieniał
dotyczy właśnie pinu OC1A (PB1?).
Licznik zlicza do wartości OCR1A. Jeżeli OCR1B będzie mniejsze niż OCR1A, to po osiągnięciu tej wartości wywołana zostanie funkcja obsługi przerwania TIMER1_COMPB_vect, którą możesz wykorzystać.

Nazwy rejestrów i funkcji piszę bez dokumentacji, możliwe, że zrobiłem jakąś literówkę albo coś pomieszałem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2019, o 14:44 
Offline
Nowy

Dołączył(a): 19 lut 2019
Posty: 4
Pomógł: 0

I po tym wywołaniu jak dojdzie do OCR1B muszę ręcznie kasować stan licznika tak? Bo tak próbowałem że dałem OCR1A na 60000 a OCR1B na 15000, był TIMER1_COMPB_vect ale liczyło cały czas do OCR1A



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2019, o 15:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1146
Lokalizacja: Kraków
Pomógł: 93

No tak, będzie zliczało do OCR1A.
Jeśli chcesz, żeby licznik zerował się sam, użyj przerwania TIMER1_COMPA_vect



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2019, o 16:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 310
Pomógł: 18

W rejestrze TIFR jest flaga OCF1B od porównania OCR1B - nie wiem, jak ją odczytać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2019, o 17:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1020
Lokalizacja: Trójmiasto
Pomógł: 188

Cytuj:
I po tym wywołaniu jak dojdzie do OCR1B muszę ręcznie kasować stan licznika tak? Bo tak próbowałem że dałem OCR1A na 60000 a OCR1B na 15000, był TIMER1_COMPB_vect ale liczyło cały czas do OCR1A

To do jakiej wartości będzie zliczał licznik ściśle zależy od wybranego trybu pracy.
Obrazek
Tryby CTC dla tego licznika są dwa, w jednym licznik zlicza do wartości "OCR1A" w drugim do wartości "ICR1" więc tylko w tych dwóch przypadkach licznik jest resetowany w momencie porównania.
Porównanie od rejestru OCR1B NIE resetuje licznika. Może jedynie wywołać osobne przerwanie od porównanie OCR1B.
Generalnie licznik ten ma dwa porównania głównie z zamysłem o trybach PWM - w oparciu o ten licznik dzięki dwum porównaniom można uruchomić 2 kanały PWM.



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

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