Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

czwartek, 17 marca 2011

Prescaler, postscaler - Co to takiego?


Autor: Dondu

W mikrokontrolerach badzo często spotkasz się, z magicznymi słowami: PRESCALER i POSTSCALER. Czym są i do czego służą dowiesz się z tego artykułu.

Zacznijmy od angielskiego słówka scaling, które oznacza ni mniej ni więcej jak skalowanie. Skalowanie wykorzystywane jest np. w modelarstwie, gdzie możesz spotkać model samolotów w skali 1:5, podobnie jest z mapami - każdy zna wiele  przykładów :-)

Co oznacza skala 1:5, to także każdy wie, bo to zwykłe mnożenie danej wielkości przez  skalę:


Dla przypomnienia załóżmy, że mamy jakąś wielkość o wartości 200 i mamy policzyć ją w skali 1:5 :



Wiem, wiem powiesz: Banał!
Tak, ale ja chciałbym, abyś uprościł myślenie o skalowaniu, by łatwiej było Ci zrozumieć i zapamiętać, co w przypadku mikrokontrolerów oznacza skalowanie.



Dla mikrokontrolerów skalowanie to nie mnożenie lecz
DZIELENIE


Dzielenie wartości przez dzielnik skali,



czyli dla naszego przykładu:



Niby to samo, ale łatwiej zapamiętać zasady panujące w mikrokontrolerach.


SCALER
Ponieważ rzeczowniki w j.ang. tworzy się z czasowników poprzez dodanie końcówki -er, stąd ze słówka scale (skala) powstaje słówko scaler czyli wykonawca skalowania. Dla nas tym wykonawcą jest układ scaler-a (dzielnika), który będzie dzielił sygnał wejściowy, przez jakiś dzielnik:


Rys. 1 - Scaler (dzielnik) sygnału



PRESCALER vs POSTSCALER
Teraz trzeba nam nieco łaciny, ale tej prawdziwej nie podwórkowej :-)

Pre - oznacza przed
Post - oznacza po

Skoro już wiemy co oznaczają przedrostki łacińskie i słowo scaler łatwo zdefiniować znaczenie dwóch niezbędnych nam słów:

PreScaler - dzielnik dzielący przed jakąś czynnością
PostScaler - dzielnik dzielący po jakiejś czynności

Skoro to już mamy za sobą możemy popatrzeć na ich schematy ideowe przykładowego połączenia scalerów z timerem:


Rys. 2 - Prescaler timera

Na rysunku nr 2 możesz zobaczyć przykład prescalera, który dzieli sygnał wejściowy przez jakiś dzielnik i przesyła go do timera. W ten sposób można dostarczyć do prescalera sygnał (na przykład z rezonatora kwarcowego) i podzielić go przez jakąś liczbę, a tak otrzymany sygnał o zmniejszonej częstotliwości skierować do timera.


Na rysunku nr 3 (poniżej) widzisz przykład postscalera, który sygnał generowany przez timer dzieli przez jakiś dzielnik i dostarcza dalej.

Rys. 3 - Postscaler timera

Oczywiście często projektanci mikrokontrolerów dają nam bardziej rozbudowane układy. Poniżej przykład układu timerów wykorzystujących zarówno prescalery jak i postscalery:

Rys. 4 



Jakiś dzielnik?
Ale jaki? To zależy już stricte od mikrokontrolera, którego używasz. W większości przypadków jest to dzielnik będący liczbą całkowitą opartą o potęgę liczby 2, czyli:

1, 2, 4, 8, 16, 32, 64, 128, 256, 1024, 2048, itd.


Ale bardzo często spotkasz się z ograniczeniami.
Na przykład prescaler Timera0 w Atmega8 ma tylko prescaler o wartościach 8, 64, 256 i 1024. A prescaler Timera2 tego samego mikrokontrolera ma wartości 8, 32, 64, 128, 256 i 1024. Szczegóły znajdziesz w datasheet Twojego mikrokontrolera.




Zerowanie scalera (prescalera lub postscalera)
Często jeden timer ze scalerem  używa się w tym samym projekcie do różnych zadań. Na przykład, raz odmierza czas, a innym razem zlicza impulsy z jakiegoś czujnika. W takiej sytuacji zmieniając funkcję timera z reguły zatrzymujesz go w bliżej nieokreślonym punkcie jego pracy. Scaler także zawiera wtedy bliżej nieokreślony stan. Przestawiając timer powinieneś także pamiętać o tym, by wyzerować scaler.

Do zerowania scalerów służą specjalne bity w różnych rejestrach. Zależy to od mikrokontrolera. Niestety nie wszystkie scalery mają możliwość ich wyzerowania.

Czasami scalery używają tego samego układu dzielnika, przez co jego zerowanie wpływa na działanie dwóch timerów - przykład na rysunku poniżej.




Na powyższym rysunku można zauważyć, że dzielnik preskalerów timerów Timer0 i Timer1 jest wspólny i jego zerowanie bitem PSR10 wpływa na oba timery.



Budowa scalera
Prawie każdy scaler zbudowany jest z dzielnika i multipleksera

Dzielnik
Dzielnik dzieli sygnał przez określone dzielniki

Przykład dzielnika




Multiplekser
Multiplekser pozwala Ci zdecydować, z którego dzielnika chcesz sygnał pobierać:

Przykład multipleksera



Przykłady prescalerów

Atmega8 posiada kilka prescalerów do wykorzystania w różnych układach wewnętrznych

Rys. 5 - Prescaler Timera2 w ATmega8 



Dla Timer0 i Timer1 jest specjalny układ dwóch prescalerów:


Rys. 6 - Prescaler Timera0 i Timera1 w ATmega8


Dla przetwornika ADC jest osobny prescaler:

Rys. 7 - Prescaler przetwornika ADC w ATmega8


Także układ WatchDog ma swój prescaler:

Rys. 8 - Prescaler WatchDoga w ATmega8


W przypadku tego mikrokontrolera jest jeszcze jeden prescaler Interfejsu Szeregowego TWI, ale nie ma w datasheet jego schematu.


Przykłady postscalerów

Tutaj posłużę się przykładem mikrokontrolera firmy Microchip, ponieważ AVR-y nie mają takowych.


Rys. 9 - Timer4 z pre- i postscalerem  mikrokontrolera PIC18F87K22


Podsumowanie
Jak widzisz scalery są bardzo powszechnie stosowanymi układami wewnętrznymi mikrokontrolerów.
nie należy się ich bać, bo to zwykłe dzielniki, ale trzeba bardzo dokładnie czytać datasheet, by móc zrozumieć ich schematy i działanie oraz poprawnie je ustawić .


Polacy nie gęsi ...
Na koniec wyjaśnienie. W powyższym artykule specjalnie użyłem angielskiej pisowni scaler, prescaler i postscaler, ze względu na sposób tłumaczenia skąd się wzięły te nazwy. Jednakże w pozostałych artykułach i książkach, znajdziesz już polską pisownię: preskaler i postskaler.
Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

4 komentarze:

  1. nadal nie wiemy do czego jest postscaler! wychodzi na to że działa IDENTYCZNIE jak preskaler a napewno tak nie jest..

    OdpowiedzUsuń
  2. Preskaler działa tak samo jak postskaler, ale oba są z różnych stron timera - zobacz rysunki nr 2 i 3. Oczywiście budowa i funkcjonalność preskalera może być inna niż postskalera w danym mikrokontrolerze. Tu już trzeba patrzeć w datasheet danego mikrokontrolera.

    OdpowiedzUsuń
  3. Czy jeśli ustawimy preskaler na 1:8 to czy cały uC (np. ATmega8) będzie pracował 8x wolniej, czy tylko timer, którego tyczy się dany preskaler, będzie się wolniej inkrementował?

    OdpowiedzUsuń
  4. Preskaler dotyczy konkretnej funkcjonalności. Jeżeli więc ustawiasz preskaler jakiegoś timera, to dotyczy tylko tego timera.

    Jeżeli mikrokontroler ma preskaler sygnału zegarowego mikrokontrolera, to jego ustawienie skutkuje z reguły, także wobec pozostałych modułów, np. timerów. Ale w drugą stronę już nie, czyli przestawienie preskalera timera, nie wpływa na częstotliwość pracy procesora.

    Warto popatrzeć na schematy blokowe w dokumentacji oraz opisy preskalerów - mogą tam być niespodzianki, jak np. wspólne kasowanie preskalera (patrz preskaler timer0 i timer1 w ATmega8).

    OdpowiedzUsuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.