Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Mikrokontroler wspiera również 16 kombinacji napięć różnicowych. Dwa z wejść różnicowych (ADC1, ADC0 i ADC3, ADC2) jest wyposażone w programowany stopień wzmacniający, który dostarcza stopnie wzmocnienia 0dB (1x), 20 dB (10x) i 46dB (200x) wejściowego napięcia różnicowego przed konwersją analogowo/cyfrową. Siedem różnicowych wejść analogowych współdzieli wspólne wejście odwracające (ADC1), a każde inne wejście przetwornika można wybrać na wejście nieodwracające. Jeśli używane jest wzmocnienie 1x lub 10x, to można oczekiwać rozdzielczości 8 bitów. Jeśli używane jest wzmocnienie 200x, to można oczekiwać rozdzielczości 7 bitów.
Przetwornik posiada obwód próbkowania z podtrzymaniem, który zapewnia, iż napięcie wejściowe do przetwornika jest utrzymywane na stałym poziomie podczas konwersji. Poniższy rysunek przedstawia schemat blokowy przetwornika.
Przetwornik A/C posiada oddzielną końcówkę analogowego napięcia zasilania, AVCC. Napięcie to nie powinno się różnić więcej niż ±0.3V od VCC. Zobacz do podrozdziału "Filtr zakłóceń", gdzie opisano sposób podłączania tej końcówki.
Wewnętrznie dostępne jest napięcie odniesienia o wartości znamionowej 2,56V lub AVCC. Napięcie odniesienia może być zewnętrznie odsprzęgane na końcówce AREF kondensatorem w celu zwiększenia odporności na zakłócenia.
Przetwornik analogowo/cyfrowy zamienia analogowe napięcie wejściowe na 10-bitową wartość za pomocą kolejnych przybliżeń. Wartość minimalna reprezentuje GND, a wartość maksymalna reprezentuje napięcie na końcówce AREF minus 1 LSB (najmłodszy bit). Opcjonalnie do końcówki AREF można podłączyć AVCC lub wewnętrzne napięcie odniesienia 2,56V przez zapis bitów REFSn w rejestrze ADMUX. W ten sposób wewnętrzne napięcie odniesienia można odsprzęgnąć zewnętrznym kondensatorem podłączonym do końcówki AREF, co polepszy odporność na zakłócenia.
Analogowy kanał wejściowy oraz wzmocnienie różnicowe są wybierane przez zapis bitów MUX w rejestrze ADMUX. Jako kanał nieróżnicowy dla przetwornika A/C może być wybrana dowolna z końcówek wejściowych ADC, jak również GND i stałe napięcie odniesienia. Wybór końcówek wejściowych ADC może być następnie wybrany jako wejścia odwracające i nieodwracające dla różnicowego wzmacniacza wejściowego (ang. gain amplifier).
Jeśli zostały wybrane kanały różnicowe, to różnicowy stopień wzmacniający wzmacnia różnicę napięć pomiędzy parą kanałów wejściowych o wybraną wielkość wzmocnienia. Następnie wzmocniona wartość staje się wejściem analogowym dla przetwornika A/C. Jeśli wybrano kanały nieróżnicowe, to wzmacniacz jest całkowicie pomijany.
Przetwornik A/C jest włączany przez ustawienie bitu ADEN w rejestrze ADCSRA. Wybory napięcia odniesienia i kanałów wejściowych kanałów wejściowych nie wejdą w życie, dopóki nie zostanie ustawiony bit ADEN. Gdy bit ADEN jest wyzerowany, przetwornik A/C nie pobiera prądu, zatem zaleca się wyłączać przetwornik przed wejściem w tryby uśpienia oszczędzające energię.
Przetwornik A/C generuje 10-bitowy wynik, który będzie obecny w rejestrach danych przetwornika, ADCH i ADCL. Standardowo wynik jest prezentowany z wyrównaniem do prawej strony, lecz może być opcjonalnie prezentowany z wyrównaniem lewostronnym przez ustawienie bitu ADLAR w rejestrze ADMUX.
Jeśli wynik jest wyrównany lewostronnie i nie jest potrzebna wyższa precyzja od 8 bitów, to wystarczy odczytać rejestr ADCH. W przeciwnym razie najpierw musi być odczytany rejestr ADCL, a następnie ADCH, aby zagwarantować, iż zawartość rejestrów danych należą do tej samej konwersji. Gdy zostaje odczytany rejestr ADCL, przetwornik A/C ma zablokowany dostęp do rejestrów danych, żaden z nich nie będzie uaktualniony i wynik konwersji zostanie utracony. Gdy odczytywany jest rejestr ADCH, przetwornik A/C otrzymuje z powrotem dostęp do ADCH i ADCL.
Przetwornik A/C posiada swoje własne przerwanie, które może zostać wyzwolone przy zakończeniu konwersji. Gdy dostęp przetwornika A/C do rejestrów danych jest wzbroniony pomiędzy odczytem ADCH i ADCL, przerwanie zostanie wyzwolone, nawet, gdy wynik będzie utracony.
Alternatywnie konwersja może zostać wyzwolona automatycznie przez różne źródła. Samowyzwalanie zostaje uaktywnione przez ustawienie w rejestrze ADCSRA bitu samowyzwalania przetwornika A/C (ang. Auto Trigger Enable bit, ADATE). Źródło wyzwalania jest wybierane przez ustawienie bitów ADTS (ang..ADC Trigger Select bits) w rejestrze SFIOR (listę źródeł wyzwalania znajdziesz w opisie bitów ADTS). Gdy w wybranym sygnale wyzwalającym pojawi się dodatnie zbocze, preskaler przetwornika A/C jest resetowany i rozpoczyna się przetwarzanie. Dostarcza to sposobu rozpoczynania konwersji w stałych odstępach. Jeśli sygnał wyzwalający jest wciąż ustawiony, gdy konwersja się kończy, to nowa konwersja się nie rozpocznie. Jeśli podczas trwania konwersji pojawi się kolejne dodatnie zbocze, to zostanie ono zignorowane. Zauważ, iż znacznik przerwania będzie ustawiany, nawet jeśli określone przerwanie jest wyłączone lub został wyzerowany bit globalnego uaktywniania przerwań w rejestrze SREG. Wynika z tego, iż konwersja może zostać wyzwolona bez powodowania żadnego przerwania. Jednakże znacznik przerwania musi być wyzerowany, aby wyzwolić nową konwersję przy następnym zdarzeniu przerwania.
Obwód wyzwalania automatycznego
Używanie znacznika przerwania z przetwornika A/C (ang. ADC Interrupt Flag, ADIF) jako źródła wyzwalania powoduje, iż przetwornik A/C rozpoczyna nowe przetwarzanie jak tylko zakończy obecne. W takim przypadku przetwornik A/C pracuje w trybie ciągłym (ang. Free Running mode), ciągle próbkując napięcie wejściowe i uaktualniając rejestr danych. Pierwsze przetwarzanie musi zostać rozpoczęte przez zapis logicznej jedynki do bitu ADSC w ADCSRA. W tym trybie przetwornik A/C będzie wykonywał kolejne przetwarzania niezależnie od wyzerowania znacznika przerwań z przetwornika ADIF.
Jeśli zostanie wybrane wyzwalanie automatyczne (ang. Auto Triggering), to pojedyncze przetwarzanie może rozpocząć się po zapisaniu jedynki do bitu ADSC w ADCSRA. Bit ADSC można również używać do określania, czy przetwarzanie jest w toku. Podczas przetwarzania bit ADSC będzie dawał odczyt jeden bez względu na sposób rozpoczęcia tego przetwarzania.
Preskaler przetwornika A/C
Gdy rozpoczyna się pojedyncze przetwarzanie przez ustawienie bitu ADSC w ADCSRA, to przetwarzanie to startuje od następnego narastającego zbocza cyklu zegarowego przetwornika A/C.
Normalne przetwarzanie zajmuje 13 cykli zegarowych przetwornika A/C. Pierwsze przetwarzanie po włączeniu przetwornika A/C (ustawienie ADEN w ADCSRA) zabiera 25 cykli zegarowych w celu inicjalizacji obwodów analogowych, jak pokazuje poniższy rysunek.
Wykres czasowy
przetwornika A/C, pierwsze przetwarzanie (tryb
pojedynczego przetwarzania)
Gdy jako napięcie odniesienia zostanie wybrane jako wejście dla przetwornika A/C, upłynie pewien czas, zanim napięcie to ustabilizuje się. Jeśli nie będzie ustabilizowane, to pierwsza wartość odczytana po pierwszym przetwarzaniu może być zła.
Właściwe próbkowanie z podtrzymaniem próbki ma miejsce 1,5 cyklu zegara przetwornika A/C po rozpoczęciu normalnego przetwarzania i 14,5 cykli zegara po rozpoczęciu pierwszego przetwarzania. Gdy przetwarzanie jest ukończone, wynik zostaje zapisany do rejestrów danych przetwornika A/C, a znacznik ADIF jest ustawiany. W trybie pojedynczego przetwarzania bit ADSC jest jednocześnie zerowany. Program może wtedy ponownie ustawić ADSC, a nowe przetwarzanie zostanie zainicjowane przy pierwszym narastającym zboczu zegara przetwornika A/C.
Wykres czasowy
przetwornika A/C, jedno przetwarzanie
Gdy jest używane automatyczne wyzwalanie, preskaler zostaje zresetowany w momencie wystąpienia zdarzenia wyzwalającego, co pokazuje poniższy rysunek. Zapewnia to stałe opóźnienie od zdarzenia wyzwalającego do rozpoczęcia przetwarzania. W tym trybie próbkowanie z podtrzymaniem ma miejsce dwa cykle zegara przetwornika A/C po narastającym zboczu w sygnale źródła wyzwalającego. Trzy dodatkowe cykle zegara przetwornika A/C są wykorzystywane do synchronizacji sieci logicznej. Gdy używany jest tryb różnicowy razem z autowyzwalaniem od źródła innego niż zakończenie konwersji, to każda konwersja będzie wymagał 25 cykli przetwornika A/C. Dzieje się tak dlatego, iż przetwornik A/C musi być wyłączany i ponownie włączany po każdej konwersji.
Wykres czasowy
przetwornika A/C, przetwarzanie z automatycznym wyzwalaniem
W trybie ciągłym (ang. Free Running mode) nowe przetwarzanie rozpoczyna się natychmiast po ukończeniu poprzedniego przetwarzania, natomiast bit ADSC pozostaje w stanie wysokim.
Wykres czasowy
przetwornika A/C, przetwarzanie w trybie ciągłym
Poniższa tabela podsumowuje czasy przetwarzania:
Warunek | Próbkowanie z podtrzymaniem od startu przetwarzania |
Czas przetwarzania (cykle) |
Pierwsze przetwarzanie | 13,5 | 25 |
Normalne przetwarzania | 1,5 | 13 |
Przetwarzania z autowyzwalaniem | 2 | 13,5 |
Przetwarzanie ciągłe | 1,5/2,5 | 13/14 |
Gdy używa się kanałów o wzmocnieniu różnicowym, należy wziąć pod uwagę pewne aspekty dotyczące konwersji.
Konwersje różnicowe są synchronizowane z wewnętrznym zegarem CKADC2 równym połowie zegara przetwornika A/C. Ta synchronizacja wykonywana jest automatycznie przez interfejs przetwornika w ten sposób, że próbkowanie i podtrzymanie wyniku odbywa się przy określonej fazie CKADC2. Konwersja zainicjowana przez użytkownika (tj. wszystkie konwersje pojedyncze i pierwsze konwersje ciągłe) gdy CKAD2 ma stan niski, zabierze tyle samo czasu co konwersja nieróżnicowa (13 taktów zegara przetwornika A/C od następnego preskalowanego cyklu zegara). Konwersja zainicjowana przez użytkownika gdy CKADC2 ma stan wysoki zabierze 14 taktów zegara przetwornika A/C z uwagi na mechanizm synchronizacji. W trybie przetwarzania ciągłego nowa konwersja jest inicjowana natychmiast po zakończeniu poprzedniej, a ponieważ CKADC2 jest w stanie wysokim w tym czasie, to rozpoczęte automatycznie (tj. wszystkie z wyjątkiem pierwszej) konwersje ciągłe zajmą 14 taktów zegara przetwornika A/C.
Stopień wzmocnienia jest zoptymalizowany na pasmo 4 kHz na wszystkich ustawieniach wzmocnienia. Wyższe częstotliwości mogą być przyczyną nieliniowego wzmocnienia. Jeśli sygnał wejściowy zawiera składowe o wyższych częstotliwościach niż pasmo stopnia wzmocnienia, należy zastosować zewnętrzny filtr dolnoprzepustowy. Zauważ, iż częstotliwość zegarowa przetwornika A/C jest niezależna od ograniczeń pasma stopnia wzmocnienie. Na przykład okres zegarowy przetwornika może wynosić 6 μs, pozwalając na próbkowanie kanału z szybkością 12 tysięcy pomiarów na sekundę, bez względu na szerokość pasma tego kanału.
Jeśli są używane kanały o różnicowym wzmocnieniu i konwersje są rozpoczynane przez samowyzwalanie, to przetwornik A/C musi być wyłączany pomiędzy konwersjami. Gdy jest używane autowyzwalanie, preskaler przetwornika A/C jest resetowany przed rozpoczęciem konwersji. Ponieważ stopień wzmocnienia jest zależny od stabilnego zegara przetwornika A/C przed konwersją, to ta konwersja nie da ważnych wyników. Przez wyłączenie i ponowne włączenie przetwornika A/C pomiędzy konwersjami (zapisując bit ADEN w rejestrze ADCSRA zerem, a później jedynką) będą wykonywane tylko rozszerzone konwersje. Wynik z rozszerzonej konwersji będzie ważny. Szczegóły na temat czasów konwersji znajdziesz w podrozdziale "Preskalowanie i czasy konwersji".
Jeśli stosowane jest samowyzwalanie, to dokładny czas zdarzenia wyzwalania może być nieokreślony. Należy podjąć specjalne środki ostrożności przy uaktualnianiu rejestru ADMUX, aby kontrolować, na którą konwersję wpłynie nowe ustawienie.
Jeśli oba bity ADATE i ADEN zostaną wpisane jako jedynki, to zdarzenie przerwania może wystąpić w dowolnym momencie. Jeśli w tym okresie jest modyfikowany rejestr ADMUX, to użytkownik nie będzie w stanie określić, czy następne przetwarzanie zostanie oparte na starych ustawieniach, czy na nowych. ADMUX można bezpiecznie modyfikować w jeden z następujących sposobów:
Gdy rejestr ADMUX jest modyfikowany w jednym z powyższych warunków, to nowe ustawienia wpłyną na następne przetwarzanie w przetworniku A/C.
Należy zachować specjalną ostrożność przy zmienianiu kanałów różnicowych. Po wybraniu kanału różnicowego, stopień wzmacniający może potrzebować do 125 μs, aby ustabilizować się do nowej wartości. Z tego powodu nie powinno się rozpoczynać konwersji w ciągu pierwszych 125 μs po wybraniu nowego kanału różnicowego. Alternatywnie wyniki konwersji otrzymane w tym okresie należy odrzucić.
Ten sam czas ustalania należy przestrzegać dla pierwszej konwersji różnicowej po zmianie napięcia odniesienia dla przetwornika A/C (poprzez zmianę bitów REFS[1:0] w rejestrze ADMUX).
Przy zmianie wyboru kanałów użytkownik powinien stosować się do poniższych wskazówek, aby zapewnić wybór poprawnego kanału:
W trybie pojedynczego przetwarzania (ang. Single Conversion mode) zawsze wybieraj kanał przed rozpoczęciem przetwarzania. Wybór kanału może być zmieniony po upływie jednego cyklu zegarowego przetwornika A/C od zapisu jedynki do bitu ADSC. Jednakże najprostszym sposobem jest odczekanie, aż przetwarzanie zakończy się, zanim wykona się zmianę wyboru kanału.
W trybie pracy ciagłej (ang.Free Running mode) zawsze wybieraj kanał przed uruchomieniem pierwszego przetwarzania. Wybór kanału może być zmieniony po upływie jednego cyklu zegarowego przetwornika A/C od zapisu jedynki do bitu ADSC. Jednakże najprostszym sposobem jest odczekanie na zakończenie pierwszego przetwarzania, a wtedy można zmienić wybór kanału. Ponieważ następne przetwarzanie zostało już rozpoczęte, to jego wynik będzie odzwierciedlał poprzednie ustawienie kanału. Kolejne przetwarzania będą odzwierciedlać nowy wybór kanału.
Po przełączeniu na kanał o wzmocnieniu różnicowym, wynik pierwszej konwersji może posiadać małą dokładność z powodu wymaganego czasu ustalania dla obwodu automatycznego usuwania niezrównoważenia. Użytkownik powinien najlepiej odrzucić wynik pierwszej konwersji.
Napięcie odniesienia dla przetwornika A/C (VREF) wskazuje zakres przetwarzania napięć w przetworniku. Jeśli w kanale analogowym podłączonym do wejścia przetwornika A/C napięcie przekracza VREF, to wynik przetwarzania da wartość bliską 0x3FF. Jako VREF można wybrać jako AVCC, wewnętrzne napięcie odniesienia 2,56 V lub zewnętrzne napięcie odniesienia z końcówki AREF.
AVCC jest podłączane do przetwornika A/C przez pasywny przełącznik. Wewnętrzne odniesienie 2,56V jest generowane z wewnętrznego napięcia odniesieni VBG poprzez wewnętrzny wzmacniacz. W każdym przypadku zewnętrzna końcówka AREF jest podłączona bezpośrednio do przetwornika A/C, a napięcie odniesienia można uodpornić na zakłócenia przez włączenie kondensatora pomiędzy końcówkę AREF i masę. VREF można również zmierzyć na końcówce AREF przy pomocy woltomierza o wysokiej impedancji. Zauważ, iż VREF jest źródłem o wysokiej impedancji i w systemie powinno być obciążone tylko pojemnościowo.
Jeśli użytkownik posiada stałe źródło napięciowe podłączone do końcówki AREF, to nie powinien on w swojej aplikacji używać innych opcji napięcia odniesienia, ponieważ zostaną one zwarte z napięciem zewnętrznym. Jeśli do końcówki AREF nie jest podłączone żadne napięcie zewnętrzne, to użytkownik może przełączać pomiędzy AVcc i 2,56V jako wybór odniesienia. Pierwsze przetwarzanie w przetworniku A/C po przełączeniu źródła napięcia odniesienia może nie być dokładne i zaleca się użytkownikowi odrzucenie jego wyniku.
Jeśli używane są kanały różnicowe, to wybrane napięcie odniesienia nie powinno przekraczać AVCC - 0,2V.
Zwróć uwagę, że przetwornik A/C nie zostanie automatycznie wyłączony, gdy mikroprocesor wejdzie w inne tryby uśpienia niż tryb bezczynności oraz tryb zmniejszania zakłóceń dla przetwornika A/C. Użytkownik powinien wpisać zero do bitu ADEN przed wejściem do takich trybów uśpienia, aby zapobiec nadmiernemu poborowi energii.
Kondensator pokazany na rysunku przedstawia całkowitą pojemność, łącznie z kondensatorem CS/H oraz z wszelkimi obcymi i pasożytniczymi pojemnościami wewnątrz mikrokontrolera. Podana wartość jest najgorszym przypadkiem.
Przetwornik A/C jest zoptymalizowany dla sygnałów analogowych o impedancji wyjściowej w przybliżeniu 10 kΩ lub mniejszej. Dla takich źródeł czas próbkowania będzie pomijalny. Jeśli zostanie użyte źródło o większej impedancji, czas próbkowania będzie zależał od tego, jak długo źródło potrzebuje ładować kondensator CS/H. Tutaj może być duży rozrzut. Zaleca się użytkownikom używania źródeł o niskiej impedancji oraz wolnozmiennych sygnałów, ponieważ to minimalizuje czas ładowania kondensatora CS/H do pożądanej wartości napięcia wejściowego.
Jeśli używane są kanały o wzmocnieniu różnicowym, to obwód wejściowy wygląda nieco inaczej, chociaż zaleca się impedancje źródłowe o wartości kilkuset kΩ lub mniej.
Składowe sygnału wyższe od częstotliwości Nyquista (fADC / 2) nie powinny być obecne, aby uniknąć nieprzewidywalnych zniekształceń. Należy usunąć składowe o wysokich częstotliwościach za pomocą filtru dolnoprzepustowego przed przekazaniem sygnałów jako wejścia dla przetwornika A/C.
Połączenia zasilania dla
przetwornika A/C
Stopień wzmocnienia posiada wbudowany układ usuwania niezrównoważenia, który stara się wyzerować niezrównoważenie pomiarów różnicowych jak tylko jest to możliwe. Pozostałe niezrównoważenie w ścieżce analogowej można zmierzyć bezpośrednio poprzez wybranie tego samego kanału dla obu wejść różnicowych. Następnie to szczątkowe niezrównoważenie można programowo odejmować od wyników pomiarów. Wykorzystując ten rodzaj korekcji niezrównoważenia opartej na programie niezrównoważenie w dowolnym kanale można zredukować poniżej wartości najmłodszego bitu (LSB).
Dla konwersji nieróżnicowej wynik ma postać:
gdzie VIN jest napięciem na wybranej końcówce wejściowej, a VREF jest wybranym napięciem odniesienia. 0x000 reprezentuje napięcie o poziomie masy analogowej, a 0x3FF reprezentuje wybrane napięcie odniesienia minus jeden LSB (najmłodszy bit).
Jeśli używane są kanały różnicowe, wynik ma postać:
gdzie VPOS oznacza napięcie na końcówce wejścia nieodwracającego, VNEG jest napięciem na końcówce wejścia odwracającego, a VREF to wybrane napięcie odniesienia. Wynik jest przedstawiany w postaci uzupełnienia do dwóch od 0x200 (-512) do 0x1FF (+511). Zauważ, iż jeśli użytkownik chce wykonać szybkie sprawdzenie polaryzacji wyniku, to wystarczy odczytać najstarszy bajt MSB wyniku (ADC9 w ADCH). Jeśli bit ma wartość jeden, to wynik jest ujemny, a jeśli bit ma wartość zero, to wynik jest dodatni lub równy zero.
Zakres pomiarów różnicowych
Poniższa tabelka pokazuje wynikowe kody wyjściowe, jeśli została wybrana różnicowa para kanałów wejściowych (ADCn - ADCm) ze wzmocnieniem GAIN i z napięciem odniesienia VREF.
VADCn | Odczytywany kod | Odpowiadająca mu wartość dziesiętna |
VADCm + VREF/GAIN | 0x1FF | 511 |
VADCm + 511/512 VREF/GAIN | 0x1FF | 511 |
VADCm + 510/512 VREF/GAIN | 0x1FE | 510 |
... | ... | ... |
VADCm + 1/512 VREF/GAIN | 0x001 | 1 |
VADCm | 0x000 | 0 |
VADCm - 1/512 VREF/GAIN | 0x3FF | -1 |
... | ... | ... |
VADCm - 511/512 VREF/GAIN | 0x201 | -511 |
VADCm - VREF/GAIN | 0x200 | -512 |
Przykład:
ADMUX = 0xED (ADC3 - ADC2, wzmocnienie 10x,
odniesienie 2.56V, wynik wyrównany lewostronnie)
Napięcie na ADC3 wynosi 300 mV, napięcie na ADC2 wynosi 500 mV.
ADCR = 512 × 10 × (300 - 500) / 2560 = -400 = 0x270
Stąd ADCL da odczyt 0x00, a ADCH da odczyt 0x9C. Zapis zera do bitu ADLAR
wyrówna wynik prawostronnie: ADCL = 0x70, ADCH = 0x02.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x07 (0x27) | REFS1 | REFS0 | ADLAR | MUX4 | MUX3 | MUX2 | MUX1 | MUX0 | ADMUX |
Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity wybierają napięcie odniesienia dla przetwornika A/C, co pokazuje poniższa tabelka. Jeśli zostaną one zmienione podczas konwersji, to zmiana nie wejdzie w życie aż do zakończenia konwersji (ustawiony bit ADIF w rejestrze ADCSRA). Opcje wewnętrznych napięć odniesienia nie powinny być używane, jeśli do końcówki AREF podłączone jest zewnętrzne napięcie odniesienia.
REFS1 | REFS0 | Wybór napięcia odniesienia |
0 | 0 | AREF, wewnętrzne napięcie VREF wyłączone. |
0 | 1 | AVCC z zewnętrznym kondensatorem na końcówce AREF. |
1 | 0 | Zarezerwowane. |
1 | 1 | Wewnętrzne napięcie odniesienia 2,56V z zewnętrznym kondensatorem na końcówce AREF. |
Bit ADLAR wpływa na sposób prezentacji wyniku przetwarzania przetwornika A/C w rejestrze danych ADC. Aby wynik był prezentowany z dosunięciem lewostronnym, wpisz do bitu ADLAR jedynkę logiczną. W przeciwnym razie wynik będzie dosunięty do prawej strony. Zmiana bitu ADLAR wpływa natychmiast na rejestr danych ADC, bez względu na trwające przetwarzania. Więcej na temat tego bitu znajdziesz w opisie rejestru ADC.
Wartość tych bitów określa kombinację wejść analogowych podłączonych do przetwornika A/C. Szczegóły podaje poniższa tabelka. Jeśli bity te zostaną zmienione podczas konwersji, to zmiana nie wejdzie w życie aż do zakończenia tej konwersji (bit ADIF w rejestrze ADCSR ustawiony).
MUX[4:0] | Wejście nieróżnicowe |
Wejście nieodwracające |
Wejście odwracające |
Wzmocnienie |
00000 | ADC0 | Nie dotyczy | ||
00001 | ADC1 | |||
00010 | ADC2 | |||
00011 | ADC3 | |||
00100 | ADC4 | |||
00101 | ADC5 | |||
00110 | ADC6 | |||
00111 | ADC7 | |||
01000 | Nie dotyczy | ADC0 | ADC0 | 10x |
01001 | ADC1 | ADC0 | 10x | |
01010 | ADC0 | ADC0 | 200x | |
01011 | ADC1 | ADC0 | 200x | |
01100 | ADC2 | ADC2 | 10x | |
01101 | ADC3 | ADC2 | 10x | |
01110 | ADC2 | ADC2 | 200x | |
01111 | ADC3 | ADC2 | 200x | |
10000 | ADC0 | ADC1 | 1x | |
10001 | ADC1 | ADC1 | 1x | |
10010 | ADC2 | ADC1 | 1x | |
10011 | ADC3 | ADC1 | 1x | |
10100 | ADC4 | ADC1 | 1x | |
10101 | ADC5 | ADC1 | 1x | |
10110 | ADC6 | ADC1 | 1x | |
10111 | ADC7 | ADC1 | 1x | |
11000 | ADC0 | ADC2 | 1x | |
11001 | ADC1 | ADC2 | 1x | |
11010 | ADC2 | ADC2 | 1x | |
11011 | ADC3 | ADC2 | 1x | |
11100 | ADC4 | ADC2 | 1x | |
11101 | ADC5 | ADC2 | 1x | |
11110 | 1,22V (VBG) | Nie dotyczy | ||
11111 | 0 V (GND) |
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x06 (0x26) | ADEN | ADSC | ADATE | ADIF | ADIE | ADPS2 | ADPS1 | ADPS0 | ADCSRA |
Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Zapisanie jedynki do tego bitu włącza moduł przetwornika A/C. Zapis zera powoduje wyłączenie przetwornika A/C. Wyłączenie przetwornika podczas wykonywania przetwarzania spowoduje jego przerwanie i zakończenie.
W trybie pojedynczego przetwarzania (ang. Single Conversion mode), zapisuj ten bit logiczną jedynką, aby rozpocząć każde przetwarzanie. W trybie ciągłym (ang. Free Running mode) zapisz do tego bitu jedynkę, aby rozpocząć pierwsze przetwarzanie. Pierwsze przetwarzanie po włączeniu przetwornika zajmuje 25 cykli zegarowych przetwornika A/C zamiast standardowo 13. W trakcie tego pierwszego przetwarzania wykonywana jest inicjalizacja przetwornika A/C.
W trakcie przetwarzania bit ADSC będzie dawał odczyt 1. Gdy przetwarzanie się zakończy, wróci do stanu zero. Zapis zera do tego bitu nie daje żadnego efektu.
Gdy bit ten jest ustawiony, włącza się autowyzwalanie przetwornika A/C. Konwersja rozpocznie się przy dodatnim zboczu wybranego sygnału wyzwalającego. Źródło wyzwalania jest wybierane ustawieniem bitów ADTS (ang. ADC Trigger Select bits) w rejestrze SFIOR.
Ten bit jest ustawiany, gdy ukończone zostanie przetwarzanie w przetworniku A/C i rejestry danych zostaną uaktualnione. Przerwanie przy zakończeniu przetwarzania w przetworniku A/C jest wykonywane, jeśli są ustawione oba bity ADIE i I w rejestrze SREG. Bit ADIF jest zerowany przy wykonaniu odpowiedniego wektora obsługi przerwania. Alternatywnie można wyzerować ADIF przez zapis do tego bitu logicznej jedynki. Miej świadomość, iż odczyt-modyfikacja-zapis rejestru ADCSRA może spowodować zablokowanie oczekującego przerwania. Odnosi się to również do instrukcji SBI i CBI.
Gdy bit ten zostanie zapisany stanem 1 oraz jest ustawiony bit I w rejestrze SREG, to uaktywnia się przerwanie przy zakończeniu przetwarzania w przetworniku A/C.
Bity te określają współczynnik podziału pomiędzy częstotliwością XTAL a częstotliwością wejściową do przetwornika A/C.
ADPS2 | ADPS1 | ADPS0 | Współczynnik podziału |
0 | 0 | 0 | 2 |
0 | 0 | 1 | 2 |
0 | 1 | 0 | 4 |
0 | 1 | 1 | 8 |
1 | 0 | 0 | 16 |
1 | 0 | 1 | 32 |
1 | 1 | 0 | 64 |
1 | 1 | 1 | 128 |
ADLAR = 0 – wynik wyrównany prawostronnie
Bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | |
0x05 (0x25) | - | - | - | - | - | - | ADC9 | ADC8 | ADCH |
0x04 (0x24) | ADC7 | ADC6 | ADC5 | ADC4 | ADC3 | ADC2 | ADC1 | ADC0 | ADCL |
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Zapis/Odczyt | O | O | O | O | O | O | O | O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
ADLAR = 1 – wynik wyrównany lewostronnie
Bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | |
0x05 (0x25) | ADC9 | ADC8 | ADC7 | ADC6 | ADC5 | ADC4 | ADC3 | ADC2 | ADCH |
0x04 (0x24) | ADC1 | ADC0 | - | - | - | - | - | - | ADCL |
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Zapis/Odczyt | O | O | O | O | O | O | O | O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Gdy przetwarzanie w przetworniku A/C dobiegnie końca, wynik znajdzie się w tych dwóch rejestrach. Jeśli są używane kanały różnicowe, to wynik jest przedstawiany w postaci liczby U2.
Gdy zostanie odczytany rejestr ADCL (z dolnym bajtem wyniku), rejestr danych przetwornika A/C nie będzie uaktualniany aż do momentu odczytu ADCH (z górnym bajtem wyniku). W konsekwencji, jeśli wynik jest wyrównany lewostronnie i nie jest wymagana precyzja większa od 8 bitów, to wystarczy odczytać rejestr ADCH (otrzymasz 8 najstarszych bitów wyniku przetwarzania). W przeciwnym razie najpierw należy odczytać ADCL, a następnie ADCH.
Bit ADLAR w rejestrze ADMUX, wpływa na sposób odczytu wyniku przetwarzania z tych rejestrów. Jeśli bit ADLAR jest ustawiony, to wynik zostaje wyrównany lewostronnie. Jeśli bit ADLAR jest wyzerowany (wartość standardowa), to wynik jest wyrównany prawostronnie.
Te bity reprezentują 10-bitowy wynik przetwarzania.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x30 (0x50) | ADTS2 | ADTS1 | ADTS0 | – | ACME | PUD | PSR2 | PSR10 | SFIOR |
Zapis/Odczyt | Z/O | Z/O | Z/O | O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Jeśli bit ADATE w rejestrze ADCSRA zostanie zapisany stanem jeden, to wartość tych bitów określa źródło wyzwalania konwersji w przetworniku A/C. Jeśli bit ADATE zostanie wyzerowany, to ustawienia bitów ADTS[2:0] nie mają znaczenia. Konwersja będzie wyzwolona przez narastające zbocze sygnału wybranego znacznika przerwania. Zauważ, iż przełączenie ze źródła wyzwalania o stanie niskim na źródło wyzwalania o stanie wysokim wygeneruje dodatnie zbocze w sygnale wyzwalania. Jeśli bit ADEN w rejestrze ADCSRA jest ustawiony, to takie zdarzenie rozpocznie konwersję. Przełączenie do trybu pracy ciągłej (ADTS[2:0]=0) nie spowoduje zdarzenia wyzwalającego, nawet jeśli zostanie ustawiony znacznik przerwania z przetwornika A/C.
Wybory źródeł autowyzwalania przetwornika A/C
ADTS2 | ADTS1 | ADTS0 | Źródło wyzwalające |
0 | 0 | 0 | Tryb pracy ciągłej |
0 | 0 | 1 | Komparator analogowy |
0 | 1 | 0 | Żądanie przerwania zewnętrznego 0 |
0 | 1 | 1 | Zgodność porównania w timerze/liczniku 0 |
1 | 0 | 0 | Przepełnienie timera/licznika 0 |
1 | 0 | 1 | Zgodność porównania B w timerze/liczniku 1 |
1 | 1 | 0 | Przepełnienie timera/licznika 1 |
1 | 1 | 1 | Zdarzenie Input Capture w timerze/liczniku 1 |
Ten bit jest zarezerwowany do wykorzystania w przyszłości. Aby zapewnić kompatybilność z przyszłymi wersjami mikrokontrolera, bit ten musi być zapisywany stanem 0 przy zapisie do rejestru SFIOR.
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.