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
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
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 RNG0 CLR1 CLR0 SYNC PD1 PD0 7 6 5 4 3 2 1 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
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
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
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
REJESTRY STERUJĄCE PRACĄ ADC: MIKROPROCESORY architektura i programowanie ADCCON1 (ADC Control #1) to rejestr SFR o adresie EFH. MD1 MD0 CK1 CK0 AQ1 AQ0 T2C EXC 7 6 5 4 3 2 1 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 liczba extra cykli Bit T2C (ADCCON.1) może być ustawiony przez 0 0 1 programistę. Ustawiony oznacza zezwolenie na 0 1 2 użycie licznika T2 dla wyzwalania procesu kon- 1 0 4 wersji. Konwersja startuje przy DRUGIM przepeł- 1 1 8 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
REJESTRY STERUJĄCE PRACĄ ADC: ADCCON2 (ADC Control #2) to rejestr SFR o adresie D8H. ADCI DMA CCONV SCONV CS3 CS2 CS1 CS0 7 6 5 4 3 2 1 0 Bity CS3 CS0 ustawiają numer kanału dla przyszłej konwersji: CS3 CS2 CS1 CS0 Wybrany kanał Bit ADCI to wskaźnik 0 0 0 0 0 przerwania, który jest 0 0 0 1 1 ustawiany, gdy konwersja 0 0 1 0 2 jest zakończona. Używany gdy decydujemy się na 0 1 1 0 6 pracę ADC w trybie 0 1 1 1 7 przerwań. 1 0 0 0 pomiar temperatury układu 1 1 1 1 wstrzymuje pracę DMA Pozostałe konfiguracje bitów nie są używane. 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 konwersji. 8/10
REJESTRY STERUJĄCE PRACĄ ADC: ADCCON3 (ADC Control #3) to rejestr SFR o adresie F5H. BUSY RSVD RSVD RSVD RSVD RSVD RSVD RSVD 7 6 5 4 3 2 1 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
PRZYKŁAD PROGRAMU używającego ADC w w trybie pojedynczej konwersji, bez zezwolenia na przerwania. USTAWIENIA WSTĘPNE: MOV ADCCON1,#01100000B ;ADC normal, clk div 4, aq 0, no T2, no EXT PRZYGOTOWNIE KONWERSJI: MOV ADCCON2,#02H ;wybranie kanału 2 SETB SCONV JB SCONV,$ ;czekaj na zakończenie konwersji. Pierwsza zła. SETB SCONV JB SCONV,$ ;OK PRZETWORZENIE WYNIKU: MOV WYNIKH,ADCDATAH MOV WYNIKL,ADCDATAL ANL WYNIKH,#0FH ; 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