CLKS |
Rozdzielczość |
Liczba |
ADC |
cykli zegara | |
ooc |
10 |
11 |
001 |
9 |
10 |
01 c |
6 |
9 |
011 |
7 |
8 |
I0C |
6 |
7 |
101 |
5 |
6 |
'1(J |
4 |
5 |
111 |
3 |
4 |
Tabela 2
dynkc logiczną na któreś z pól 7:0. Wpiszemy jedynkę do pola SEL.O, bo wyjście toru analogowego jest podłączone do wejścia AD0.0. Następnie trzeba określić dzielnik częstotliwości dla zegara A DC. Otrzymamy go z następującego wzoru:
DI V - wartość, którą wpiszemy do rejestru, PCLK częstotliwość taktowania przetwornika, jak pamiętamy jest ona równa częstotliwości taktowania rdzenia i wynosi 11,0592 Ml IZ * 5,
fi - częstotliwość próbkowania, określa ile razy w ciągu sekundy zmierzymy sygnał z toru analogowego. W naszym urządzeniu będzie to 40kllz, czyli 40000. Ta wartość nic została wzięta ,jz sufitu”, omówimy to zagadnienie za moment,
r - liczba cykli potrzebnych do wykonania pomiaru, dla rozdzielczości 10 bitów (tylko taka jest dostępna w trybie programowym), r= 11. a - magiczny w spółczynnik. Jest to poprawka na czas zabierany przez program na obliczenia odczyt z rejestrów i wysyłanie do pamięci.
Po podstawieniu do wzoru parametrów otrzymamy wartość 125. Doświadczalnie stwierdziłem, że wartość ta powinna być mniejsza i wynosić 104, czyli a™21.
Pytanie: jak doświadczalnie stwierdzić czy ukłąd reaguje na dźwięki o określonej częstotliwości? Można wykorzystać oscyloskop i generator, choć nie każdy hobbysta może sobie na te urządzenia pozwolić Istnieje jeszcze jeden skuteczny, ale mniej dokładny sposób. Wykorzystałem go podczas uruchamiania urządzenia: z Internetu można pobrać darmowy program Wini SD. Ma on wbudowany moduł generatora dźwięków - wybieramy 10001 Iz i sprawdzamy, czy czerwona dioda się świeci. Następnie przesuwamy o 1001 Iz w górę i w dół - gdy najsilniej będzie świecić dla 1000Hz. to wszystko powinno być dobrze. Podobnie można wypróbować pozostałe częstotliwości. Należy mieć jednak na uwadze, że im w iększa częstotliwość dźwięku, tym gorzej jest przenoszona przez tor audio. Wynika to z charakterystyki mikrofonu, który najlepiej reaguje na pasmo w kranicach kilku kilohcrców.
Bit PDN jest odpowiedzialny za włączenie przetwornika, trzeba tu wpisać jedynkę logiczną, aby włączyć układ ADC.
Bity START służą do wyboru sposobu rozpoczęcia pomiaru. Oznacza to. że istnieje kilka możliwości rozpoczęcia pomiaru: np. poprzez podanie zbocza HL lub LH na P0.22, MAT0.1, etc. (zależnie od bilu EDGE). W tej chwili nic tam nie wpisujemy, pomiar będziemy rozpoczynać instrukcją:
ADO CR |= (1«24): //rozpocznij pomiar
Wpisanie jedynki logicznej do 24 bitu spowoduje natychmiastowy pomiar na kanale wybranym poprzez rejestr SEL.
To tyle, jeżeli chodzi o konfigurację ADC w trybie programowym. Chciałbym pokazać dla ciekawości, jak uruchamia się tryb sprzętowy i jak on funkcjonuje. Włączenie tego trybu polega na wpisaniu jedynki na pozycję BURST w omawianym rejestrze ADO JOR. Zmieni się znaczenie pola SEL — możemy wpisać dowolną ilość jedynek. Na każdym kanale, dla którego korespondencyjny bit jest ustawiony, będzie wykonywany pomiar. Po dokonaniu pomiaru wynik jest umieszczany w rejestrze danych, skąd można go odczytać i rozpoczyna się konwersja na kolejnym kanale. Po zmierzeniu wartości na wszystkich kanałach cały proces rozpoczyna się od początku. Trzeba pamiętać, że wpisać jedynkę do BURST można tylko wtedy, gdy w polach START jest wartość 0. Teraz można zmodyfikować rozdzielczość przetwornika polami CLKS (tabela 2).
W rejestrze ADOGDR umieszczany jest rezultat ostatniego pomiaru razem z informacją o numerze kanału, na którym dokonano pomiaru. Wykorzystamy jednakże specjalne „lustra” - rejestry przypisane do każdego kanału i zawierające wynik pomiaru tylko z tego kanału. Ich identyfikator to 4DO_DRO..ADO_DR7 Wynik pomiaru zapisany jest na bitach 6.. 15, natomiast bit 31 jest ustawiany, gdy w rejestrze jest nowy pomiar (kasowany przy odczycie rejestru). Cała procedura obsługi przetwornika wygląda następująco:
A DO JER |= (l«24) : //rozpocznij pomiar while((ADO DRO cfi <l«31))==0j {;)//cze-kaj na zakończenie
data [licz] = ((AD0_DR0»8)&OxFF) ; f/zcipis pomiaru
Ostatnia instrukcja wytraca niepotrzebne bity (ADC0_DR0»8) i ignoruje bity niebę-dące rezultatem pomiaru (&0xFFj.
Kilka słów o komunikacja poprzez interfejs RS232. W program wbudowano moduł programowy odpowiedzialny za komunikację z komputerem. Zintegrowano go 7 oprogramowaniem ilu-mmofonii. Wykorzystuje on ten sam port co programator. Chcąc włączyć ten moduł do swoich programów. musisz wykonać trzy rzeczy.
Po pierwsze, skopiować pliki rs232.cpp oraz rs232 h do katalogu z programem. Następnie dołączyć bibliotekę do programu instrukcją:
Hinclude ,, rs232. h ”
I na końcu zmodyfikować plik rnakefile. Znajdź w nim linijkę
zaczynającą się od: CPPSRC i dopisz na końcu (po spacji) rs232.cpp. Jeżeli plik nie znajduje się w tym samym katalogu co main;cpp, to trzeba dodać jeszcze nazwę katalogu, np. ir,ne/rs232.cpp.
Teraz można komunikować sie z komputerem PC poprzez port szeregowy. Polecenie port « „Jakiś teks!” « zmienna « 112 « zmienna ;
wysyła dane do komputera. W działaniu jest bardzo podobne do standardowego polecenia języka (J-H-: cant.
Drugie polecenie: zmienna port.czytaj/) ; odbiera znak z portu komputera.
Pozostaje pytanie z jaką prędkości pra cuje port? Odpowiedź: dowolną! Mikrokontrolery mają wbudowany moduł uutomatycz nej synchronizacji, która zwalnia programistę z konieczności żmudnego wyliczania dzielni ka częstotliwości. Po uruchomieniu terminalu (o którym za chwilę) wfybierz prędkość, wyślij sekwencję „ATAT” i... już.
Jest jeszcze jedna instrukcja, mianowicie: portO;
która zwraca jedynkę, gdy port jest gotowy do pracy. Można ją wykorzystać do oczekiwania na konfigurację portu. np. whiie(!port()){ ■} ://czekam na komendą A TA T
Dwie uwagi. Po pierwsze, komendę ATAT należy wysłać w miarę szybko, gdyż pojawiające się czasami zakłócenia są odbierane przez port i ustawiana jest zła prędkość. Drugim ograniczeniem jest częstotliwość taktowania rdzenia: musi ona być kilkanaście razy większa niż prędkość układu UART. Przy ponad 50MHz nie ma z tym problemów.
TERMINAL
- nasz ARMkomunikator
Po rozpakowaniu środowiska WinARM okazuje się, że dołączono do mego dość interesujący program: terminal do komunikacji poprzez RS232. Jest on w katalogu:
C: \winarm' ulils\bin 1 Terminal. exe.
Okno programu można zobaczyć na rysunku 9. Na początku trzeba wybrać prędkość i podłączyć się do portu: wybierz jedną z dostępnych prędkości i kliknij przycisk eon-nect. Teraz wpisujemy nasz komunikat do synchronizacji (ATAT) i go wysyłamy. Przed rozpoczęciem zapisu nowego oprogramowa-
16 Grudzień 2006 Elektronika dla Wszystkich