Mikrokontrolery_ARM_cz21.pdf

(747 KB) Pobierz
095-099_arm_cz21.indd
KURS
Mikrokontrolery z rdzeniem ARM,
część 21
Przetwarzanie A/C i C/A
Przetwornik analogowo–
cyfrowy
Mikrokontrolery LPC2000, nie
wyróżniają się niczym szczególnym,
jeżeli chodzi o przetworniki A/C
i zawierają w sobie wszystko to, co
obecnie jest uważane za niezbędne
minimum w tej dziedzinie. Mniej-
sze mikrokontrolery LPC2131/2 oraz
LPC2141/2 posiadają jeden prze-
twornik, natomiast bardziej rozbudo-
wane (21x4/6/8) zawierają po dwa
przetworniki A/C. W starszej rodzi-
nie LPC213x każdy z przetworni-
ków posiada 8–kanałowy multiplek-
ser. W nowszych mikrokontrolerach
LPC214x dodatkowe linie zostały
wykorzystane do podłączenia inter-
fejsu USB, dlatego pierwszy prze-
twornik ADC0 posiada zmniejszoną
do 6 liczbę wejść, natomiast drugi
przetwornik pozostał 8–wejściowy.
Wszystkie przetworniki A/C posłu-
gują się trybem sukcesywnej aprok-
symacji, posiadają 10–bitową roz-
dzielczość i charakteryzują się cza-
sem przetwarzania 2,44 µs, można
więc powiedzieć ze ich parametry
są przeciętne. Błąd przetwarza-
nia przetwornika jest na poziomie
ostatnich dwóch bitów, a praktyczne
próby wykazały, że poziom szumów
jest stosunkowo niski w porówna-
niu z innymi mikrokontrolerami np.
ATmega8. Na rys. 63 przedstawiono
budowę wewnętrzną przetworników
A/C mikrokontrolerów LPC213x/
214x.
W otaczającym nas świecie posługujemy się głównie
wielkościami analogowymi, takimi jak temperatura,
napięcie, ciśnienie itd. Dlatego w systemach
mikroprocesorowych bardzo często zachodzi
potrzeba pomiaru wielkości analogowych, które
aby mogły być wykorzystane muszą być wcześniej przetworzone
na postać cyfrową. Czasami istnieje również potrzeba, aby sygnał
cyfrowy przetworzony przez system mikroprocesorowy zamienić
ponownie na postać analogową np. w celu wysterowania jakiegoś
układu wykonawczego. Do zamiany sygnału z postaci analogowej na
cyfrową i odwrotnie przetworniki A/C i C/A. Większość współczesnych
mikrokontrolerów o bardziej rozbudowanej architekturze posiada
wbudowany przetwornik A/C, oraz trochę rzadziej przetwornik C/A.
Na tle innych mikrokontrolerów możliwości analogowe LPC213x/214x
są raczej przeciętne, które w zależności od wersji zawierają do
dwóch 10–bitowych 8–kanałowych przetworników A/C oraz jeden
10–bitowy przetwornik C/A. Ponieważ mamy opanowane większość
układów peryferyjnych mikrokontrolerów LPC213x w ostatnim
odcinku kursu zajmować się będziemy przetwarzaniem sygnałów
analogowych.
Do każdego przetwornika podłą-
czony jest multiplekser umożliwiają-
cy, wybranie odpowiedniego kanału,
z którego wykonywane będzie prób-
kowanie. W tab. 7 przedstawiono
przyporządkowanie poszczególnych
linii wejściowych przetworników A/C,
linie zaznaczone kolorem szarym
występują tylko w mikrokontrolerach
4/6/8.
Jak wspomniano w jednym z po-
przednich odcinków każda linia I/O
prezentowanych mikrokontrolerów
może współpracować
z logiką 5 V, ale wyłącz-
nie w trybie GPIO. Gdy
linia I/O pełni rolę ana-
logowego wejścia prze-
twornika A/C, należy
pamiętać, aby nie pod-
łączać do niej napięcia
o wartości większej od
napięcia zasilającego mi-
krokontroler (3,3 V).
Przetworniki mikro-
kontrolera mogą praco-
wać w trybie pojedyn-
czego wyzwalania, gdzie
start przetwarzania wy-
znaczany jest w sposób
programowy, za pomocą ustawienia
odpowiednich bitów konfiguracyj-
nych. Początek przetwarzania może
być również inicjowany w sposób
sprzętowy za pomocą sygnału po-
chodzącego od bloków MAT ukła-
Tab. 7. Przyporządkowanie poszcze-
gólnych linii wejściowych przetwor-
ników A/C (linie zaznaczone kolorem
szarym występują tylko w mikrokon-
trolerach 21x4/21x6/21x8)
Wejście A/C LPC213x LPC214x
AD0.0 P0.27 –
AD0.1 P0.28 P0.28
AD0.2 P0.29 P0.29
AD0.3 P0.30 P0.30
AD0.4 P0.25 P0.25
AD0.5 P0.26 –
AD0.6 P0.4 P0.4
AD0.7 P0.5 P0.5
AD1.0 P0.6 P0.6
AD1.1 P0.8 P0.8
AD1.2 P0.10 P0.10
AD1.3 P0.12 P0.12
AD1.4 P0.13 P0.13
AD1.5 P0.15 P0.15
AD1.6 P0.21 P0.21
AD1.7 P0.22 AD1.7
Rys. 63. Budowa przetwornika A/C w mikrokontro-
lerach LPC213x/214x
Elektronika Praktyczna 8/2007
95
197732166.054.png 197732166.065.png
KURS
CLKDIV
SEL
110 – Przetwarzanie zostanie roz-
poczęte w wyniku wystąpienia zbo-
cza od układu porównującego licz-
nika MAT1.0
111 – Przetwarzanie zostanie roz-
poczęte w wyniku wystąpienia zbo-
cza od układu porównującego licz-
nika MAT1.1
EDGE – Bit ten określa rodzaj
zbocza, po którym nastąpi rozpoczę-
cie przetwarzania:
1 – Konwersja rozpocznie się
w momencie wystąpienia zbocza
opadającego.
0 – Konwersja rozpocznie się
w momencie wystąpienia zbocza na-
rastającego.
Mikrokontroler posiada bogate
możliwości konfiguracyjne, a rozpo-
częcie przetwarzania może odbywać
nie tylko w sposób programowy, ale
i również sprzętowy, co umożliwia
dokładną synchronizację z przetwa-
rzanym przebiegiem. Przetworniki
mikrokontrolera nie posiadają wbu-
dowanego źródła napięcia referen-
cyjnego, a napięcie to jest pobiera-
ne z pinu Vref. Najczęściej napięcie
Vref podłączamy do źródła napięcia
zasilającego część analogową mikro-
kontrolera, ale gdy zależy nam na
bardziej precyzyjnych pomiarach na-
leży podłączyć je do zewnętrznego
źródła napięcia referencyjnego. Jest
to małe niedopatrzenie ze strony
producenta mikrokontrolera, ponie-
waż nawet prosty 8–bitowy mikro-
kontroler ATmega8 posiada wbudo-
wane źródło referencyjne o wartości
2,5 V, co w niektórych zastosowa-
niach jest bardzo wygodne. Do
odczytywania wyników pomiarów
przetwarzania służy rejestr ADDR
AD0DR (0xE0034004) dla przetwor-
nika AD0 oraz AD1DR (0xE0064004 )
dla przetwornika AD1, którego mapę
bitową przedstawiono na rys. 65 .
A_VAL – Gdy bit DONE jest
ustawiony wówczas bity te zawie-
rają bitową reprezentację napięcia
występującego w danym kanale prze-
twornika.
CHN – Sprawdzając stan tych
bitów możemy określić, z którego
kanału pomiarowego pochodzi po-
miar. Odczytując je możemy okre-
ślić, z którego kanału pochodzi po-
miar i przepisać go do wybranej ko-
mórki pamięci.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EDGE START PDN CLK BURST
– – – – – – –
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Rys. 64. Rejestry ADC0CR i ADC1CR
dów czasowo–licznikowych, lub za
pomocą zboczy sygnału na odpo-
wiednich liniach CAP mikrokon-
trolera. Zapewnienie sprzętowego
wyzwalania umożliwia dokładne
określenie momentów próbkowania,
co ma istotne znaczenie w przy-
padku próbkowania niektórych syg-
nałów. Przetworniki A/C, mogą być
również skonfigurowane do pracy
w trybie ciągłym, gdzie po urucho-
mieniu sygnał wejściowy jest cały
czas próbkowany z możliwie naj-
większą częstotliwością. Informacja
o zakończeniu przetwarzania może
posłużyć do zgłoszenia przerwa-
nia. Skonfigurowanie odpowiedniego
trybu pracy przetwornika umożli-
wia rejestr ADCR , dla przetwornika
ADC0 ADC0CR (0xE0034000) na-
tomiast ADC1CR (0xE0064000) dla
przetwornika ADC1, którego bity
konfiguracyjne przedstawiono na
rys. 64 .
SEL – Stan tych bitów okre-
śla, które kanały będą próbkowane
i przetwarzane na postać cyfrową.
Każdy bit odpowiada za dany kanał
(0…7). W przypadku, gdy przetwa-
rzanie wykonywane będzie w sposób
programowy tylko jeden bit okre-
ślający kanał może być ustawiony,
natomiast w przypadku sprzętowego
przetwarzania można określić więk-
szą ilość kanałów, które będą prze-
twarzana na postać cyfrową. Na
przykład ustawienie przetwornika
w tryb ciągłej konwersji i ustawienie
bitów 1, 3, 5 spowoduje cykliczne
przetwarzanie wartości z kanałów
AD1, AD3 i AD5.
CLKDIV – Bity te umożliwia-
ją ustawienie częstotliwości taktu-
jącej przetwornik. Częstotliwość tą
można wyznaczyć według wzoru:
F ADC =(F pclk /CLKDIV)+1, gdzie F pclk
jest częstotliwością taktującą syg-
nały peryferyjne. Aby przetwornik
pracował prawidłowo częstotliwość
taktowania musi być mniejsza od
4,5 MHz.
BURST – Ustawienie tego bitu
powoduje rozpoczęcie przetwarzania
cyklicznego z wszystkich kanałów
ustawionych przez bity SEL. Cy-
kliczne przetwarzanie trwa, aż do
momentu skasowania tego bitu. Aby
uruchomić ten tryb musimy pamię-
tać, aby bity START miały wartość
000, gdyż w przeciwnym przypadku
tryb przetwarzania cyklicznego nie
zostanie w ogóle włączony.
CLKS – Bity te umożliwiają
ustalenie ilości cykli przetwornika
podczas przetwarzania danych, a co
z tym się wiąże ustalenie rozdziel-
czości przetwornika. W przypadku,
gdy CLKS jest równe 000 wówczas
przetwornik posiada 10–bitową roz-
dzielczość, a przetwarzanie zajmuje
11 cykli przetwornika (F adc ), nato-
miast, gdy CLKS jest równe 111,
wówczas przetwarzanie trwa 4 cy-
kle przetwornika, a jego rozdziel-
czość wynosi 3 bity.
PDN – Ustawienie tego bitu za-
łącza przetwornik A/C, natomiast
jego wyzerowanie powoduje wyłą-
czenie przetwornika.
START – Stan tych bitów okre-
śla, sposób rozpoczęcia przetwa-
rzania przez przetwornik A/C, na
przykład w sposób programowy,
lub poprzez zdarzenie od układu
czasowo–licznikowego:
000 – Przetwarzanie zatrzymane
001 – Przetwarzanie zostanie
rozpoczęte natychmiast (wyzwalanie
programowe)
010 – Przetwarzanie zostanie
rozpoczęte w momencie pojawienia
się zbocza na linii P0.16
010 – Przetwarzanie zostanie
rozpoczęte w momencie pojawienia
się zbocza na linii P0.22
100 – Przetwarzanie zostanie
rozpoczęte w wyniku wystąpienia
zbocza od układu porównującego
licznika MAT0.1
101 – Przetwarzanie zostanie
rozpoczęte w wyniku wystąpienia
zbocza od układu porównującego
licznika MAT0.3
DONE OV … – CHN … –
A_VAL
… –
31 30 … 27 26 25 24 … 16 15 14 13 12 11 10 9 8 7 6 … 0
Rys. 65. Rejestr AD1DR
96
Elektronika Praktyczna 8/2007
197732166.076.png 197732166.087.png 197732166.001.png 197732166.006.png 197732166.007.png 197732166.008.png 197732166.009.png 197732166.010.png 197732166.011.png 197732166.012.png 197732166.013.png 197732166.014.png 197732166.015.png 197732166.016.png 197732166.017.png 197732166.018.png 197732166.019.png 197732166.020.png 197732166.021.png 197732166.022.png 197732166.023.png 197732166.024.png 197732166.025.png 197732166.026.png 197732166.027.png 197732166.028.png 197732166.029.png 197732166.030.png 197732166.031.png 197732166.032.png 197732166.033.png 197732166.034.png 197732166.035.png 197732166.036.png 197732166.037.png 197732166.038.png 197732166.039.png 197732166.040.png 197732166.041.png 197732166.042.png 197732166.043.png 197732166.044.png 197732166.045.png 197732166.046.png 197732166.047.png
 
KURS
Rys. 66. Sposób dołączenia do
mikrokontrolera testowego czujnika
temperatury
niu) zostanie wyświetlona rezystan-
cja czujnika.
Pomiary przetwornikiem A/C
będą inicjalizowane w sposób pro-
gramowy i nie będziemy używać
przerwań tylko oczekiwać w pętli
na zakończenie przetwarzania. Pro-
gram przedstawiono na list. 13 .
Do inicjalizowania ustawień czuj-
nika służy funkcja initADC (), której
jedynym zadaniem jest ustawienie
częstotliwości taktującej mikrokon-
troler na wartość 1 MHz, włącze-
nie przetwornika A/C oraz ustawie-
nie w rejestrze PINSEL1 linii portu
P0.28 i P0.29 tak aby pełniły rolę
wejścia przetwornika. Do odczyty-
wania wartości napięcia za pomocą
przetwornika służy funkcja getADC(),
której argumentem jest numer ka-
nału z którego chcemy odczytać
wartość napięcia. W funkcji tej naj-
pierw wybierany jest numer kanału
(w trybie pojedynczego próbkowania
może to być tylko jeden kanał),
oraz ustawiany jest bit START roz-
poczynający przetwarzanie. Następ-
nie funkcja czeka w pętli while na
ustawienie bitu DONE, będącego in-
formacją o zakończeniu przetwarza-
nia. Ostatnią czynnością jest zwró-
cenie przez funkcję wartości zmie-
rzonego napięcia. W funkcji main
inicjalizowany jest port szeregowy
(9600 bd), wypisywany jest komu-
nikat startowy, oraz inicjalizowa-
ny jest przetwornik A/C. Następnie
program przechodzi do wykonania
pętli głównej, w której wykonywane
są pomiary z kanału czujnika tem-
peratury (AD2), oraz potencjometru
(AD1), wartości te są przeliczane na
napięcie i rezystancje, oraz wyświet-
lane za pomocą funkcji printf . Na
końcu pętli umieszczona jest pętla
opóźniająca tak, więc pomiary wy-
świetlane są z częstotliwością około
1 Hz. Wykonanie pomiarów z wy-
korzystaniem przetworników A/C
jest bardzo proste, i sprowadza się
do obsługi dwóch rejestrów. Czy-
telników zachęcam do wykonania
samodzielnego ćwiczenia polega-
jącego na rozwinięciu programu
o wyświetlanie rzeczywistej tempe-
ratury a nie rezystancji czujnika, co
można w prosty sposób wykonać za
pomocą aproksymacji wielomiano-
wej. W rzeczywistym programie po-
sługiwanie się przetwornikiem A/C,
OV – Bit ten wykorzystywany
jest w trybie ciągłych pomiarów
i jego ustawienie oznacza, że po-
przednia wartość nie została odczy-
tana przed wykonaniem kolejnego
pomiaru i w związku z tym zosta-
ła utracona. Skasowanie tego bitu
następuje automatycznie w wyniku
odczytania tego rejestru.
DONE – Bit ten oznacza za-
kończenie wykonywania pomiarów
przez przetwornik A/C, i jest on
automatycznie zerowany w wyniku
odczytania tego rejestru, lub zapi-
su do rejestru sterującego. Odczy-
tując ten bit możemy stwierdzić,
że rejestr ADDR zawiera prawidło-
wy wynik pomiaru.
Na podstawie zawartości bi-
tów CHN , możemy określić kanał,
z którego pochodzi wynik pomiaru,
natomiast wartość napięcia wystę-
pującego w tym kanale przetwor-
nika możemy wyznaczyć według
wzoru: U out =V ref *(A_VAL/1023).
Zestaw rejestrów mikrokontrolera
LPC213x umożliwiający podstawo-
wą obsługę przetworników A/C jest
niewielki, a posługiwanie się nimi
jest bardzo proste. Po zapoznaniu
się z podstawowymi rejestrami mi-
krokontrolerów LPC213x możemy
przejść do napisania bardzo pro-
stego programu (udostępniamy jego
źródło na CD–EP8/2007B, w pliku
ep9a.zip ), który w sposób progra-
mowy będzie dokonywał pomiaru
napięć analogowych i wyświetlał je
na terminalu. Do linii AD1 w ze-
stawie ZL9ARM podłączony jest
potencjometr umożliwiający usta-
wienie napięcia, którego zawartość
zostanie bezpośrednio wyświetlona
na terminalu. Do linii AD2 nato-
miast podłączony jest dzielnik na-
pięcia, którego jedna gałąź stanowi
rezystancyjny czujnik temperatury
KTY82 ( rys. 66 ) więc zamiast na-
pięcia na terminalu (po przelicze-
List. 13. Program obsługi przetwornika A/C
#include „lpc213x.h”
#include „uart.h”
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define P028_ADC01_SEL (1<<24)
#define P029_ADC02_SEL (1<<26)
/* Initialize ADC */
inline static void initADC(void)
{
AD0CR = 60<<AD0CR_CLKDIV_BIT | 1<<AD0CR_PDN_BIT;
PINSEL1 |= P028_ADC01_SEL | P029_ADC02_SEL;
}
/* Get ADC Value */
int getADC(int Chan)
{
AD0CR &= ~AD0CR_SEL_MASK;
AD0CR |= 1<<Chan & AD0CR_SEL_MASK;
AD0CR |= 1<<AD0CR_START_BIT;
while(!(AD0DR & AD0DR_DONE));
return (AD0DR >> 6) & 0x3FF;
}
/* Funkcja glowna main */
int main(void)
{
//Inicjalizacja UART
Uart0Init(UART_BAUD(9600));
//Napis zachety
printf(„Mikrokontrolery z rdzeniem ARM cz IX\r\n”);
printf(„Przetwornik A/C (Czujnik temperatury)\r\n”);
initADC();
int kty,pot;
const float Vref = 3.3;
while(1)
kty = getADC(2);
pot = getADC(1);
printf(„Vpot = %.2f V\r\n”,(pot/1023.0)*Vref);
float Ukty = (kty/1023.0)*Vref;
printf(„Rkty = %.2f kOhm\r\n”,Ukty/(Vref–Ukty));
for(volatile int i=0;i<1000000;i++);
}
return 0;
}
Elektronika Praktyczna 8/2007
97
197732166.048.png
KURS
Rys. 67. Tryb pracy ciągłej przetwornika A/C
ny jest kanał,
z którego po-
chodzi po-
miar, i w za-
leżności od
tego wynik
pomiaru prze-
kazywany jest
do zmiennej
AdcKty lub
AdcPot . Na
zakończenie
procedury ob-
sługi wysy-
łana jest in-
formacja do
kontrolera
przerwań VIC
informująca
o zakończeniu procedury obsługi.
Funkcja główna programu ( main ),
inicjalizuje port szeregowy (9600
bd), wyświetla komunikat infor-
macyjny, a następnie konfiguruje
kontroler przerwań VIC, tak, aby
przerwanie od przetwornika AD0
zakwalifikowane zostało jak wekto-
ryzowane. Następnie inicjalizowany
jest przetwornik A/C za pomocą
funkcji initADC() , w której włączany
jest przetwornik, ustalana jest czę-
stotliwość pracy przetwornika, oraz
wybierane są kanały biorące udział
w pomiarze ciągłym. Ustawiane są
także funkcje alternatywne portów,
tak, aby pełniły rolę wejść A/C. Na
końcu ustawiany jest bit BURST
i od tego momentu przetwornik
rozpoczyna ciągłe przetwarzanie
zgłaszając przerwania, natomiast
program główny wchodzi w pętlę
nieskończoną, w której co sekun-
dę przelicza i wyświetla zawartość
zmiennych AdcKty , AdcPot . Zmien-
ne te są w sposób automatyczny
aktualizowane przez procedurę ob-
sługi przerwania przetwornika A/C.
Program główny bezpośrednio nie
wykonuje pomiarów przetworni-
kiem A/C a wszystko odbywa się
w sposób automatyczny. Obsługa
przetwornika A/C w trybie ciągłym
z wykorzystaniem systemu przerwań
jest niewiele bardziej skomplikowa-
na, a uwalnia program główny od
zajmowania się przetwornikiem. Jak
już wcześniej wspomniano większe
mikrokontrolery LPC2134(2144)/6/8
posiadają wbudowane dwa prze-
tworniki analogowo–cyfrowe, dlate-
go wprowadzono w nich dodatkowy
rejestr ADGSR (0xE0034008) , który
umożliwia równoczesne rozpoczęcie
wykonywania pomiarów przez oba
przetworniki AD0 i AD1. Mapę bi-
tową rejestru ADGSR przestawiono
na rys. 68 .
Poszczególne bity mają takie
same znaczenie w rejestrach AD0CR
i AD1CR , poszczególnych przetwor-
ników, z tym, że wykonywane na
nim operacje odnoszą się do obu
przetworników równocześnie, co
umożliwia ich synchronizację. Wy-
korzystanie trybu ciągłego, powo-
duje, że przerwania są zgłaszane
przez przetwornik bardzo często
wraz z zakończeniem każdego prze-
twarzania. Zadaniem program obsłu-
gi przerwania jest przepisanie wy-
nik przetwarzania każdego kanału
do odpowiedniej komórki pamięci,
co jest rozwiązaniem stosunkowo
nie efektownym. Dużo lepiej było-
by wyposażyć przetwornik w dodat-
kowy zestaw rejestrów umożliwiają-
cych przechowywanie danych po-
miarowych z poszczególnych kana-
łów, a przerwanie zgłaszać dopiero
w momencie wykonania wszystkich
pomiarów. Konstruktorzy Philipsa
zauważyli ten problem i nowsze
mikrokontrolery rodziny LPC214x,
wyposażyli w zestaw dodatkowych
rejestrów, umożliwiających zgłasza-
nie przerwań przez poszczególne
kanały niezależnie, oraz dodatkowe
rejestry przechowujące wyniki po-
miarów z poszczególnych kanałów.
Zastosowanie rozszerzonego zesta-
bez systemu przerwań nie jest
zbyt wygodne, zwłaszcza, gdy za-
leży nam na wykonaniu na bieżą-
co pomiarów z kilku kanałów, oraz
wykonywaniu równolegle innych
czynności. W takiej sytuacji należy
wykorzystać możliwość zgłaszania
przerwań. W przetwornikach A/C
nie występuje specjalny rejestr ste-
rujący przerwaniami, i są one zgła-
szane do kontrolera VIC zawsze
w momencie ustawienia bitu DONE.
Aby się nimi posługiwać wystarczy,
odblokować przerwanie AD0 lub
AD1 w kontrolerze przerwań. Na
CD–EP8/2007 umieściliśmy program,
który podobnie jak poprzednio do-
konuje pomiaru napięcia potencjo-
metru, oraz rezystancji czujnika
temperatury, ale zamiast programo-
wego sterowania przetwornikiem
posłużono się tutaj ciągłym trybem
pracy oraz przerwaniami.
W programie tym przetwornik po
zakończeniu przetwarzania automa-
tycznie zgłasza przerwanie, zmienia
kanał pomiarowy na następny, oraz
automatycznie rozpoczyna wykony-
wanie nowego pomiaru, co przed-
stawiono na rys. 67 .
Kanały, w których będą wykony-
wane pomiary ustalane są za po-
mocą bitów SEL w rejestrze ADCR.
Jest to jest jedyny tryb pracy prze-
twornika, w którym można ustawić
więcej niż jeden bit w polu SEL.
W momencie zgłoszenia przerwania
program obsługi powinien określić
numer kanału, z którego pocho-
dzi wartość zmierzona (bity CHN),
oraz umieścić wynik przetwarzania
w odpowiedniej zmiennej. W naszym
przypadku za obsługę przerwania
od przetwornika odpowiada funkcja
AdcIrq , w której najpierw sprawdza-
– – – – – – – – – – – – – – –
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EDGE START PDN CLK BURST
– – – – – – –
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Rys. 68. Rejestr ADGSR
– … ADINT OVERRUN DONE
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
31 … 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Rys. 69. Rejestr AD1STAT
98
Elektronika Praktyczna 8/2007
197732166.049.png 197732166.050.png 197732166.051.png 197732166.052.png 197732166.053.png 197732166.055.png 197732166.056.png 197732166.057.png 197732166.058.png 197732166.059.png 197732166.060.png 197732166.061.png 197732166.062.png 197732166.063.png 197732166.064.png 197732166.066.png 197732166.067.png 197732166.068.png 197732166.069.png 197732166.070.png 197732166.071.png 197732166.072.png 197732166.073.png 197732166.074.png
KURS
– … ADGINTEN ADINTEN
7 6 5 4 3 2 1 0
31 … 8 7 6 5 4 3 2 1 0
Rys. 70. Rejestr AD1INTEN
wu rejestrów umożliwia sterowanie
każdym kanałem niezależnie. Do
sprawdzania statusu poszczegól-
nych kanałów służy rejestr ADSTAT
(AD0: AD0STAT 0xE0034004 AD1:
AD1STAT 0xE0060004 ), którego
poszczególne bity przedstawiono na
rys. 69 .
DONE7...DONE0 – Bity te po-
dobnie jak globalny bit DONE in-
formują o zakończeniu wykonywa-
niu pomiarów w poszczególnych
kanałach pomiarowych AD0..AD7,
oraz o tym, że w rejestrze kanału
danego pomiaru znajduje się pra-
widłowa wartość wyniku pomiaru.
OVERRUN0…OVERRUN7 – Bity
te podobne jak globalny bit OV
informują, o tym, że w danym re-
jestrze kanału poprzednia wartość
pomiarowa nie została odczyta-
na przed zakończeniem bieżącego
przetwarzania, i została nadpisana
przez nową wartość.
ADINT – Flaga zgłoszenia prze-
rwania do kontrolera VIC, usta-
wiana w stan 1 w momencie, gdy
przetwornik zgłasza przerwanie.
Sprawdzając stan tego rejestru
mamy, globalny pogląd na stan
przetwarzania wszystkich kanałów
pomiarowych przetwornika. Ko-
lejnym rejestrem umożliwiającym
maskowanie przerwań z poszczegól-
nych kanałów jest rejestr ADINTEN
(AD0: AD0INTEN 0xE003400C
AD1: AD1INTEN 0xE006000C ),
którego mapę bitową przedstawio-
no na rys. 70 .
ADINTEN0...ADINTEN7 – Usta-
wienie danego bitu powoduje
możliwość zgłaszania przerwania
przez określony kanał przetwornika
w momencie zakończenia przetwa-
rzania, i jest flagą zezwolenia na
przerwanie, natomiast wyzerowanie
odpowiedniego bitu powoduje za-
blokowanie zgłaszania przerwania
od określonego kanału.
ADGINTEN – Ustawienie tego
bitu w stan 1 powoduje, że tylko
flaga globalnego zgłoszenia prze-
rwania powoduje generowanie
przerwania, co jest zgodne z try-
bem kompatybilności ze starszym
bratem LPC213x, natomiast jego
wyzerowanie umożliwia zgłaszanie
przerwań przez poszczególne kana-
ły, których maskę zezwoleń okre-
ślają bity ADINTEN0…ADINTEN7.
Po wyzerowaniu mikrokontrolera
bit ten jest ustawiony w stan 1, co
zapewnia tryb kompatybilności ze
starszymi modelami.
W mikrokontrolerach LPC213x,
nie było żadnych rejestrów kon-
trolujących przerwania, ponieważ
przetwornik potrafił zgłaszać tylko
jedno przerwanie w momencie za-
kończenia wykonywania przetwa-
rzania. Tutaj natomiast stało się
konieczne wprowadzenie dodatko-
wego rejestru konfiguracyjnego, po-
nieważ każdy kanał przetwornika
może zgłaszać osobno przerwanie
po zakończeniu wykonania pomia-
ru. Do przechowywania wyników
pomiarów z poszczególnych kana-
łów służą rejestry ADDR0…ADDR7 ,
których mapę bitów przedstawiono
na rys. 71 .
Znaczenie poszczególnych bitów
jest takie samo jak w globalnym
rejestrze ADDR, jednak został on
pozbawiony bitów CHN pozwalają-
cych odczytać numer kanału, po-
nieważ kanał jest tutaj ściśle okre-
ślony przez nazwę rejestru. Warto
tutaj wspomnieć ze rejestr ADDR
w LPC214x został przemianowany
na ADGDR i został zachowany dla
kompatybilności z poprzednimi mi-
krokontrolerami. Zastosowanie do-
datkowych rejestrów dla przecho-
wywania pomiarów pozwala na-
pisać program w taki sposób, aby
dopiero po zakończeniu przetwa-
rzania przez wszystkie interesują-
ce nas kanały było zgłaszane prze-
rwanie. Czytelników posiadających
nowszy zestaw ewaluacyjny z mi-
krokontrolerem LPC214x zachęcam
do poprawienia ostatniego przykła-
du w taki sposób, aby wykorzystać
nowe możliwości mikrokontrolerów
LPC214x.
Lucjan Bryndza, EP
lucjan.bryndza@ep.com.pl
DONE OV … –
RESULT
… –
31 30 … 16 15 14 13 12 11 10 9 8 7 6 … 0
Rys. 71. Rejestry ADDR0…ADDR7
Elektronika Praktyczna 8/2007
99
197732166.075.png 197732166.077.png 197732166.078.png 197732166.079.png 197732166.080.png 197732166.081.png 197732166.082.png 197732166.083.png 197732166.084.png 197732166.085.png 197732166.086.png 197732166.088.png 197732166.089.png 197732166.090.png 197732166.091.png 197732166.092.png 197732166.093.png 197732166.094.png 197732166.095.png 197732166.096.png 197732166.097.png 197732166.002.png 197732166.003.png 197732166.004.png 197732166.005.png
 
Zgłoś jeśli naruszono regulamin