background image

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 

Pomiar częstotliwości od 10Hz do 

Timer_Clock_frequency/2.5. 

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. 

 

 

background image

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 

AVR1617Atmel 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

background image

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. 

 

 

 

 

 

 

 

background image

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) 

 

 

 

background image

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 

 

 

background image

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. 

 

 

 

 

 

 

 

 

 

background image

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

 

•Korzystając z wejścia AVR Studio 4, otwórz projekt, 
freq_meter_busy_wait_demo.apx

o  Budowanie projektu 

Korzystanie z JTAGICE mkII, rozpocząć sesję 
debugowania z AVR Studio i ustawić punkt przerwania 
na delay100ms instrukcji C (2); 

Uruchom projekt, a po osiągnięciu punktu przerwania, 
wynik zliczania częstotliwości będzie w zmiennej 
freq_div_by_10 C 

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   

background image

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

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) 

• 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 

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)

• 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. 

 

 
 

background image

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. 

 

 

background image

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

 

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()

Uruchom projekt, a po osiągnięciu punktu przerwania, 
wynik zliczania częstotliwości będzie w zmiennej 
freq_cntr_result C 

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

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 

 

background image

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 

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

 

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 

Wywołanie funkcji freq_cntr_clear_result(); czyści 
wynik zwrócany wcześniej w celu przygotowania do 
następnego pomiaru częstotliwości. 

 

 

 

background image

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 

 

background image

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. 

 

 

 

 

 

 

background image

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