|
Wyjście Spis treści Wstecz Dalej
Autor artykułu |
©2026 mgr Jerzy Wałaszek
|

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s
permission is not required when using copyrighted material in:
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

Mikrokontroler ATtiny13 zawiera 10-bitowy kompensacyjny przetwornik analogowo/cyfrowy, którego schemat blokowy przedstawia poniższy rysunek:

Przetwornik A/C połączony jest z 4-kanałowym multiplekserem analogowym, który umożliwia pomiar 4 napięć wejściowych doprowadzonych do końcówek portu B. Napięcia te są mierzone względem 0V (masa, GND). Przetwornik zawiera układ próbkowania z podtrzymaniem, który zapewnia, iż napięcie wejściowe dla przetwornika A/C jest utrzymywane na stałym poziomie podczas procesu przetwarzania. Wewnętrzne napięcia odniesienia 1,1V i VCC są dostarczane z wnętrza układu mikrokontrolera.
Zasadę działania przetworników kompensacyjnych opisujemy tutaj.
Przetwornik A/C zamienia analogowe napięcie wejściowe w 10-bitową wartość poprzez kolejne przybliżenia. Minimalna wartość oznacza GND, a maksymalna wartość oznacza napięcie na końcówce VCC lub wewnętrzne napięcie odniesienia 1,1 V.

Analogowy kanał wejściowy jest wybierany przez zapis do bitów MUX w rejestrze ADMUX. Każda z końcówek ADC może zostać wybrana jako wejście dla przetwornika A/C.
Przetwornik A/C jest włączany przez ustawienie bitu ADEN (ang. ADC Enable bit) w rejestrze ADCSRA. Wybór napięcia odniesienia i kanału wejściowego nie będzie ważny, dopóki nie zostanie ustawiony bit ADEN. Gdy bit ADEN jest wyzerowany, przetwornik A/C nie pobiera prądu, zatem zaleca się wyłączyć ten przetwornik przed przejściem w jeden z trybów uśpienia oszczędzających energię.
Przetwornik A/C tworzy 10-bitowy wynik, który jest obecny w rejestrach danych ADCH (górny bajt) i ADCL (dolny bajt). Standardowo wynik jest przedstawiany jako wyrównany prawostronnie, lecz można go przestawiać również jako wyrównanego lewostronnie przez ustawienie bitu ADLAR w ADMUX.
Jeśli wynik jest wyrównany lewostronnie i nie jest potrzebna większa precyzja niż 8 bitów, to wystarczy odczytać górny bajt ADCH. W przeciwnym razie ADCL musi zostać odczytany jako pierwszy, a następnie ADCH, aby zapewnić, iż zawartość tych rejestrów danych należy do tej samej konwersji. Po odczycie ADCL dostęp przetwornika A/C do rejestrów danych jest blokowany. Oznacza to, że jeśli odczytano ADCL, a konwersja została zakończona przed odczytaniem ADCH, to żaden z tych rejestrów nie będzie uaktualniony i wynik przetwarzania zostanie stracony. Gdy zostaje odczytany ADCH, dostęp przetwornika A/C do rejestrów ADCH i ADCL jest wznawiany.
Przetwornik A/C posiada swoje własne przerwanie, które może być wyzwalane po zakończeniu przetwarzania. Gdy dostęp przetwornika A/C do rejestrów danych jest zablokowany pomiędzy odczytem ADCH i ADCL, przerwanie będzie generowane nawet w przypadku utraty wyniku.
Pojedyncze przetwarzanie rozpoczyna się po zapisaniu logicznej jedynki do bitu ADSC (ang. ADC Start Conversion bit). Bit ten pozostaje w stanie wysokim przez cały czas przetwarzania, a następnie jest zerowany sprzętowo, gdy przetwarzanie zostanie ukończone. Jeśli w trakcie przetwarzania będzie wybrany inny kanał danych, to przetwornik A/C doprowadzi do końca bieżące przetwarzanie, zanim dokona zmiany kanału.
Alternatywnie można wyzwolić przetwarzanie automatycznie z różnych źródeł. Automatyczne wyzwalanie jest włączane przez ustawienie bitu ADATE (ang. ADC Auto Trigger Enable bit) w rejestrze ADCSRA. Źródło wyzwalania jest wybierane ustawieniami bitów ADTS (ang. ADC Trigger Select bits) w rejestrze ADCSRB. Gdy w wybranym sygnale wyzwalającym pojawi się dodatnie zbocze (0 → 1), preskaler przetwornika A/C zostaje zresetowany i rozpoczyna się przetwarzanie. Udostępnia to metodę rozpoczynania przetwarzań w stałych okresach czasu. Jeśli sygnał wyzwalający jest wciąż ustawiony, gdy przetwarzanie zostaje ukończone, nowe przetwarzanie nie rozpocznie się. Jeśli w trakcie przetwarzania pojawi się kolejne zbocze dodatnie w sygnale wyzwalania, to zbocze to zostanie zignorowane. Zwróć uwagę, iż znacznik przerwania zostanie ustawiony nawet wtedy, gdy określone przerwanie jest zablokowane lub bit globalnego włączania przerwań (bit I) w rejestrze SREG jest wyzerowany. Stąd przetwarzanie może zostać wyzwolone bez powodowania przerwania. Jednakże znacznik przerwania musi zostać wyzerowany w celu wyzwolenia nowego przetwarzania przy następnym zdarzeniu przerwania.

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.
Standardowo układ kolejnych przybliżeń wymaga częstotliwości wejściowej pomiędzy 50 kHz a 200 kHz, aby osiągnąć maksymalną rozdzielczość. Jeśli jest potrzebna rozdzielczość niższa niż 10 bitów, to częstotliwość wejściowa dla przetwornika A/C może być wyższa od 200 kHz w celu osiągnięcia wyższej częstotliwości próbkowania.

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.

Gdy 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.

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.

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.

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 |
Bity MUXn i REFS1:0 w rejestrze ADMUX są buforowane poprzez rejestr tymczasowy, do którego mikroprocesor posiada swobodny dostęp. Zapewnia to, iż wybór kanałów i napięcia odniesienia odbywa się w bezpiecznym punkcie podczas procesu przetwarzania. Wybór ten jest ciągle uaktualniany aż do rozpoczęcia przetwarzania. Gdy przetwarzanie rozpocznie się, wybór kanałów i napięcia odniesienia zostaje zablokowany, aby zapewnić wystarczający czas próbkowania dla przetwornika A/C. Ciągłe uaktualnianie jest wznawiane w ostatnim cyklu zegarowym przetwornika A/C przed ukończeniem przetwarzania (zostaje ustawiony bit ADIF w rejestrze ADCSRA). Zwróć uwagę, iż przetwarzanie rozpoczyna się przy następnym narastającym zboczu zegara przetwornika A/C po zapisaniu bitu ADSC. Dlatego zaleca się użytkownikowi nie wpisywać nowych wartości wyboru kanału lub napięć odniesienia do ADMUX w ciągu jednego cyklu zegarowego przetwornika A/C po zapisie bitu ADSC.
Jeśli używane jest automatyczne wyzwalanie, to dokładny czas zdarzenia wyzwalania może być nieokreślony. Należy ze specjalną ostrożnością modyfikować rejestr ADMUX, aby kontrolować, które przetwarzanie zostanie wykonane z nowymi ustawieniami.
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.
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.
Napięcie odniesienia dla przetwornika A/C (VREF) oznacza 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ć albo VCC, albo wewnętrzne napięcie odniesienia 1,1V. Pierwsze przetwarzanie w przetworniku A/C po przełączeniu napięcia odniesienia może nie być dokładne i zaleca się użytkownikowi odrzucenie jego wyniku.
Przetwornik A/C posiada możliwość zmniejszania szumów, która umożliwia przetwarzanie podczas trybu uśpienia w celu zmniejszenia szumu pochodzącego od pracy mikroprocesora oraz innych układów peryferyjnych w mikrokontrolerze. Reduktor szumu może być używany z przetwornikiem A/C i trybem bezczynności (ang. Idle mode). Aby skorzystać z tej cechy, należy użyć następującej procedury:
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 szumu dla przetwornika A/C. Użytkownik powinien wpisać 0 do bitu ADEN, przed wejściem do takich trybów uśpienia, aby zapobiec nadmiernemu poborowi energii.
Układ analogowego wejścia dla kanałów przetwornika A/C jest pokazany na poniższym rysunku. Źródło analogowe przyłożone do końcówki ADCn jest obciążone pojemnością końcówki oraz upływami wejściowymi bez względu na to, czy ten kanał został wybrany jako wejście dla przetwornika A/C. Gdy kanał jest wybrany, źródło musi zasilić kondensator CS/H (ang. Sample and Hold capacitor – kondensator próbkowania i podtrzymania) poprzez szeregowy opornik (całkowita oporność na ścieżce wejścia).

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.
Składowe sygnału wyższe od częstotliwości Nyquista
Układy cyfrowe wewnątrz i na zewnątrz mikrokontrolera generują interferencje elektromagnetyczne, które mogą wpłynąć na dokładność pomiarów analogowych. Gdy dokładność przetwarzania jest istotna, to poziom szumów można obniżyć przez zastosowanie poniższych sposobów:
Tam, gdzie wymagana jest wysoka dokładność przetwornika A/C, zaleca się stosowanie trybu zmniejszania szumu, co opisano powyżej. Dobrze zaprojektowany system z właściwie rozmieszczonymi, zewnętrznymi kondensatorami bocznikowymi zmniejsza potrzebę stosowania trybu zmniejszania szumu dla przetwornika A/C.
Przetwornik Analogowo/Cyfrowy n-bitowy (ang. n-bit single-ended ADC) przetwarza w sposób liniowy napięcia pomiędzy GND a VREF w liczbę binarną o 2n poziomach. Najniższy kod daje odczyt 0, a najwyższy daje odczyt 2n-1. Kilka parametrów opisuje odchylenie od idealnego zachowania:




Błąd kwantyzacji lub szum kwantyzacji
(ang. quantization error): Z powodu
dyskretyzacji napięcia wejściowego na skończoną liczbę kodów,
pewien zakres napięć wejściowych (o szerokości
1 LSB) będzie zawsze kodowany w taką samą wartość kodu.
Zawsze
Dokładność bezwzględna (ang.
absolute accuracy): Maksymalne odchylenie rzeczywistego
(nieregulowanego) przejścia w porównaniu z przejściem idealnym dla każdego kodu wyjściowego.
Jest to całościowy wynik wszystkich powyższych błędów
przetwarzania przetwornika A/C. Wartość idealna:
Po zakończeniu przetwarzania (bit ADIF w stanie wysokim) wynik przetwarzania znajduje się w rejestrze danych przetwornika A/C (ADCL i ADCH). Wynik ten wynosi dla pojedynczego przetwarzania:

gdzie VIN jest napięciem na wybranej końcówce wejściowej, a VREF jest napięciem odniesienia. 0x000 reprezentuje napięcie o poziomie masy analogowej, a 0x3FF reprezentuje wybrane napięcie odniesienia minus jeden LSB (najmłodszy bit).
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x07 | - | REFS0 | ADLAR | - | - | - | MUX1 | MUX0 | ADMUX |
| Zapis/Odczyt | O | Z/O | Z/O | O | O | O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity w ATtiny13 są zarezerwowane i przy odczycie zawsze dają wartość zero.
Ten bit wybiera napięcie odniesienia dla przetwornika A/C, co pokazuje poniższa tabela. Jeśli bit REFS0 zostanie zmieniony podczas przetwarzania, to zmiana ta nie wejdzie w życia aż do czasu zakończenia bieżącego przetwarzania (aż zostanie ustawiony bit ADIF w rejestrze ADCSRA).
| REFS0 | Wybór napięcia odniesienia |
| 0 | Jako napięcie odniesienia zostanie użyte napięcie zasilania VCC. |
| 1 | Wewnętrzne napięcie odniesienia 1,1V. |
Bit ADLAR wpływa na sposób prezentacji wyniku przetwarzania przetwornika A/C w rejestrze danych ADC. Zapis jedynki do bitu ADLAR powoduje wyrównanie wyniku lewostronnie. W przeciwnym razie wynik jest wyrównany prawostronnie. Zmiana bitu ADLAR wpływa natychmiast na rejestr danych przetwornika A/C, bez względu na obecnie wykonywane przetwarzanie. Pełny opis tego bitu znajdziesz w opisie rejestru danych przetwornika A/C.
Wartość tych bitów określa wejście analogowe, które zostanie podłączone do przetwornika A/C. Szczegóły podaje poniższa tabela. Jeśli bity te zostaną zmienione podczas przetwarzania, to zmiana nie wejdzie w życia aż do czasu zakończenia bieżącego przetwarzania (aż zostanie ustawiony bit ADIF w rejestrze ADCSRA).
| MUX1:0 | Wejście dla przetwornika A/C |
| 00 | ADC0 (PB5) |
| 01 | ADC1 (PB2) |
| 10 | ADC2 (PB4) |
| 11 | ADC3 (PB3) |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x06 | 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 zostanie zapisany jedynką logiczną, włącza się automatyczne wyzwalanie przetwornika A/C. Przetwornik A/C rozpocznie przetwarzanie przy narastającym zboczu wybranego sygnału wyzwalającego. Źródło wyzwalania wybierane jest za pomocą ustawienia bitów ADTS w rejestrze ADCSRB.
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ą zegara systemowego 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 | - | - | - | - | - | - | ADC9 | ADC8 | ADCH |
| 0x04 | 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 | ADC9 | ADC8 | ADC7 | ADC6 | ADC5 | ADC4 | ADC3 | ADC2 | ADCH |
| 0x04 | 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. 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 | |
| 0x03 | - | ACME | - | - | - | ADTS2 | ADTS1 | ADTS0 | ADCSRB |
| 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 w ATtiny13 są zarezerwowane i przy odczycie zawsze dają wartość zero.
Gdy bit ten zostanie zapisany logiczną jedynką, a przetwornik analogowo/cyfrowy jest wyłączony (wyzerowany bit ADEN w rejestrze ADCSRA), multiplekser przetwornika A/C wybiera wejście odwracające dla komparatora analogowego. Jeśli do bitu ACME zostanie wpisane logiczne zero, to jako wejście odwracające komparatora analogowego będzie użyta końcówka AIN1.
Jeśli bit ADATE w rejestrze ADCSRA
zostanie zapisany logiczną jedynką, to wartość tych bitów
wybiera źródło sygnału, który będzie wyzwalał przetwarzanie w przetworniku A/C. Jeśli bit ADATE jest wyzerowany, to ustawienia
bitów ADTS2:0 nie będą miały żadnego znaczenia. Przetwarzanie
będzie wyzwalane narastającym zboczem w wybranym znaczniku
przerwania (zmianą z 0 na 1). Zwróć
uwagę, iż przełączenie z sygnału o poziomie niskim na sygnał o poziomie wysokim wytworzy narastające zbocze w sygnale
wyzwalającym. Jeśli bit ADEN w rejestrze
ADCSRA jest ustawiony, to rozpocznie się w tej sytuacji
przetwarzanie. Przełączenie w tryb ciągły
(ang. Free Running mode,
| ADTS2 | ADTS1 | ADTS0 | Źródło wyzwalania |
| 0 | 0 | 0 | Tryb ciągły |
| 0 | 0 | 1 | Komparator analogowy |
| 0 | 1 | 0 | Znacznik przerwania zewnętrznego 0 |
| 0 | 1 | 1 | Zgodność porównania A w timerze/liczniku |
| 1 | 0 | 0 | Przepełnienie timera/licznika |
| 1 | 0 | 1 | Zgodność porównania B w timerze/liczniku |
| 1 | 1 | 0 | Żądanie przerwania przy zmianie stanu końcówki |
| 1 | 1 | 1 | Zarezerwowane w ATtiny13 |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x14 | - | - | ADC0D | ADC2D | ADC3D | ADC1D | AIN1D | AIN0D | DIDR0 |
| Zapis/Odczyt | O | 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 w ATtiny13 są zarezerwowane i przy odczycie zawsze dają wartość zero.
Gdy któryś z tych bitów zostanie zapisany logiczną jedynką, to zostaje wyłączony bufor cyfrowego wejścia połączony z odpowiadającą mu końcówką wejścia analogowego dla przetwornika A/C.
![]() |
|
Odpowiadający mu bit rejestru PIN będzie dawał zawsze odczyt zero. Gdy sygnał analogowy jest doprowadzony do końcówki ADC3...0, a odczyt cyfrowy z tej końcówki nie jest potrzebny, to bit ADCnD powinien być zapisany logiczną jedynką w celu obniżenia poboru prądu w cyfrowym buforze wejścia.
Gdy w bicie AIN1D, AIN0D zostanie zapisana logiczna jedynka, zostaje wyłączony bufor cyfrowy połączony z daną końcówką. Wtedy odpowiadający mu bit w rejestrze PINB będzie zawsze dawał odczyt 0. Gdy do końcówki AIN1/0 zostaje przyłożone napięcie analogowe, a nie jest potrzebne wejście cyfrowe z tej końcówki, odpowiedni bit AIN1D/AIN0D powinien zostać ustawiony w celu zmniejszenia poboru prądu w cyfrowym buforze wejścia.
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 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.