You are on page 1of 3

Hit roku 2000

BASCOM College
Ćwiczenie 5

Pomiary częstotliwości i czasu


Dzisiejszy wykład miał wyjątkowo wakacyj− Za chwilę zaprogramujemy sobie aż trzy Napiszmy zatem program pierwszego,
ny i wypoczynkowy charakter, a zatem i ćwi− mierniki częstotliwości: najprostszy, o nie najprostszego miernika częstotliwości:
czenie nie powinno okazać się zbyt trudne najlepszych parametrach, ale za to do wy− Działanie tak napisanego programu nie
i wyczerpujące. Chciałbym nawiązać w nim konania dosłownie w minutę, bardziej roz− wymaga chyba komentarza. Po skompilowa−
do koncepcji lansowanej przeze mnie w po− budowany, o zwiększonej dokładności niu i zapisaniu programu w pamięci proceso−
przednim ćwiczeniu: idei stosowania naszej i "profesjonalny", maksymalnie wykorzy− ra montujemy na naszej płytce testowej układ
płytki testowej i odpowiednio zaprogramo− stujący możliwości "gołego" procesora pokazany na rysunku 1. Poza procesorem
wanego procesora jako UPPW, czyli Uniwer− 89C2051. i wyświetlaczem wykorzystujemy tu tylko
salnego Programowalnego Przyrządu War−
Config Timer0 = Counter , Gate = External , Mode = 1
sztatowego. Dzisiaj pokażę Wam, jak w cią− 'timer0 został skonfigurowany jako licznik 16−bitowy, sterowany impulsami zewnętrznymi 'podawanymi
gu kilku − kilkunastu minut możemy zbudo− na wejście T0
wać, a właściwie zaprogramować prosty Config Lcd = 16 * 1a 'określenie typu wyświetlacza LCD
miernik częstotliwości, o parametrach zupeł− Dim Frequency As Word 'deklaracja zmiennej FREQUENCY jako liczby 16−bitowej
Start Counter0 'uruchomienie licznika
nie zaspokajających potrzeby przeciętnego
hobbysty. Do 'początek pętli programowej
Chciałbym jeszcze zwrócić Waszą uwagę Cls 'czyszczenie ekranu wyświetlacza
Lcd "FRQ=: " ; Frequency ; " Hz" 'wyświetl liczbę zliczonych w ciągu 1 sekundy impulsów 'wejściowych
na fakt, że nasza "baza sprzętowa" uległa
Frequency = 0
ostatnio rozszerzeniu. Opisana w poprzednim Counter0 = 0 'zawartość licznika 0 wynosi teraz 0
numerze EdW uniwersalka do procesorów Start Counter0 'początek zliczania impulsów wejściowych
'X051 może także znaleźć zastosowanie do Wait 1 'zaczekaj 1 sekundę, czyli odmierz czas bramkowanie miernika
Stop Counter0 'zatrzymaj licznik 0
budowy przyrządów pomiarowych. Opisany Frequency = Counter0 'zmienna FREQUENCY przyjmuje wartość licznika 0, czyli określa liczbę 'zliczonych
w dzisiejszym ćwiczeniu miernik częstotli− impulsów wejściowych
wości możemy zatem umieścić na płytce te− Loop 'zamknięcie pętli programowej
stowej i po przetestowaniu przenieść na płyt−
kę uniwersalną. Uzyskamy w ten sposób pro−
Rys. 1
sty, przenośny przyrząd pomiarowy, do które−
go w miarę potrzeby będziemy mogli "dopro−
gramowywać" kolejne dodatkowe funkcje.

Miernik częstotliwości
w 10 minut
Wiemy już na tyle dużo o timerach i prze−
rwaniach, aby pokusić się o skonstruowa−
nie, a właściwie zaprogramowanie prostego
miernika częstotliwości, którego parametry
w głównej mierze zależeć będą od stopnia
komplikacji programu. Nie obiecujmy jed−
nak sobie zbyt wiele: na naszej płytce testo−
wej będziemy mogli zbudować miernik
o zakresie pomiarowym nie przekraczają−
cym 500kHz (z typowym kwarcem
11MHz), a w najlepszym wypadku, po wy−
mianie kwarcu, do 1MHz. Jednak już ta
pierwsza wartość może okazać się w prak−
tyce hobbystycznej zupełnie wystarczająca.

26 Elektronika dla Wszystkich


BASCOM
jeden element z zasobów naszej płytki: tran− wykorzystaliśmy do sygnalizowania przekro− Pozostała nam zatem tylko jedna, ale
zystor NPN, który będzie pełnił rolę bufora czenia zakresu. Zmieńmy zatem podprogram dość istotna wada: nieszczęsne WAIT 1.
oddzielającego wejście procesora od badane− obsługi tego przerwania, dodajmy do progra− Polecenie to nie nadaje się do dokonywa−
go układu. Ponadto, zastosowanie tranzysto− nia precyzyjnych pomiarów, o czym zre−
ra umożliwi nam pomiar przebiegów o po− Dim Counts As Byte sztą zostaliśmy lojalnie uprzedzeni w in−
ziomie innym niż poziomy TTL. Następnie strukcji − helpie. A zatem, jeżeli chcemy
do wejścia układu dołączmy źródło impul− mu jeszcze jedną zmienną i zobaczymy, co zbudować miernik o przyzwoitych parame−
sów prostokątnych, najlepiej o regulowanej z tego wyniknie. trach, musimy dokonać kolejnej rozbudo−
częstotliwości, i obserwujemy wyświetlacz Deklarujemy na początku programu wy programu.
LCD. Co sekundę pojawiać się będzie na nim zmienną pomocniczą, którą możemy nazwać Z pewnością przypominacie sobie, jak
zaktualizowany odczyt zmierzonej wartości. TEMP na poprzedniej lekcji bawiliśmy się timera−
Tak zaprogramowany miernik ma dwie Wiemy, że mierzona wartość będzie te− mi i zbudowaliśmy sobie eksperymentalny
wady: małą dokładność wynikającą z zastoso− raz mogła być większa niż 65535, co powo− model sekundnika do zegarów mikroproce−
wania do odmierzania czasu bramkowania po− duje konieczność zwiększenia maksymal− sorowych. Najwyższy czas, aby wykorzy−
lecenia WAIT, w założeniu przeznaczonego nej wartości zmiennej FREQUENCY. De− stać tamte doświadczenia i zastosować
do mniej precyzyjnych zastosowań, i ograni− klarujemy ją zatem jako LONG, czyli licz− zdobytą wiedzę w praktyce. Sekundnik bę−
czenie maksymalnej mierzonej częstotliwości bę 32−bitową, o maksymalnej wartości dzie jednak nam potrzebny nie do zegara,
do 65535 Hz. To drugie ograniczenie wynika ale do bramkowania naszego miernika czę−
z maksymalnej pojemności 16−bitowego time− Dim Frequency As Long stotliwości.
ra i jest szczególnie dokuczliwe, ponieważ nic Jako "silnik" napędzający nasz sekundnik
nie sygnalizuje nam, że licznik został przepeł− 2147483647, czyli nawet znacznie większą, wykorzystamy drugi, wolny do tej pory Ti−
niony i rozpoczął zliczanie impulsów od po− niż potrzebujemy.
czątku. Wynik np. "12000Hz" może zatem Config Timer1 = Timer , Gate = Internal , Mode = 1
oznaczać równie dobrze 12000Hz, jak Overflow:
Incr Temp 'wystąpienie przepełnienia
i 12000+ 65536Hz, jak również 12000 + licznika powoduje zwiększenie wartości TEMP o 1
mer − TIMER1, pracujący w trybie 1. A więc
65536 x [liczba przepełnień licznika] Hz. Ma− Return piszemy na początku programu:
my dwie możliwości usunięcia tej wady: albo Tak skonfigurowany timer będzie praco−
dopisać do programu następującą kilka linijkę: wał jako licznik 16−bitowy, niestety bez moż−
Następnym krokiem będzie przeróbka liwości automatycznego ładowania. A teraz
On Timer0 Overflow 'w przypadku przepełnienia
podprogramu obsługi przerwania TIMER0: musimy trochę policzyć, kalkulatory w dłoń!
licznika skocz do podprogramu OVERFLOW
Frequency = 65536 * Temp 'częstotliwość równa jest pojemności licznika * liczba przepełnień
Temp = Counter0 'wykorzystujemy ponownie zmienną TEMP, nadając jej wartość 'ostatniego wyniku zliczania
oraz podprogramu: licznika TIMER0
Frequency = Frequency + Temp 'ostateczne obliczenie wartości FREQUENCY
Overflow:
Cls 'wyczyść ekran LCD oraz dodanie kilku linijek, w których obli− Naszym zadaniem jest dokładne odmierze−
Lcd "Overflow!" 'komunikat o przekroczeniu czana będzie wartość zmierzonej częstotliwości: nie odcinka czasu, równego jednej sekundzie.
zakresu A zatem druga wersja naszego programu Jak punkt wyjścia przyjmiemy częstotliwość
Wait 1 'zaczekaj chwilę przeznaczoną
na odczytanie komunikatu
miernika częstotliwości będzie miała postać podstawową pracującego w systemie rezona−
Return 'powrót do programu głównego tora kwarcowego: 11 059 200Hz. Wiemy, że
Config Timer0 = Counter , Gate = External , Mode = 1 częstotliwość generowana przez wbudowa−
Config Lcd = 16 * 1
Dim Frequency As Long
ny w procesor 89C2051 generator jest
albo też rozszerzyć zakres pomiarowy nasze− Dim Temp As Byte wstępnie dzielona przez 12. A zatem często−
go przyrządu. Enable Interrupts tliwość taktująca naszego procesora wynie−
Z rozszerzeniem zakresu nie będziemy Enable Timer0 sie 11059200/12 = 921600Hz. Liczba ta
mieli najmniejszego problemu, oczywiście On Timer0 Overflow znacznie przekracza pojemność zastosowa−
Cls
w granicach możliwości stosowanego proce− nego timera, który wobec tego zostanie
sora i kwarcu. Maksymalna częstotliwość, ja− Do zmuszony do kilkukrotnego zliczania w cią−
ką możemy podać na wejście timera proceso− Cls gu sekundy. Musimy teraz wybrać możliwie
ra '51 wynosi bowiem: Fosc/24, czyli w przy− Lcd "FRQ=: " ; Frequency ; " Hz" największą liczbę, przez którą musimy
padku typowego kwarcu 11,059MHz nieco Frequency = 0 podzielić tę częstotliwość, aby rezultat dzia−
Counter0 = 0
ponad 460KHz (i to przy założeniu, że przy tej łania był liczbą całkowitą. Po długotrwałych
Temp = 0
maksymalnej częstotliwości badany przebieg Start Counter0 próbach i rozgrzaniu kalkulatora do czerwo−
ma wypełnienie 1/2). Niewiele, ale nawet po Wait 1 ności, doszedłem do wniosku, że liczbą tą
wymianie kwarcu nie osiągniemy nigdy wyni− Stop Counter0 jest 15, to znaczy 921600/15 = 61440. Bar−
ku lepszego od 1,5MHz. Wracajmy jednak do Frequency = 65536 * Temp dzo dobry wynik, wykorzystywać będziemy
Temp = Counter0
programowego rozszerzenia zakresu pomiaro− prawie całą pojemność timera!
Frequency = Frequency + Temp
wego naszego miernika, a o możliwościach Loop Reasumując: aby odmierzyć 1 sekun−
sprzętowych wspomnimy jeszcze za chwilę. dę, timer musi 15 razy odliczyć 61440 im−
Wiemy już, że ograniczenie zakresu po− Overflow: pulsów.
miarowego naszego miernika wynika z po− Incr Temp Wynika z tego, że aby osiągnąć przepeł−
Return
jemności licznika TIMER, wbudowanego nienie timera i wygenerowanie przerwania
w strukturę procesora. Wiemy także, że we właściwym czasie, timer musi za każdym
w momencie przepełnienia licznik ten gene− przedstawioną na poniższym listingu (pozosta− razem rozpocząć zliczanie od wartości 4096
ruje sygnał zgłoszenia przerwania, który już wimy tym razem program bez komentarzy): (65536 − 61440 = 4096). Teoretycznie!

Elektronika dla Wszystkich 27


BASCOM
Nie zapominajmy bowiem, że na zatrzyma− przyrząd realizowany metodami z początku
Sub 1sekunda
nie, przeładowanie i ponowne uruchomienie lat 80., jakie stosowaliście do tej pory!
Counts = 0
timera procesor potrzebuje także trochę cza− Counter1 = 4150
A przecież to dopiero początki, dopiero na−
su. Z obliczeń i z doświadczeń przeprowa− Start Timer1 bieramy rozpędu, który będzie rosnąć w po−
dzonych w symulacji programowej wynika, Start Timer0 stępie geometrycznym!
że na te operacje procesor "zużyje" aż 54 tak− Do Skończmy jednak z tym samouwielbie−
ty zegarowe. A zatem musimy dać timerowi If Counts = 15 Then niem i popatrzmy jeszcze na nasz miernik
Stop Timer1
"fory": 4096 + 54 = 4150. krytycznym okiem. Jest dość dokładny, ale
Stop Timer0
Ostateczna postać trzeciej, finalnej wersji Exit Do
zakres pomiarowy mizerny. Nawet jeżeli
naszego programu została pokazana na po− End If wymienimy kwarc (i dokonamy stosow−
niższym listingu. Loop nych przeliczeń w programie) na 24MHz,
End Sub to i tak wiele nie uzyskamy. Można wpraw−
Config Timer0 = Counter , Gate = External , Mode = 1 dzie zastosować preskaler, ale naszym zało−
Config Timer1 = Timer , Gate = Internal , Mode = 1 Timer1_int:
Config Lcd = 16 * 1
żeniem była budowa miernika częstotliwo−
Counter1 = 4150
Dim Frequency As Long Start Timer1
ści z wykorzystaniem wyłącznie elementów
Dim Temp As Byte Incr Counts dostępnych na płytce testowej. Co za tym
Dim Counts As Byte Return można zrobić? Można, ale powiem Wam to
Declare Sub 1sekunda w tajemnicy, bo inaczej znowu oberwę za
On Timer1 Timer1_int
Listing pełnej wersji programu nie zo− wprowadzanie bałaganu do BASCOM Col−
Enable Interrupts
Enable Timer0
stał opatrzony komentarzami. Sądzę bo− lege. Można wymienić procesor na ... np.
Enable Timer1 wiem, że nauczyliście się wystarczająco AT90S2313, nowoczesny chip zrealizowa−
Cls dużo, aby bez mojej pomocy zrozumieć ny w technologii RISC, który bez problemu
treść tego prostego programiku, zajmujące− "połknie" częstotliwość do 5MHz. BA−
Do go w pamięci procesora tylko nieco więcej SCOM AVR Demo dostępny jest w Interne−
Cls
niż 850 bajtów. cie pod adresem www.ep.com.pl, a nasz
Lcd "FRQ=: " ; Frequency ; " Hz"
Frequency = 0
Podsumujmy zatem dzisiejsze osiągnię− program wymagałby tylko minimalnych
Counter0 = 0 cia: zbudowaliśmy, a właściwie zaprogra− przeróbek (to właśnie jedna z zalet języków
Temp = 0 mowaliśmy, prosty miernik częstotliwości wysokiego poziomu). Ale pamiętajcie, że
Call 1sekunda o przyzwoitych parametrach. Nie koszto− powiedziałem Wam o tym w sekrecie, bo
Stop Counter0 wało to nas złamanego grosza, a nasz mier− procesorami AVR zajmiemy się później.
Frequency = 65536 * Temp
nik możemy przechowywać na dysku kom−
Temp = Counter0
Frequency = Frequency + Temp
putera i w razie potrzeby programować pro− Zbigniew Raabe
Loop cesor i łączyć kilka kabelków na płytce te− e−mail: zbigniew.raabe@edw.com.pl
stowej. Chyba było warto? Pomyślcie tyl− Konsultacje: Sławomir Surowiński
ko, ile pracy i pieniędzy kosztowałby taki e−mail: slawomir.surowinski@ep.com.pl

Uwaga! Nadal można zgłosić się do BASCOM College!


✃ Zgłoszenie uczestnictwa w BASCOM College

Zamawiam płytki emulatora (AVT−2501),
Tak, zgłaszam chęć uczestnictwa w Szkole Programowania
Mikroprocesorów BASCOM College programator (AVT−2502),

nazwisko ........................................................................................................., płytkę testową (AVT−2500),

imię ............................................................................, wiek ..........................., oraz płytę CD−ROM z programem

ulica ................................................................................................................., ww. płytki zamawiam:

kod .........................., poczta .........................................................................,


❑ za darmo, gdyż jestem (wkrótce będę) prenumeratorem EdW,

Przyślijcie mi zaległe artykuły z:


❑ za pobraniem pocztowym (39zł 60gr + koszt wysyłki 12,5zł)

❑ EdW 2/2000, ❑ EdW 3/2000, ❑ EdW 4/2000,


❑ EdW 5/2000, ❑ EdW 6/2000, ❑ EdW 7/2000, Podpis ..................................................................., Data ..........................,
Jestem prenumeratorem EdW, mój numer prenumeratora:
Niniejsze „zgłoszenie „ można przesłać:
......................................................................., − pocztą na adres: AVT, ul. Burleska 9, 01−939 Warszawa
− faksem na numer: (0−22) 835−67−67 lub (0−22) 676−89−86
❑ Zamierzam wkrótce zostać prenumeratorem EdW, − e−mailem na adres: prenumerata@avt.com.pl

Uwaga, wszyscy studenci BASCOM College będący prenumeratorami EdW otrzymają 20% rabatu przy zakupie kitów AVT2500, AVT2501, AVT2502 w wersji B.

28 Elektronika dla Wszystkich

You might also like