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



Teraz jest 28 mar 2024, o 23:28


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 1 gru 2019, o 14:37 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

Cześć mam dwa pytania, ponieważ nie jestem biegły z angielskiego. Wałkuję od rana ustawianie timerów i przerwań i wychodzi mi to całkiem dobrze. Wszystko testuję na zestawie atb z atmegą 32 i kwarcem 11059200. Jaka jest różnica w Timer_1 16-bit pomiędzy TIMER/COUNTER1 CONTROL REGISTER A-TCCR1A, a TIMER/COUNTER1 CONTROL REGISTER B-TCCR1B.
Dodam,że ustawiam w testowym programie tryb normal o częstotliwości 100Hz.
Dlaczego muszę użyć TCCR1B, a nie TCCR1A?

Drugie pytanie dotyczy obliczania preskalera w timerze 8-bit i timerze 16-bit.
dlaczego obliczając np:
(8000000 Hz / 1024 (preskaler) / 200 Hz) - 1 = 38,06 --> rozumiem ,że tutaj odejmuję 1 i wynika to z tego,że zliczamy od 0-255. (timer 16-bit)
Ale dlaczego tej jedynki nie odejmujemy przy obliczaniu preskalera dla timera 16-sto bitowego? :D :?:

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2019, o 15:23 
Offline
Użytkownik
Avatar użytkownika

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

wojciechgorzolka napisał(a):
Jaka jest różnica w Timer_1 16-bit pomiędzy TIMER/COUNTER1 CONTROL REGISTER A-TCCR1A, a TIMER/COUNTER1 CONTROL REGISTER B-TCCR1B.
Poprostu ustawień jest tyle że nie zmieściły się w jednym rejestrze więc podzielono je na dwa rejestry TCCR1A i TCCR1B, i w zależności od tego co chcesz ustawić musisz sprawdzać w którym rejestrze dany bit się znajduje, np. bity WGM10 i WGM11 znajdują się w rejestrze TCCR1A, natomiast WGM12 i WGM13 znajdują się w drugim rejestrze czyli TCCR1B. Stąd Mirek zawsze powtarza że praca z notą procka to podstawa. No chyba że robisz to od dawna i pamiętasz co w którym rejestrze siedzi dla danego uC ;)

wojciechgorzolka napisał(a):
Ale dlaczego tej jedynki nie odejmujemy przy obliczaniu preskalera dla timera 16-sto bitowego? :D :?:
Nie ma znaczenia czy to licznik 8 - bitowy czy 16 - bitowy, wzór dla obu jest ten sam i dla obu się odejmuje tę jedynkę. Wynika to z tego że licznik licząc gdy napotka tę wartość przy porównaniu zeruje się (podczas jednego taktu zegara) stąd te dwa stany (wartość porównanie i wartość 0) liczymy jako jeden takt, więc należy to uwzględnić w obliczeniach odejmując 1.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2019, o 15:58 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

Dziękuję za wyjaśnienie :)

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2019, o 12:02 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

Hej. Wracam do tematu przerwań i Timerów. Nie mam już z ustawieniami timerów w trybie Normal. Jeśli chodzi o tryb CTC, to w timerze 8-bit też nie mam problemu. Kłopot mam z Trybem CTC w Timerze 16-sto bitowym, bo nie wiem który rejestr wybrać podczas ustawiania
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Oraz jakie przerwanie ustawić, ponieważ są dwa
COMPA oraz COMPB
Obrazek
Od czego zależy, które przerwanie mam wybrać?
Atmega 32 taktowana 11059200 przerwanie 200Hz

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2019, o 15:08 
Offline
Użytkownik
Avatar użytkownika

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

Ten timer ma dwa kanały porównania: kanał A i kanał B. Każdy kanał ma osobny rejestr porównania, oraz osobne przerwanie. Jednak, dla trybu CTC jak sobie spojrzysz w tabelkę trybów pracy timera w kolumnę TOP zobaczysz że jest tam wpisane OCR1A, a jest to wartość do której licznik zlicza w tym trybie. Widać z tego że w trybie CTC można użyć tylko kanału A czyli zarówno rejestru porównania OCR1A jak również przerwania TIMER1_COMPA_vect, oczywiście w rejestrze TIMSK musisz zezwolić na właściwe przerwanie również od kanału A czyli OCIE1A.
Jednakże kanał B można również wykorzystać do wywołania drugiego przerwania od kanału B pod warunkiem że w rejestrze porównania kanału B będzie wartość mniejsza niż w rejestrze kanału A. W przeciwnym wypadku licznik nigdy nie doliczy do wartości znajdującej się w OCR1B bo zawsze szybciej wystąpi porównanie od OCR1A które w trybie CTC jednocześnie zeruje licznik.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2019, o 15:43 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

Dziękuję za wyjaśnienie. Teraz to rozumiem. Działa :)

_________________
Nikt nie mówił,że będzie łatwo...



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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