MIKROPROCESORY – architektura i programowanie Piotr MALECKI
Transkrypt
MIKROPROCESORY – architektura i programowanie Piotr MALECKI
MIKROPROCESORY – architektura i programowanie Piotr MALECKI WEWNĘTRZNE UKŁADY PERYFERYJNE (µ-kontrolerów rodziny 51) nazwa jest trochę osobliwa, ale dobrze oddaje to, co jest najważniejszą cechą mikro-kontrolerów: jednoukładowość przy bogatym wyposażeniu Wyposażenie mikro-kontrolerów w przetworniki analogowo-cyfrowe i cyfrowo-analogowe można uznać za jedno z najważniejszych osiągnięć w ich rozwoju. Nasz przykładowy CISC: ADuC812 jest wyposażony w 8-mio kanałowy 12-to bitowy przetwornik analogowo-cyfrowy i dwa 12-to bitowe przetworniki cyfrowo-analogowe (DAC0 i DAC1). Dane z postaci cyfrowej można skonwertować do formy analogowej za pomocą wzmacniacza pracującego w trybie układu sumującego. Najczęściej wymienia się dwa układy dla tego typu konwersji. Układ (rys.1.) z zestawem oporników, których wartość stanowi wagę z jaką wartość odpowiadająca danemu bitowi wchodzi do sumy wyniku. Układ ten ma znaczne wady, głównie wynikające z potrzeby stosowania precyzyjnych oporników, o wartościach z szerokiego zakresu, gdy układ miałby być stosowany dla wielobitowych konwersji. Dla 12-bitowych danych największy opornik miałby wartość 2048 razy większą niż najmniejszy. Powszechnie stosuje się, przedstawiony na rys.2. układ „drabinki R-2R”. Rys. 1. Układ konwersji DAC z „ważonymi” opornikami Rys. 2. Układ konwersji DAC „z drabinka R-2R” 1/10 MIKROPROCESORY – architektura i programowanie Piotr MALECKI PRZETWORNIKI CYFROWO-ANALOGOWE (DAC). Przetworniki cyfrowo-analogowe w AduC812 pracują na tym samym napięciu odniesienia co ADC (opisane poniżej). Przetworniki te wykazują znany efekt nieliniowości przy końcach zakresu konwersji. Poza tymi niewielkimi zakresami ( po kilkadziesiąt mV) wykazują dobrą liniowość i stabilność. Konwersja wartości cyfrowej, ustawionej w odpowiednich rejestrach sterujących pracą przetworników, następuje natychmiastowo (w odróżnieniu od konwersji analog-cyfra, która jest stosunkowo powolnym procesem iteracyjnym). Dwa, w znacznym stopniu niezależne, DAC0 l DAC1 mogą być ustawiane niezależnie lub synchronicznie. 2/10 MIKROPROCESORY – architektura i programowanie Piotr MALECKI Przetworniki cyfrowo-analogowe (DAC) Nasz przykładowy mikro-kontroler AduC812 wyposażony jest w dwa przetworniki DAC. REJESTRY ZARZĄDZJĄCE PRACĄ DAC TO KONTROLNY REJESTR DACCON ORAZ REJESTRY DANYCH: DACCON rejestr SFR o adresie FDH MODE RNG1 7 6 RNG0 5 CLR1 4 CLR0 3 SYNC 2 PD1 1 PD0 0 Bit MODE wybiera pracę DAC-ów jako 8-mio bitowe (MODE=1) lub 12-to bitowe. Bity RNG wybierają zakres sygnałów wyjściowych dla każdego DAC z osobna. RNG = 1 wybiera zakres 0 – Vdd (napięcie zasilania), RNG = 0 wybiera zakres 0 – Vref. CLR powinny być ustawione na 1 dla normalnej pracy DAC. Wartość zero forsuje zero sygnału na wyjściu. SYNC ustawiony na 1 oznacza, że sygnał wyjściowy pojawia się natychmiast po ustawieniu młodszego rejestru danych (DAC0L lub DAC1L). Jest to praca asynchroniczna. Gdy chcemy, by analogowe sygnały wyjściowe pojawiły się równocześnie, wtedy bit SYNC ustawiamy na zero. Wtedy wpisanie wartości do DAC0L ani do DAC1L nie wyzwala ustawienia wyjścia. Dopiero postawienie bitu SYNC na 1 wyznacza moment jednoczesnego ustawienia analogowych linii wyjściowych procesora. Rejestry DAC0H i DAC1H służą oczywiście do wpisywania czterech starszych bitów danych i powinny, przy pracy asynchronicznej być wypełniane PRZED wpisaniem wartości do DAC0L/1L. 3/10 MIKROPROCESORY – architektura i programowanie Piotr MALECKI Przetworniki analogowo-cyfrowe - (ADC) Istnieje wiele metod konwersji analogowo-cyfrowych. Wśród najczęściej stosowanych wylicza się metodę bezpośrednią (flash ADC), metodę kolejnych przybliżeń, metody całkowe oraz tzw. metodę Sigma-Delta. Wspólnym dla różnych technik konwersji, jest zapewnienie niezakłóconego próbkowania sygnału analogowego oraz zapewnienie jego stabilności na czas przeprowadzania konwersji. Tę stabilność realizuje się często przez włączenie w układ konwertera bloku S/H – sample and hold (pobierz i przechowaj). Przetworniki ADC w mikro-kontrolerach ADuC812 wykorzystują technikę kolejnych przybliżeń. Konwersja ta opiera się na porównywaniu sygnału analogowego z przetworzonym przez wewnętrzny DAC cyfrowym przybliżeniem generowanym krok po kroku przez zegar napełniający rejestr przybliżenia, SAR. W pierwszym kroku DAC ładuje się najstarszym bitem. Bit pozostaje ustawiony, gdy wyjście z DAC nie przekracza sygnału. W przeciwnym razie bit jest zerowany. W następnych taktach ustawiane (oraz ewentualnie zerowane) są kolejne bity. Liczba taktów zegara potrzebnych dla pełnej konwersji nieznacznie przekracza liczbę bitów przetwornika. Schemat blokowy ADC pracującego techniką kolejnych przybliżeń 4/10 MIKROPROCESORY – architektura i programowanie Piotr MALECKI Schematyczny układ przetwornika analogowo-cyfrowego z ADuC812 przedstawia rysunek (wzięty, jak część rysunków w tych notatkach z Data Sheet for AduC812, Rev E. www.analog.com). Konwersja sygnału analogowego, podawanego na linię wejściową procesora, sterowna jest zegarem, którego częstotliwość wynika z częstości zegara procesora i dzielnika, wybieranego programowo. Zalecany zakres częstotliwości pracy ADC: 400kHz – 4 MHz (ADuC812). Przełączaniem kanałów steruje program, odnosząc się do odpowiednich rejestrów SFR. Niewielka pojemność wejściowa, reprezentowana na rysunku kondensatorem 2 pF, może wnosić pewien błąd pomiarowy przy szybkim przełączaniu kanałów. Przy zalecanym zakresie częstotliwości i zapewnieniu małej oporności wyjściowej źródła (poniżej 60 Ω) błąd jest zaniedbywalny. Jeśli warunek małej stałej czasowej jest niezachowany, to ograniczenie szybkości przełączania należy do programisty. 5/10 MIKROPROCESORY – architektura i programowanie Piotr MALECKI Zdolność rozdzielczą ADC wyznacza liczba bitów wyniku konwersji oraz napięcie odniesienia (referencja). Maksymalny sygnał analogowy, który może zostać poprawnie przetworzony na wartość cyfrową jest równy napięciu referencyjnemu, a jego przetworzona wartość to maksymalny integer mieszczący się w rejestrze wyniku. Dla ADuC812 wewnętrzne napięcie referencji wynosi 2.5 V. Taki jest więc maksymalny sygnał, który może być przetworzony ma wartość 4095, a najmniejsza mierzalna różnica między dwoma sygnałami wynosi 0.61mV. ADuC812 może pracować także z zewnętrznym źródłem referencji. Jego wartość, większa od 2.3V, nie może przekraczać napięcia zasilania. Idealna, liniowa relacja analog-cyfra może być obarczona błędami. Producent ADuC812 wprowadził automatyczną kalibrację, dzięki której eliminuje się błąd przesunięcia zera i błąd nachylenia. 6/10 MIKROPROCESORY – architektura i programowanie Piotr MALECKI REJESTRY STERUJĄCE PRACĄ ADC: ADCCON1 (ADC Control #1) to rejestr SFR o adresie EFH. MD1 7 MD0 6 CK1 5 CK0 4 AQ1 3 AQ0 2 T2C 1 EXC 0 Para bitów MD1 MD0 kontroluje zasilanie obwodów ADC, para CK1, CK0 wyznacza dzielnik zegara, para AQ1, AQ0 wyznacza liczbę cykli zegara ADC, którą dodatkowo przeznaczamy na czas akwizycji sygnału wejściowego (zwykle wystarcza 1). MD1 MD0 CK1 CK0 dzielnik zegara 0 0 Obwody ADC nie są zasilane 0 0 1 0 1 Normalna praca 0 1 2 1 0 ADC nie zasilane jeśli nie biegnie konwersja 1 0 4 1 1 Stan uśpienia 1 1 8 (W stanie uśpienia napięcie referencyjne jest utrzymywane, a wyłączone są pozostałe obwody ADC) AQ1 AQ0 0 0 0 1 1 0 1 1 liczba extra cykli 1 2 4 8 Bit T2C (ADCCON.1) może być ustawiony przez programistę. Ustawiony oznacza zezwolenie na użycie licznika T2 dla wyzwalania procesu konwersji. Konwersja startuje przy DRUGIM przepełnieniu licznika. Bit EXC jest ustawiany również przez programistę i ustawienie zezwala na użycie sygnału doprowadzanego do linii procesora CONVST jako wyzwalania konwersji (active low, jak zwykle). 7/10 MIKROPROCESORY – architektura i programowanie Piotr MALECKI REJESTRY STERUJĄCE PRACĄ ADC: ADCCON2 (ADC Control #2) to rejestr SFR o adresie D8H. ADCI 7 DMA 6 CCONV 5 SCONV CS3 4 3 CS2 CS1 CS0 2 1 0 Bity CS3 – CS0 ustawiają numer kanału dla przyszłej konwersji: CS3 CS2 CS1 CS0 Wybrany kanał 0 0 0 0 0 0 0 0 1 1 0 0 1 0 2 “ “ “ “ “ 0 1 1 0 6 0 1 1 1 7 1 0 0 0 pomiar temperatury układu 1 1 1 1 wstrzymuje pracę DMA Pozostałe konfiguracje bitów nie są używane. Bit ADCI to wskaźnik przerwania, który jest ustawiany, gdy konwersja jest zakończona. Używany gdy decydujemy się na pracę ADC w trybie przerwań. Ustawienie bitu DMA zezwala na pracę ADC w trybie Direct Memory Access, który zwłaszcza przy żądaniu konwersji ciągłej zezwala na akwizycję pomiarów bez obciążania procesora. Praca DMA zostanie omówiona w przyszłych wykładach. CCONV ustawia programista i zezwala na pracę ADC trybie konwersji ciągłej – po zakończeniu jednego procesu konwersji, startuje następny. Wyzwalanie konwersji zależy od innych ustawień. Ustawienie SCONV inicjuje pojedynczą konwersję. Bit jest zerowany sprzętowo po zakończeniu 8/10 konwersji. MIKROPROCESORY – architektura i programowanie Piotr MALECKI REJESTRY STERUJĄCE PRACĄ ADC: ADCCON3 (ADC Control #3) to rejestr SFR o adresie F5H. BUSY 7 RSVD 6 RSVD 5 RSVD 4 RSVD 3 RSVD 2 RSVD 1 RSVD 0 Ten rejestr nie jest zbyt bogaty. Bit BUSY jest jedynie do czytania. Jest ustawiany automatycznie (sprzętowo) w trakcie konwersji lub kalibracji i także automatycznie zerowany po zakończeniu konwersji lub kalibracji. Wyniki konwersji znajdują się w ADCDATAH i ADCDATAL , rejestrach SFR. Wynik konwersji jest 12-bitowy. Cztery najstarsze bity znajdują się na pozycjach ADCTADAH.3 – ADCDATAH.0 a pozostałe w rejestrze ADCDATAL. UWAGA! Na pozycjach ADCDATAH.7 – ADCDATAH.4 automatycznie, po pomiarze znajduje się numer kanału ADC, z którego pomiar pochodzi. ADuC812 ma wbudowaną automatyczną funkcję kalibracyjną, która uruchamia się po włączeniu zasilania. Programista ma dostęp do dwóch parametrów kalibracyjnych i może je zmieniać, jeśli uważa, że jego wartości są lepsze. Producent dostarcza kodu procedury i można go zastosować dla własnej kalibracji lub zmienić. Parametry kalibracyjne dostępne dla programisty to 14-bitowe wartości umieszczone w następujących rejestrach: ADCGAINH (zawiera 6 starszych bitów parametru korygującego nachylenie prostej odnoszącej sygnał do wartości odczytu), ADCGAINL – pozostałe 8 bitów tego parametru. ADCOFSH i ADCOFSL – to rejestry zawierające 14-bitową wartość parametru korygującego punkt przecięcia prostej z początkiem układu współrzędnych. 9/10 MIKROPROCESORY – architektura i programowanie Piotr MALECKI PRZYKŁAD PROGRAMU używającego ADC w w trybie pojedynczej konwersji, bez zezwolenia na przerwania. USTAWIENIA WSTĘPNE: MOV ADCCON1,#01100000B PRZYGOTOWNIE KONWERSJI: MOV ADCCON2,#02H SETB SCONV JB SCONV,$ SETB SCONV JB SCONV,$ PRZETWORZENIE WYNIKU: MOV WYNIKH,ADCDATAH MOV WYNIKL,ADCDATAL ANL WYNIKH,#0FH ;ADC normal, clk div 4, aq 0, no T2, no EXT ;wybranie kanału 2 ;czekaj na zakończenie konwersji. Pierwsza zła. ;OK ;”wymaskuj” numer kanału DYSKUSJA: W przykładzie pokazano użycie ADC BEZ zezwolenia na przerwania. Wynika to stąd, że konwersja, która w przypadku tego procesora zajmuje ok. 17 cykli zegara ADC, czyli pojedyncze mikrosekundy. Obsługa przerwania byłaby w tym przypadku nieuzasadniona. Na pewną przykładową przestrogę wskazuje użycie dwóch następujących po sobie konwersji. Otóż producent procesora podał w informacjach o błędach, że w przypadku konwersji następującej po czasie dłuższym niż 200 ms od ostatnio przeprowadzonej wynik jest niepoprawny i należy go powtórzyć! 10/10