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:
PRESCALER vs POSTSCALER
Teraz trzeba nam nieco łaciny, ale tej prawdziwej nie podwórkowej :-)
Skoro już wiemy co oznaczają przedrostki łacińskie i słowo scaler łatwo zdefiniować znaczenie dwóch niezbędnych nam słów:
Skoro to już mamy za sobą możemy popatrzeć na ich schematy ideowe przykładowego połączenia scalerów z timerem:
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.
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:
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:
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.
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
Multiplekser
Multiplekser pozwala Ci zdecydować, z którego dzielnika chcesz sygnał pobierać:
Przykłady prescalerów
Atmega8 posiada kilka prescalerów do wykorzystania w różnych układach wewnętrznych
Dla Timer0 i Timer1 jest specjalny układ dwóch prescalerów:
Dla przetwornika ADC jest osobny prescaler:
Także układ WatchDog ma swój prescaler:
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.
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.
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.
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.
nadal nie wiemy do czego jest postscaler! wychodzi na to że działa IDENTYCZNIE jak preskaler a napewno tak nie jest..
OdpowiedzUsuń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ń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ńPreskaler dotyczy konkretnej funkcjonalności. Jeżeli więc ustawiasz preskaler jakiegoś timera, to dotyczy tylko tego timera.
OdpowiedzUsuń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).