AVR205: 8-bit Microcontrollers Nota Applikacyjna
Strona 1/14
AVR205: Detektor przejścia
przez zero (8-bit)
– OPIS.
AVR: AVR205 -
Pomiar częstotliwości to proste
z Atmel TinyAVR i Atmel mega
Właściwości
o
Pomiar częstotliwości od 10Hz do
Timer_Clock_frequency/2.5.
o
Dokładny pomiar: do 99% lub więcej, w
zależności od źródła zegara urządzenia
AVR®
o Dwie metody pomiaru:
Zajęty czekać
(odpytywania) i sterowane przerwaniami.
1. Wstęp
Cykle pomiarowe okresowo zmiennego sygnału
w jednostce czasu to -
częstotliwość - jest jedną
z podstawowych działalności w dziedzinie
budowany
ch układów elektroniki. Niniejsza nota
opisuje jak mierzyć częstotliwość każdego typu
fali - sinus, kwadrat, itp - ze zmiennym cyklem
pracy. Podstawowym wymogiem jest aby sygnał
mieł amplitudę, która jest w zakresie poziomów
I/O pin dla wybranego urządzenia AVR.
Drugie wymaganie dla kodu Prezentowanego tu
przykładu pracy jest, aby wybrane urządzenie
AVR miało co najmniej dwa liczniki, a jedna z
nich może być stosowany z zewnętrznym
sygnałem zegarowym. Jeden z tych timerów
może być tworzony przez pętlę opóźniającą w
oprogramowaniu. Chodzi o to, podawać
mierzony sygnał na wejściu zegarowym przez
jeden timer, a następnie użyć innego timera jako
czasu odniesienia.
AVR205: 8-bit Microcontrollers Nota Applikacyjna
Strona 2/14
Rysunek 1-
1. Licznik częstotliwości z roku 1970.
2 Wymagania aby uruchomić kod
Kod rea
lizowane w ramach niniejszej noty aplikacji oparty jest na urządzeniach Atmel®
TinyAVR® i Atmel megaAVR®
. Dla urządzeń Atmel XMEGA®, patrz uwaga aplikacji
AVR1617: Atmel XMEGA
wykorzystuje system zdarzeń.
Jak krótko wspomniano powyżej, dwa pomiary czasu muszą być dostępne na wybranym
urządzeniu, a jeden zegar musi być taktowany z zewnętrznego źródła.
Rysunek 2-
1. Wejście zegara AVR program używany jako obwód synchronizatora.
Rysunek 2-
1 pokazuje, jak sygnał wejściowy jest próbkowany. Maksymalna częstotliwość
zegara zewnętrznego, które mogą być wykrywane jestrówna połowie częstotliwości
próbkowania (twierdzenie Nyquista o próbkowaniu). Jednakże, ze względu na zmiany
częstotliwości cyklu zegara systemowego i obowiązujące cykle powodowane wybraniem
tolerancji
źródła zegarowego (kryształ rezonatora i kondensatory), to zaleca się, aby
maksymalna częstotliwość zegara zewnętrznego źródłamierzonego może być mniejsza niż
Timer_Clock_frequency/2,5
. W tej nocie aplikacyjnej, częstotliwość oscylatora to 8MHz z
oscylato
ra RC jest podawana do licznika zegara. Dlatego też, w tym szczególnym
przykładzie wykonania, zalecana maksymalna częstotliwość do pomiaru powinna być
mniejsza niż 3.2MHz.
AVR205: 8-bit Microcontrollers Nota Applikacyjna
Strona 3/14
Sygnały wejściowe symetryczne (wypełnienie 50% cyklu roboczego), mogą być mierzone w
zakresie do 3,2MHz
, jak opisano powyżej. Dla niesymetrycznych sygnałów wejściowych,
wysokie lub niskie poziomy na wejściu musi być większa niż okres jedego zegara
sterującego szerokością impulsu lub obwódy synchronizacji przedstawione powyżej mogą
przega
pić impulsu wejściowy i powodować niedokładności pomiaru częstotliwości sygnału
mierzonego.
Na przykład, jeśli zegar 8MHz służy do uruchamiania stopera, zegarowe wysokie i niskie
okresy mogą dodać do 125ns. Dlatego też sygnał wejściowy o wysokiej lub niskiej szerokość
impulsów musi być większa niż 125ns.
Zobacz tinyAVR lub megaAVR
w arkuszach danych. Więcej informacji na temat tej techniki
w opisie wprowadzania próbki.
2.1 Lista urządzeń firmy Atmel AVR z zewnętrznym wejściem na zegar
zegar/licznik.
Prostym
sposobem, aby ustalić, czy wejście zewnętrzne mogą być wykorzystane do zegara
zegar/licznik jest obserwować schemat pinout urządzenia Atmel AVR i poszukaj oznaczenia
pinowy, T0. Patrz Rysunek 2-
2 na przykład.
Nie kompletna lista urządzeń Atmel AVR z tą funkcją obejmuje:
Atmel ATtiny10,
ATtiny13,
ATtiny20,
ATtiny26,
ATtiny28,
ATtiny2313,
ATmega48/88/168,
ATmega8,
ATmega16,
ATmega32,
ATmega8515/8535,
ATmega162,
ATmega164/324644/1284
ATmega165/325/3250/64
56450.
Rysunek 2-2. Atmel ATtiny13A Wyprowadzenia.
AVR205: 8-bit Microcontrollers Nota Applikacyjna
Strona 4/14
3 Zasada pomiaru.
W tej nocie aplikacji, "gate-
open" (bramka otwarta) przedział został wybrany na 0,1 s lub 100
ms, a więc sygnał należy mierzyć zegarem licznik w tym przedziale czasowym, a wytwarzają
wynik zliczania częstotliwość 100ms. Pomiar częstotliwości Otrzymany będzie jedną
dziesiątą rzeczywistej częstotliwość.
To był również wybrany do skorzystania z 16-bitową rozdzielczością Timer/Licznik jest; w
tym przypadku, pomiar częstotliwości tylko od 500Hz do 5000Hz. Jeśli częstotliwość 500kHz
ma b
yć mierzona, czasu bramy 1ms spowodowałoby dobre wykorzystanie zakresu
16-
bitowego rejestru Tmer/Licznik użytkownika.
Rysunek 3-
1. Schemat logiczny wskazujący sterowanie bramkowaniem
4 dwie techniki: Zajęty czekać i druga sterowane przerwanimi.
4.1
Busy pętla czekania
Zajęty pętli oczekiwania - jest to pętla, która wielokrotnie sprawdza, czy wystąpiło zdarzenie.
Niektóre aplikacje mogą czekać na 0.1s (100ms) w pętli kolejnego do cyklu, i nie wymagają
stosowania przerwania.
Figura 4-
1 jest siecią działań dla głównej części programu. Rysunek 4-2 jest to schemat
blokowy dla wywołania funkcji C, które w rzeczywistości mierzy częstotliwość sygnału
przychodzącego i zwraca wynik do głównego programu (wywołując go)
AVR205: 8-bit Microcontrollers Nota Applikacyjna
Strona 5/14
Rysunek 4-
1. Główny schemat blokowy.
Włącz i reset może być również aktywny
przez niski sygnał stosowane do urządzeń
AVR na pin reset.
Zmienne użytkownika zostaną również
zainicjowany tutaj.
Zawartość timera jest wyczyszczona.
Kod użytkownik wykonuje się w momencie,
kiedy jest akurar potrzebny do pomiaru
częstotliwości, połanczanie wybranej funkcji.
Wywołanie funkcji rozpoczyna się w tym
momencie.
Wyniki wywołania funkcji są zwracane w
16-
bitowy rejestr jeśli liczba niezerowa. Jeśli
zwracany jest 0xFFFF (65535 dziesiętnie),
oznacza
to przepełnienie timera. Rezultat
oznacza ”pomiar częstotliwości jest nie
ważny”. Może to nastąpić w przypadku zbyt
wysokiej częstotliwości mierzonej przyłożonej
do wtyku wejściowego urządzenia AVR.
Wyjście z wywołanej funkcji
AVR205: 8-bit Microcontrollers Nota Applikacyjna
Strona 6/14
Rysunek 4-2. Schemat blokowy funkcji.
Punkt wejścia funkcji.
Wyczyść wynika z licznika.
Inicjalizacja timera 0 liczenie.
Jeśli timer ma 0 jest taktowany raz
uruchomić bramkę licznika na 0.1s
(100ms).
Po upływie 100 ms, odłącz timer 0 z
sygnału wejściowego.
Czy przepełnienia timera? Jeśli tak, to
zwraca wartość 0xFF; w przeciwnym
razie zwróci aktualną wartość licznika
16-bitowego.
AVR205: 8-bit Microcontrollers Nota Applikacyjna
Strona 7/14
Rysunek 4-3. Schemat blokowy
4.1.1 Jak uruchomić
projekt korzystając
zajęty oczekiwania
Atmel
AVR Studio 4.18 zostało wykorzystane do opracowania tego
kodu. Późniejsze wersje mogą lub nie mogą skompilować
kod poprawnie. WinAVR kompilator C wersję 20100110 był
również używany.
Późniejsze wersje mogą lub nie mogą skompilować kod
poprawnie. Jest on dostępny (kod) pod adresem:
http://sourceforge.net/projects/winavr/files/
o Patrz na Rysunek 4-
1. Podłącz źródło sygnału do
wejścia, pin AVR T
0
o
•Korzystając z wejścia AVR Studio 4, otwórz projekt,
freq_meter_busy_wait_demo.apx.
o Budowanie projektu
o
Korzystanie z JTAGICE mkII, rozpocząć sesję
debugowania z AVR Studio i ustawić punkt przerwania
na delay100ms instrukcji C (2);
o
Uruchom projekt, a po osiągnięciu punktu przerwania,
wynik zliczania częstotliwości będzie w zmiennej
freq_div_by_10 C
o
Otrzymaną wartością będzie jedna dziesiąta aktualnej
częstotliwości, ponieważ zegar AVR zlicza przez
100 ms. Jeśli częstotliwość przekracza możliwości
algorytmu, wynik zwracany będzie jako 0xffff, wskazując
przepełnienie
T
0
-
jest nadrzędne wejście do AVR
AVR205: 8-bit Microcontrollers Nota Applikacyjna
Strona 8/14
4.1.2 Jak zbudowa
ć
projekt korzystając
procedury zajęty
czekać.
Wymagania:
znajomość sposobów budowania, kompilowania i
debugowania projektu AVR Studio 4.
o
Trzy pliki będą potrzebne do budowy tego projektu. W tym
przykładzie są to:
avr205_frequency_meter_busy_wait_demo.c, gdzie
znajduje się główna funkcja ()
freq_meter.c
, gdzie znajdują się inne funkcje
freq_meter.h
, gdzie znajduje się specyfika takich
zmiennych jak nazwy portu i rejestru które zostały w
nim określone, w tym takżr i prędkości zegara
procesora, w tym przypadku jest to 8 000 000Hz
(8MHz)
o
• Określ rodzaj AVR, takich jak ATtiny861 lub ATmega48
4.1.3 Jak wywołać je i
korzystać z tych
funkcji, używając
konfiguracji
zajęty czekać
w pliku freq_meter_demo.c
o Funkcja freq_meter init(); inicjuje odpowiednie rejestry
AVR
o Funkcja user_init function(); inicjuje zmienne
użytkownika
o Przerwania AVR
nie są używane w tym demo
o
Wywołanie freq_cntr_get_frequency(); ustawia zmianę
poziomu na pinie przernie_T
0
aby umożliwić pomiar
częstotliwości i zacząć od zmiany na pinie T
0
. Wewnątrz
tej funkcji jest wywołanie (procedury opóźnienia)
delay100ms (1);
o
• Oczekiwanie technicznie jest realizowane przez
wywołanie funkcji: zajęty_delay100ms (1);
o Procedura delay100ms (2)
symuluje kod użytkownika
przed wywołaniem funkcji freq_cntr_get_frequency(); i
jest wywoływana ponownie
4.2 Przerwanie
Sterowane
Implementacja, która używa systemu przerwań może używać
sygnału zajęty_czekać, wtedy wejście jest blokowane. A nie
czeka na synchronizację zegara do zakończenia cyklu, i może
po prostu przerwać i zatrzymać blokując bramekę licznika. Patrz
ilustracje poniżej, aby uzyskać szczegółowe informacje.
AVR205: 8-bit Microcontrollers Nota Applikacyjna
Strona 9/14
Rysunek 4-
4. Główna pętla.
Włączenia zasilania powoduje procedurę reset
przez aktywny niski sygnał stosowany do
urządzeń AVR pin-reset.
Zmienne użytkownika zostaną również
zainicjowane tutaj.
Przerwanie od Użytkownika zostaje włączone w
odpowiednim czasie w tej aplikacji.
Ten punkt to tylko propozycja.
Sprawdzenie, Czy kod użytkownika potrzebuje
pomiaru częstotliwości w tej chwili?
Jeśli tak, należy podać sygnał przerwania na
PIN-
Zmień.
Zobacz następy schemat który pokazuje
odpowiedź urządzenia AVR pierwsza zmiana
poziomu sygnału na pinie przerwania.
Jeśli nie jest wymagany pomiar częstotliwości
w tym momencie kontynuuj wywołany program
użytkownika.
AVR205: 8-bit Microcontrollers Nota Applikacyjna
Strona 10/14
4.2.1 Jak uruchomić
freq_meter_interrupt
(pomiar częstotliwości
demo
Atmel AVR Studio 4.18
został wykorzystany do
opracowania tego kodu. Późniejsze wersje mogą lub nie
mogą skompilować ten kod poprawnie. WinAVR kompilator
C wersja 20100110 był również używany.
Późniejsze wersje mogą lub nie mogą skompilować kod
poprawnie. Jest on dostępny oddzielnie na
http://sourceforge.net/projects/winavr/files/
o Patrz Rysunek 4-
1. Podłącz źródło sygnału do wejścia
AVR pin T
0
o
Korzystając z AVR Studio 4, otwórz projekt, plik
frequency_meter_interrupt_demo.apx
o Zbuduj projekt
o Korzystanie z JTAGICE mkII
, rozpocząć sesję
debugowania z AVR Studio i ustaw punkt przerwania
instrukcji C w funkcji freq_cntr_clear_result();
o
Uruchom projekt, a po osiągnięciu punktu przerwania,
wynik zliczania częstotliwości będzie w zmiennej
freq_cntr_result C
o
Otrzymana tam wartość będzie jedna dziesiąta
aktualnej częstotliwości wejściowej, ponieważ czas
bramy to 100 ms
. Jeśli częstotliwość przekracza
możliwości algorytmu, wynik zwracany będzie jako
0xffff
, wskazując przepełnienie
4.2.2 Jak zbudować
projekt przy użyciu
przerwań
Wymagania:
wiedza na temat, jak budować, kompilować i debugować
projekt w AVR Studio 4.
o
Trzy pliki będą potrzebne do budowy tego projektu. W
tym przykładzie są to:
avr205_frequency meter_busy_wait.c, gdzie
main()
Funkcja się znajduje.
freq_meter.c
, gdzie znajdują się funkcje
freq_meter.h, gdzie jest specyfika takich
zmiennych jak port i zarejestrowane ich nazwy,
w tym także częstotliwości taktowania procesora,
w tym przypadku to 8 000 000Hz (8MHz).
• Określ urzycie AVR, takich jak Attiny861 lub Atmega48
AVR205: 8-bit Microcontrollers Nota Applikacyjna
Strona 11/14
4.2.3 Jak wywołać i
korzystać z tych
funkcji, przy użyciu
przerwań
Funkcje są w freq_meter_demo.c
o funkcja freq_meter_init function(); inicjuje
odpowiednie rejestry AVR
o funkcja user_init function(); inicjuje zmienne
użytkownika
o Przerwania AVR
są włączane przez użytkownika
o
Wywołanie funkcjai freq_cntr_start_measurement();
konfiguruje zmiana sygnału na pin-T
0
wymusza
przerwanie, aby umożliwić pomiar częstotliwości,
pomiar zaczyna sie od zmiany na pinie T
0
o
Wywołanie funkcji freq_cntr_get_result(); zwraca
albo 0x00
, jeśli pomiar częstotliwości nie jest jeszcze
gotowy, albo liczbę szesnastkowa mniejszą niż 0xffff
(pr
zepełnienie) jako pomierzoną częstotliwość.
Informacja o Błędzie jest przekazywanych jako wynik
w postaci 0xffff
o
Wywołanie funkcji freq_cntr_clear_result(); czyści
wynik zwrócany wcześniej w celu przygotowania do
następnego pomiaru częstotliwości.
AVR205: 8-bit Microcontrollers Nota Applikacyjna
Strona 12/14
Rysunek 4-5. Zmiana na PIN-ie przerwania jako odpowiedzi.
Jest to zmiana na pinie
przerwania jako
odpowiedzi kodu
programu.
Sprawdzenie Czy sygnał
wejściowy jest w
wysokim stanie
logicznym? Jeśli nie
Zmieniłna PIN-e, to
powrót z z obsługi
przerwania.
Jeśli dodatnie zbocze
zostało wykryte.
Zatrzymaj oba liczniki.
Korzystajac z dostępu do
instrukcji rejestru,
włączyć sygnał
zezwolenia na
zewnętrzne przerwanie
skierowane do Timera0
na pin zegara.
Kasowanie timera do 0
zapewnia najlepszą
możliwą dokładność.
Timer 1 steruje okresem
bramy100ms i jest
ładowany z jego
wartością początkową
liczyć aż do
przepełnienia, OVF
AVR205: 8-bit Microcontrollers Nota Applikacyjna
Strona 13/14
Rysunek 4-
6. Timer1 kod obsługi przerwania dla przepełnienia.
Włączenie zasilania może
również aktywować niski
poziom sygnału stosowany
dla
urządzeń AVR na pinie
resetu.
Zmienne użytkownika
zostaną również
zainicjowane tutaj.
Czy Zawartość timera jest
wyczyszczona.
Kod użytkownika jest
wykonywany w tym
momencie, kiedy istnieje
potrzeba pomiaru
częstotliwości, wywołanie
funkcji jest dos
tępne.
AVR205: 8-bit Microcontrollers Nota Applikacyjna
Strona 14/14
5 Słowo o wychwytywaniu wejściowego (nie używane w niniejszej nocie
wniosku)
Wiele urządzeń AVR zawiera liczniki które używają zestawu
8-
bitowych zatrzasków, które oferują "przechwytywanie i
zatrzaskiwanie sygnału wejściowego",. Gdy taktowane zatrzaski
(przerzutniki typu Lach) zapisują chwilowe zawartości timera.
Przechwytywanie Wejścia to zaawansowana funkcja, która nie jest
dostępna w prostszych urządzeniach, takich jak AVR Atmel ATtiny13.
Wejściowe rejestry przechwytyujące są taktowane przez pinowe
specjalne wejście. Ale do pomiaru częstotliwości, akcja taka nie musi
być uruchamiane przez pin wyjściowy, więc ta technika wymaga
zastosowania dwóch pinów (I/O
) we/wy, które często nie są dostępne
w urządzeniach o mniejszej liczby PIN-ów.
Implementacja Atmel XMEGA
licznika częstotliwości może korzystać z
systemu zdarzeń do wyzwalania momentu przechwytywania
(zatrzaskiwania) sygnału.
6. Wnioski
Większość urządzeń Atmel tinyAVR i Atmel megaAVR mieć możliwość sterowania zegara
timer/licznik za
pomocą sygnału zewnętrznego. Funkcja ta pozwala na to aby wewnętrzny
licznik być taktowany przez szybki zewnetrzy zegar 2.5MHz lub jeszcze wyszej
częstotliwości (w zależności od częstotliwości zegara głównego AVR).
Jeżeli brama czasowa 100 ms jest stosowany jako czas na liczenie, to następnie licznik
zawiera tylko wartość która jest jedną dziesiątą częstotliwości sygnału wejściowego.
Technika ta może być zrealizowana z lub bez systemu przerwań. Obie te techniki są
przedstawione w tej nocie.
tłum.:
saj5