AVR - Sygnał zegarowy – wiadomości podstawowe.pdf

(585 KB) Pobierz
Sygna³ zegarowy jest dla procesora jak bicie serca
http://www.easy-soft.tsnet.pl/
Prezentowany artykuł przeznaczony jest przede wszystkim dla początkujących w dziedzinie mikrokontrolerów.
Opisuje różnicę pomiędzy cyklem zegarowym i cyklem maszynowym oraz opcje nastaw źródeł sygnału
zegarowego w procesorach AVR. Rozważa ich wady i zalety, wskazuje możliwe przyczyny problemów oraz
sposoby radzenia sobie z nimi.
Sygnał zegarowy – wiadomości podstawowe.
Sygnał zegarowy jest dla procesora jak bicie serca.
Powoduje, że procesor realizuje jakiekolwiek instrukcje.
Często jednak zdarza się, że sygnał zegarowy
doprowadzany z zewnątrz ma inną częstotliwość niż
wewnętrzny, sterujący pobieraniem i realizacją przez
CPU procesora poleceń. W związku z tym wprowadzono
dwa pojęcia: cykl zegarowy i cykl maszynowy. Ten
pierwszy jest po prostu odwrotnością częstotliwości
generatora zegarowego. Ten drugi uzyskuje się w wyniku
uwzględnienia ewentualnych wewnętrznych podziałów
sygnału zegarowego. Bardzo dobrym przykładem jest
popularny mikrokontroler 8051, który w podstawowym
wykonaniu ma cykl maszynowy 12-tokrotnie dłuższy, niż
cykl zegarowy. Również, chociaż nastawa domyślna jest
inna, procesor AVR może mieć cykl maszynowy różny od
zegarowego. Będzie o tym mowa w dalszej części
artykułu.
Pojęcia cyklu maszynowego nie należy utożsamiać z
czasem realizacji instrukcji. W pewnych przypadkach
może tak być, jednak większości popularnych
mikrokontrolerów, realizacja pojedynczej instrukcji
zajmuje od dwóch do kilku cykli maszynowych i od 8 do
kilkudziesięciu cykli zegarowych.
Mikrokontroler AVR większość instrukcji wykonuje w
czasie pojedynczego cyklu zegarowego. Jego nowoczesna
konstrukcja jest jednym z przykładów, gdy cykl
zegarowy jest równy cyklowi maszynowemu. Jak łatwo
wywnioskować, im szybszy jest zegar procesora, tym
więcej instrukcji jest on w stanie wykonać w jednostce
czasu. Jest to twierdzenie prawdziwe, jeśli porównuje się
procesory o identycznych lub bardzo zbliżonych
architekturach. Dla różnych architektur wynik
porównania może być diametralnie różny.
Cykl zegarowy to okres wytwarzanego na
bazie rezonatora kwarcowego, elementów RC
itp. sygnału zegarowego. Można go obliczyć jako
odwrotność częstotliwości generatora
zegarowego.
cykl zegarowy = 1/F GEN
Cykl maszynowy to okres wewnętrznego
sygnału zegarowego. Oblicza się go po
uwzględnieniu wewnętrznych podziałów
częstotliwości sygnału zegarowego. W
mikrokontrolerze AVR cykl maszynowy =
cyklowi zegarowemu.
cykl maszynowy = wewnętrzny podział x 1/F GEN
Dla uproszczenia porównań różnych procesorów
wprowadzono pojęcie mocy obliczeniowej , dla
której zwykło się używać jednostki zwanej MIPS.
1 MIPS to nic innego, jak 1 milion operacji na
sekundę. W związku z tym, że w
mikrokontrolerze AVR cykl maszynowy jest
równy cyklowi zegarowemu, AVR taktowany
sygnałem o częstotliwości 8 MHz ma moc
obliczeniową w przybliżeniu równą 8 MIPS.
Standardowy 8051 ma przy takich samych
parametrach sygnału zegarowego, ma moc
obliczeniową około 0,667 MIPS.
Wybór źródła sygnału zegarowego.
Konstrukcja mikrokontrolera AVR umożliwia wybór różnych metod generowania sygnału zegarowego. Można
używać zewnętrznego generatora, rezonatora kwarcowego lub ceramicznego, niektóre z układów posiadają
wewnętrzny generator, którego częstotliwość może być ustalana przy pomocy elementów RC dołączanych z
zewnątrz lub wbudowanych w strukturę mikrokontrolera.
Zewnętrzny generator zegarowy to nic innego jak dołączane z zewnątrz źródło sygnału o poziomie takim,
jaki wymagany jest przez mikrokontroler. Może być zbudowany z użyciem elementów TTL czy CMOS, może być
również gotowym, zapewniającym bardzo wysoką stabilność częstotliwości doprowadzanego sygnału (np. z
własną stabilizacją termiczną oraz stabilizacją napięcia zasilającego) modułem generatora zegarowego
pochodzącym z szerokiej oferty producentów.
Sygnał z zewnętrznego generatora musi być doprowadzony na nóżkę oznaczoną jako XTAL1. Nóżkę XTAL2
pozostawia się w takim przypadku nie podłączoną. Zewnętrzny sygnał zegarowy powinien mieć bardzo krótkie
czasy narostów (do kilkudziesięciu ns), a w celu zapewnienia stabilnej pracy mikrokontrolera musi mieć czysty
kształt prostokątny. Sposób dołączenia generatora ilustruje rysunek 1.
J.Bogusz ,,Nastawy zegara w mikrokontrolerach AVR”, strona 1/10
305452786.004.png
http://www.easy-soft.tsnet.pl/
Rysunek 1. Dołączenie zewnętrznego generatora zegarowego.
Rezonator kwarcowy dołączany z zewnątrz, to jedna z najczęściej wykorzystywanych metod. Jej zaletą są
właściwości samego rezonatora, to jest duża stabilność generowanej częstotliwości w funkcji czasu oraz
temperatury otoczenia przy jednocześnie umiarkowanej cenie. Rezonatory dostępne są w wielu rozmiarach i
dla różnych wartości częstotliwości. Na rysunku 2 pokazano sposób dołączenia rezonatora kwarcowego.
Mikrokontroler AVR posiada układ generatora wbudowany w strukturę. Kwarc dołącza się pomiędzy
wyprowadzenia XTAL1 i XTAL2.
Rysunek 2. Sposób dołączenia rezonatora kwarcowego do popularnego AT90S2313
Jest to chyba jedna z najpowszechniej stosowanych metod generowania sygnału zegarowego. Stosując ją nie
można jednak zapominać o podstawowych właściwościach fizycznych i elektrycznych rezonatora. Bez żadnych
problemów kupić rezonator kwarcowy na pożądaną częstotliwość. Należy wybierać takie, które pracują z
rezonansem równoległym. Jak wynika z rysunku, do poprawnej pracy wymagają one dodatkowo dwóch
kondensatorów o pojemności (według materiałów firmy Atmel) 30pF±10pF. Każdy jest w stanie kupić kwarc i
dołączyć wraz z dwoma kondensatorami do mikrokontrolera. Nie ma w tym żadnego problemu. Otóż może się
okazać, że pojemności dołączone do rezonatora są mimo wszystko problemem.
Rezonator kwarcowy do poprawnej, stabilnej pracy wymaga dołączenia kondensatorów o ściśle określonych
wartościach. Jak wspomniałem wcześniej, ich wartość to ok. 30pF i jest porównywalna z wartościami
wnoszonych, często szkodliwych, pojemności montażowych. Czasami może się zdarzyć, że po zmontowaniu
układu oscylator kwarcowy nie startuje. Gdy zaczynamy poszukiwanie usterki i dotykamy wyprowadzeń
mikrokontrolera np. sondą logiczną – ten w cudowny sposób „ożywa”. Po oddaleniu sondy i upływie bliżej nie
określonego czasu – ponownie układ zamiera. W jaki sposób upewnić się, że przynajmniej teoretycznie
dobraliśmy właściwe pojemności do stosowanego rezonatora?
Jeśli posiadamy kartę katalogową rezonatora, należy odszukać parametr o nazwie „Load Capacitance”
(przykładowe parametry rezonatorów produkcji firmy CQ zestawiono w Tabeli 1). Może on być dla przykładu
równy 20 pF. Oznacza to, że dla poprawnej pracy rezonator kwarcowy powinien mieć dołączoną pojemność o
takiej wartości. Rezonator nie rozróżnia czy jest to pojemność montażowa, czy dołączona celowo. W związku z
J.Bogusz ,,Nastawy zegara w mikrokontrolerach AVR”, strona 2/10
305452786.005.png 305452786.006.png
http://www.easy-soft.tsnet.pl/
tym nasuwa się jeden wniosek: wartość pojemności podana przez producenta rezonatora nie odpowiada
wartości pojemności dołączanych kondensatorów. Powinno się również uwzględnić wnoszoną pojemność
montażową wynikającą ze sposobu ułożenia ścieżek drukowanych, położenia punktów lutowniczych,
prowadzenia mas, pojemności wejściowej doprowadzeń mikrokontrolera itp.
Typowo w układach amatorskich wartość tej dodanej pojemności waha się pomiędzy 6 a 10 pF. Uwzględniając
powyższy opis, aby wyznaczyć właściwą wartość pojemności kondensatorów dołączanych do kwarcu, należy
skorzystać z następującej zależności (uwzględnia ona wzajemne oddziaływanie na siebie pojemności):
C X = 2 x (C L – C M ), gdzie:
C X – wartość pojemności dołączanej do kwarcu
C L – parametr „Load Capacitance”
C M – pojemność montażowa (średnio 8 pF)
Wykonajmy obliczenia dla podanych wyżej parametrów (C L = 20 pF, C M = 8 pF):
C X = 2 x (20 – 8)pF = 2 x 12 pF = 24 pF.
Jak wynika z obliczeń, obie wartości pojemności dołączonych do mikrokontrolera powinny mieć wartość 24 pF.
Może się jednak zdarzyć, że dysponujemy rezonatorem, o którym nie wiemy nic za wyjątkiem wydrukowanej
na jego obudowie częstotliwości. Niestety w takiej sytuacji skazani będziemy na eksperymentowanie. Osobiście
używam w takich przypadkach kondensatorów o pojemności około 27 pF przy częstotliwości do 8MHz. Powyżej
tej częstotliwości, używam kondensatorów o pojemności 22pF.
Powyższe informacje również należy traktować jako wskazówka przy samodzielnym rozwiązywaniu problemów.
Normalnie większość rezonatorów kwarcowych działa od razu po załączeniu zasilania, przy dołączonych
pojemnościach z zakresu od 22 do 33pF.
Tabela 1. Parametry rezonatorów produkcji firmy CQ.
Ceramiczny rezonator o 2 wyprowadzeniach. Funkcjonalnie rezonator ceramiczny zbliżony jest do
kwarcowego z tym, że jest znacznie tańszy. Konsekwencją ceny jest również jakość pracy, to jest stabilność i
dokładność generowanej częstotliwości. W związku z tym nie zawsze będzie się on nadawał do taktowania
pracą interfejsu asynchronicznego (UART), ale zależy to od jakości oferowanej przez danego producenta. Ma
J.Bogusz ,,Nastawy zegara w mikrokontrolerach AVR”, strona 3/10
305452786.007.png
http://www.easy-soft.tsnet.pl/
on jednak i swoje zalety. Rezonator ceramiczny nie jest tak delikatny jak kwarcowy i w związku z tym dobrze
nadaje się do środowisk pracy, gdzie występują duże wibracje. Układ pracy rezonatora ceramicznego 2-
wyprowadzeniowego jest identyczny, jak rezonatora kwarcowego, jednak wymaga on dołączenia większych
pojemności. Materiały firmy Atmel podają dla rezonatorów ceramicznych wartość 40pF±10pF.
Rezonator ceramiczny o 3 wyprowadzeniach ma identyczne właściwości, jak opisywany poprzednik 2-
wyprowadzeniowy. Różnica polega jedynie na tym, że ma wbudowane do wewnątrz pojemności tak, że nie
muszą być one dołączane jako osobne komponenty. Sposób dołączenia tego typu rezonatora pokazano na
rysunku 3. Przeważnie skrajne wyprowadzenia podłącza się odpowiednio do XTAL1 i XTAL2 a środkowe do
masy. Jedna uwaga: ważne jest, aby masa była dołączona właściwie, wyprowadzenia XTAL1 i XTAL2 mogą być
zamieniane.
Rysunek 3. Sposób dołączenia zewnętrznego rezonatora ceramicznego.
Wewnętrzny generator RC wbudowany jest w niektóre AVR z serii 90 i wszystkie ATMega. Niektóre z AVR
posiadają pojedynczy układ oscylatora, podczas gdy inne mają aż cztery różne do wyboru. Zakres
generowanych częstotliwości można ustawić w granicach od 4 do 9,6MHz. W Tabeli 2 umieszczono zestawienie
współcześnie produkowanych mikrokontrolerów AVR wyposażonych w oscylator RC.
Nazwa mikrokontrolera Częstotliwość generowana
przez oscylator RC
ATtiny12 1,2
ATtiny15 1,6
ATmega163 1,0
ATmega323 1,0
ATmega8 1,0; 2,0; 4,0; 8,0
ATmega16 1,0; 2,0; 4,0; 8,0
ATmega32 1,0; 2,0; 4,0; 8,0
ATmega64 1,0; 2,0; 4,0; 8,0
ATmega128 1,0; 2,0; 4,0; 8,0
ATmega8515 1,0; 2,0; 4,0; 8,0
ATmega8535 1,0; 2,0; 4,0; 8,0
ATmega162 8,0
ATmega169 8,0
ATtiny13 4,8; 9,6
ATtiny2313 4,0; 8,0
ATmega48 8,0
Tabela 2. Zestawienie mikrokontrolerów AVR wyposażonych w oscylator RC.
Oscylator RC może być różny w różnych układach, ale we wszystkich spotkamy się z zależnością generowanej
częstotliwości od wartości napięcia zasilającego mikrokontroler. Dlatego też w czasie produkcji wykonywana
jest kalibracja oscylatora tak, aby zapewnić właściwą wartość generowanej częstotliwości przy zasilaniu
napięciem 3,3 lub 5V. Wewnętrzny generator można również kalibrować samodzielnie, ale mimo wszystko
stabilność generowanej częstotliwości pozostawia nieco do życzenia. Na przykład producent zapewnia
J.Bogusz ,,Nastawy zegara w mikrokontrolerach AVR”, strona 4/10
305452786.001.png
http://www.easy-soft.tsnet.pl/
dokładność ±10% a wykonując kalibrację samodzielnie w pracującym układzie, w stabilnych warunkach
zasilania można osiągnąć dokładność rzędu ±1%. Niestety wartość częstotliwości będzie również wykazywać
pewne fluktuacje w funkcji temperatury. Firma Atmel posiada znakomitą notę aplikacyjną mówiącą o
sposobach użycia i kalibrowania oscylatora RC. Podane są w niej wszelkie zależności i charakterystyki robocze.
Zainteresowanych tematem odsyłam do lektury AVR053 (http://www.atmel.com/).
Aby włączyć wewnętrzny generator RC należy ustawić odpowiedni bit bezpiecznika. Wiele ze sprzedawanych
układów ma ten bit ustawiony już w momencie produkcji. Często można dzięki temu spotkać na grupach
dyskusyjnych pytania w rodzaju: „Dołączyłem zewnętrzny kwarc 10MHz a układ pracuje o wiele wolniej. Co się
dzieje?”. Należy upewnić się, że bit opcji generatora ma właściwą wartość nastawy. Będzie o tym mowa dalej.
Wobec tak licznych możliwości taktowania pracą mikrokontrolera pojawić się może pytanie: jak dobrać
właściwy rodzaj generatora do konstruowanej aplikacji? To nie takie trudne jak może się początkowo wydawać.
Jeśli wymagana jest bardzo duża dokładność generowanej częstotliwości, należy użyć zewnętrznego,
specjalizowanego generatora. Opcja ta jest również bardzo wygodna wówczas, gdy mamy do czynienia z
dużymi wartościami częstotliwości zegarowej. Praktycznie można ją polecić już od ok. 30MHz wzwyż. Bardzo
dużą dokładność i stabilność generowanej częstotliwości zapewnia również rezonator kwarcowy. Może nie aż
tak dobrą, jak specjalizowany generator, ale wystarczającą dla większości popularnych zastosowań. Polecam
go do stosowania zwłaszcza przy korzystaniu z transmisji asynchronicznej (UART tj. RS232, RS485 itp.).
Mniejszą dokładność, ale za znacznie niższą cenę zapewnia rezonator ceramiczny. Jego stosowanie upraszcza
układ i obniża koszt, choć może nie nadaje się do układów elektroniki profesjonalnej. Zdecydowanie najtańsze i
najprostsze w użyciu jest wykorzystanie generatora RC wbudowanego w strukturę AVR. Niezbyt stabilny,
wymagający kalibracji, ale wystarczający do zastosowania np. w zabawce, termometrze, czujce alarmowej i
innych niezbyt wymagających, jeśli patrzeć na nie pod kątem rygorów czasowych, aplikacjach mikrokontrolera.
Nastawy bitów kontrolnych.
Dla większości mikrokontrolerów z rodziny AT90 nie ma potrzeby martwić się o nastawy bitów kontrolnych
(bezpieczników). Należy po prostu podłączyć zewnętrzny oscylator kwarcowy czy ceramiczny, ewentualnie
generator zegarowy i już można normalnie używać układu mikrokontrolera. Inaczej jest w przypadku AVR z
serii ATMega.
Właściwa sposób nastawy zależy od rodzaju używanego programatora i jego oprogramowania. Nie można
niestety opisać jednej, uniwersalnej metody dla wszystkich. W artykule opiszę ogólne zasady wykonywania
nastaw oraz sposoby użycia popularnych narzędzi, takich jak AVR Studio (z dołączonym STK500 lub JTAG ICE)
oraz Bascom AVR (z dołączonym STK300).
Sposób wykonywania nastaw z dołączonym STK500 jest bardzo prosty. Z menu wybieramy opcję TOOLS Æ
STK500/AVRISP/JTAG ICE. Ilustruje to fotografia 1.
Fotografia 1. Wybór narzędzia STK500 z menu AVR Studio 4
Pojawi się okno nastaw, gdzie po wybraniu typu mikrokontrolera oraz zakładki FUSES uzyskujemy możliwość
nastaw zegara. Ilustruje to fotografia 2 ukazująca fragment nastaw mikrokontrolera ATMega 128.
J.Bogusz ,,Nastawy zegara w mikrokontrolerach AVR”, strona 5/10
305452786.002.png 305452786.003.png
Zgłoś jeśli naruszono regulamin