ATNEL tech-forum https://forum.atnel.pl/ |
|
Różnice między timerami 16-bit https://forum.atnel.pl/topic22701.html |
Strona 1 z 1 |
Autor: | wojciechgorzolka [ 1 gru 2019, o 14:37 ] |
Tytuł: | Różnice między timerami 16-bit |
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? |
Autor: | xentis [ 1 gru 2019, o 15:23 ] |
Tytuł: | Re: Różnice między timerami 16-bit |
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? 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: | wojciechgorzolka [ 1 gru 2019, o 15:58 ] |
Tytuł: | Re: Różnice między timerami 16-bit |
Dziękuję za wyjaśnienie |
Autor: | xentis [ 7 gru 2019, o 15:08 ] |
Tytuł: | Re: Różnice między timerami 16-bit |
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: | wojciechgorzolka [ 7 gru 2019, o 15:43 ] |
Tytuł: | Re: Różnice między timerami 16-bit |
Dziękuję za wyjaśnienie. Teraz to rozumiem. Działa |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |