|
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 ATtiny 5/10 zawiera 8-bitowy,
kompensacyjny przetwornik analogowo/cyfrowy (ang. ADC –
Analog to Digital Converter). Przetwornik A/C połączony jest z 4-kanałowym
multiplekserem analogowym, który pozwala na
podłączenie do końcówek portu B mikrokontrolera 4 różnych napięć. Napięcia te są mierzone względem masy 0V
(GND).
Przetwornik A/C zawiera
układ próbkowania z pamięcią, który
zapewnia, iż napięcie wejściowe dla przetwornika A/C będzie utrzymywane na stałym poziomie podczas przetwarzania. Schemat
blokowy przetwornika A/C umieszczony jest w następnym podrozdziale.
Wewnętrzne napięcie odniesienia VREF jest udostępniane przez sam mikrokontroler.
Przetwornik A/C nie jest dostępny w mikrokontrolerach ATtiny 4 i 9.
W celu umożliwienia korzystania z przetwornika A/C, należy wyłączyć bit ograniczania poboru energii (ang. Power Reduction bit, PRADC) w rejestrze zmniejszania poboru energii. Wykonuje się to przez wyzerowanie bitu PRADC. Zobacz na opis rejestru PRR.
Przetwornik A/C jest włączany przez ustawienie bitu ADEN w rejestrze A sterowania i stanu przetwornika A/C (ang. ADCSRA – ADC Control and Status Register A). Wybór kanału wejściowego nie będzie ważny, dopóki bit ADEN nie zostanie ustawiony. Przetwornik A/C nie zużywa energii przy wyzerowanym bicie ADEN, zatem zaleca się wyzerowanie tego bitu przed wejściem w tryb uśpienia oszczędzający energię.
Przetwornik A/C przetwarza analogowe napięcie wejściowe na 8-bitową wartość cyfrową wykorzystując metodę kolejnych przybliżeń (opisaliśmy taki przetwornik tutaj). Wartość minimalna reprezentuje napięcie masy GND, a wartość maksymalna reprezentuje napięcie zasilające VCC.
Analogowy kanał wejściowy wybiera się przez zapis bitów MUX1:0 w rejestrze multipleksera przetwornika A/C, ADMUX. Każda z końcówek wejściowych ADC0...ADC3 może zostać wybrana jako wejście dla przetwornika A/C.

Przetwornik A/C generuje 8-bitowy wynik, który jest obecny w rejestrze danych przetwornika, ADCL.
Przetwornik A/C posiada swoje własne żądanie obsługi przerwania, które może być wyzwalane przy zakończeniu przetwarzania.

Upewnij się, że bit PRADC w rejestrze zmniejszania poboru energii (ang. Power Reduction Register, PRR) jest wyzerowany, co umożliwi zasilanie przetwornika A/C. Pojedyncze przetwarzanie rozpoczyna się po zapisie logicznej jedynki do bitu rozpoczęcia przetwarzania w przetworniku A/C (ang. ADC Start Conversion bit, ADSC w rejestrze ADCSRA). Ten bit pozostaje w stanie wysokim tak długo, jak trwa przetwarzanie, po czym jest sprzętowo zerowany, gdy przetwarzanie zakończy się. Jeśli w trakcie przetwarzania zostanie wybrany inny kanał wejścia, to przetwornik zakończy bieżące przetwarzanie zanim zmieni ten kanał.
Alternatywnie przetwarzanie może być wyzwalane automatycznie przez różne źródła. Autowyzwalanie jest włączane przez ustawienie bitu ADATE w rejestrze ADCSRA. Źródło wyzwalania jest wybierane przez bity ADTS w rejestrze ADCSRB. Gdy w sygnale wyzwalającym pojawi się dodatnie zbocze, to preskaler przetwornika A/C zostaje zresetowany i rozpoczyna się przetwarzanie. Daje to możliwość rozpoczynania przetwarzania w ustalonych odstępach czasu. Jeśli sygnał wyzwalania wciąż jest ustawiony przy końcu przetwarzania, nowe przetwarzanie nie zostanie uruchomione. Jeśli w trakcie przetwarzania pojawi się kolejne zbocze dodatnie w sygnale wyzwalającym, to zbocze to zostanie zignorowane. Zwróć uwagę, iż znacznik przerwania zostanie ustawiony, nawet jeśli określone przerwanie jest wyłączone. W ten sposób przetwarzanie może zostać wyzwolone bez wywoływania przerwania. Jednakże znacznik przerwania musi zostać wyzerowany, aby wyzwolić nowe przetwarzanie przy następnym zdarzeniu przerwania.

Używanie znacznika przerwania od przetwornika A/C jako źródła wyzwalania sprawia, że przetwornik rozpoczyna nowe przetwarzanie tuż po zakończeniu bieżącego. W takim przypadku przetwornik pracuje w trybie ciągłym (ang. Free Running mode), ciągle próbkując i uaktualniając rejestr danych ADCL. Pierwsze przetwarzanie musi zostać uruchomione przez zapis logicznej jedynki do bitu ADSC w rejestrze ADCSRA. W trybie tym przetwornik będzie wykonywał kolejne przetwarzania niezależnie od stanu znacznika przerwania ADIF.
Jeśli autowyzwalanie jest wyłączone, pojedyncze przetwarzanie można uruchamiać przez zapis jedynki do bitu ADSC w ADCSRA. Bit ADSC może również być używany do sprawdzania, czy przetwarzanie jest w trakcie wykonywania. Podczas przetwarzania bit ten daje odczyt 1 bez względu na sposób uruchomienia tego przetwarzania.
Standardowo układ kompensacyjny wymaga częstotliwości zegara wejściowego pomiędzy 50kHz a 200 kHz, aby osiągnąć maksymalną rozdzielczość.

Moduł przetwornika A/C zawiera 7-bitowy preskaler, który generuje impulsy zegarowe dla przetwornika w odpowiednim zakresie częstotliwości z impulsów zegarowych mikroprocesora o częstotliwości powyżej 100kHz. Wybór częstotliwości impulsów zegarowych z preskalera jest dokonywany przez ustawienie bitów ADPS w ADCSRA. Preskaler rozpoczyna zliczanie od momentu włączenia przetwornika A/C przez ustawienie bitu ADEN w ADCSRA. Preskaler pracuje tak długo, jak bit ADEN jest ustawiony, a jest ciągle resetowany, gdy bit ADEN przyjmuje stan niski.
Przy inicjowaniu pojedynczego przetwarzania przez ustawienie bitu ADSC w ADCSRA, przetwarzanie rozpoczyna się od następnego narastającego zbocza cyklu zegarowego przetwornika A/C.
Zwykłe przetwarzanie zajmuje 13 cykli zegarowych przetwornika A/C. Pierwsze przetwarzanie po włączeniu przetwornika (ustawienie bitu ADEN w ADCSRA) zajmuje 25 cykli zegarowych w celu inicjalizacji obwodów analogowych.

Faktyczne próbkowanie napięcia wejściowego i zapamiętanie jego wartości na czas przetwarzania w przetworniku A/C ma miejsce w trzecim cyklu zegarowym przetwornika po rozpoczęciu normalnego przetwarzania, a po szesnastym cyklu po rozpoczęciu pierwszego przetwarzania po włączeniu przetwornika. Gdy przetwarzanie zostanie zakończone, wynik jest wpisywany do rejestru danych przetwornika, a znacznik ADIF zostaje ustawiony. W trybie pojedynczego przetwarzania bit ADSC jest w tym momencie zerowany. Oprogramowanie może ustawić go ponownie, a nowe przetwarzanie rozpocznie się od pierwszego narastającego zbocza sygnału zegarowego przetwornika A/C.

Gdy jest używane samowyzwalanie, preskaler zostaje zresetowany przy zdarzeniu wyzwalającym. Zapewnia to ustalony odstęp czasu pomiędzy zdarzeniem wyzwalającym a rozpoczęciem przetwarzania. W tym trybie próbkowanie z zapamiętaniem ma miejsce po dwóch cyklach zegarowych przetwornika A/C od narastającego zbocza źródłowego sygnału wyzwalania. Trzy dodatkowe cykle zegara mikroprocesora są zużyte dla układów synchronizujących.

W trybie ciągłym nowe przetwarzanie rozpoczyna się natychmiast po zakończeniu poprzedniego, a bit ADSC pozostaje w stanie wysokim.

Poniższa tabela podsumowuje czasy przetwarzania w przetworniku A/C:
| Warunek | Próbkowanie z zapamiętaniem Liczba cykli od rozpoczęcia przetwarzania |
Czas przetwarzania (w cyklach) |
| Pierwsze przetwarzanie | 16,5 | 25 |
| Normalne przetwarzania | 3,5 | 13 |
| Przetwarzania z autowyzwalaniem | 4 | 13,5 |
Bity MUXn w rejestrze ADMUX są pojedynczo buforowane poprzez rejestr tymczasowy, do którego ma swobodny dostęp mikroprocesor. Zapewnia to, iż wybór kanału ma miejsce tylko w bezpiecznym punkcie podczas przetwarzania. Kanał jest stale uaktualniany aż do rozpoczęcia przetwarzania. Gdy przetwarzanie się rozpocznie wybór kanału zostaje zablokowany, aby zapewnić wystarczający czas próbkowania dla przetwornika A/C. Stałe uaktualnianie zostaje wznowione w ostatnim cyklu zegarowym przetwornika przed zakończeniem przetwarzania (bit ADIF w ADCSRA jest ustawiany). Zwróć uwagę, że przetwarzanie rozpoczyna się od następnego narastającego zbocza sygnału zegara przetwornika A/C po zapisaniu bitu ADSC. Z tego powodu użytkownik nie powinien wpisywać nowych wartości wyboru kanału do ADMUX, aż upłynie jeden okres zegara przetwornika A/C po wpisaniu bitu ADSC.
Jeśli jest używane autowyzwalanie, to dokładny czas zdarzenia wyzwalającego może być niedeterministyczny. Aktualizacja rejestru ADMUX musi być wykonywana ze szczególną ostrożnością, aby kontrolować, na które przetwarzanie wpłyną nowe ustawienia.
Jeśli oba bity ADATE i ADEN zostaną zapisane stanem 1, to zdarzenie przerwania może wystąpić w dowolnym czasie. Jeśli rejestr ADMUX jest zmieniany w tym okresie, to użytkownik nie będzie wiedział, czy następne przetwarzanie będzie oparte na nowych, czy na starych ustawieniach. Rejestr ADMUX można bezpiecznie uaktualnić następująco:
Gdy rejestr ADMUX jest modyfikowany w trakcie jednego z tych warunków, nowe ustawienia wpłyną na następne przetwarzanie w przetworniku A/C.
Przy zmianie wyboru kanału użytkownik powinien przestrzegać poniższych wskazówek, aby zapewnić, iż został wybrany właściwy kanał:
Napięcie odniesienia przetwornika A/C określa zakres
przetwarzania, który w tym przypadku jest ograniczony do przedziału od 0V (VGND) do
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 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ływom wejściowym 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 (połączona oporność ścieżki 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
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.
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.
N-bitowy Przetwornik Analogowo/Cyfrowy o pojedynczej końcówce (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:




Po zakończeniu przetwarzania (bit ADIF w stanie wysokim) wynik przetwarzania znajduje się w rejestrze danych przetwornika A/C (ADCL). Wynik ten wynosi:

gdzie VIN jest napięciem na wybranej końcówce wejściowej, a VCC jest napięciem odniesienia. 0x00 reprezentuje napięcie o poziomie masy analogowej, natomiast 0xFF reprezentuje wybrane napięcie odniesienia minus jeden LSB (najmłodszy bit).
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x1B | - | - | - | - | - | - | MUX1 | MUX0 | ADMUX |
| Zapis/Odczyt | O | O | O | O | O | O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity są zarezerwowane i przy odczycie zawsze dają stan 0.
Wartość tych bitów wybiera wejściowy kanał analogowy, który zostanie podłączony do wejścia przetwornika A/C wg poniższej tabeli:
| MUX1 | MUX0 | Wejście analogowe |
Końcówka |
| 0 | 0 | ADC0 | PB0 |
| 1 | ADC1 | PB1 | |
| 1 | 0 | ADC2 | PB2 |
| 1 | ADC3 | PB3 |
Jeśli bity te zostaną zmienione podczas przetwarzania, to zmiana wejdzie w życie dopiero po zakończeniu tego przetwarzania (gdy bit ADIF w ADCSRA zostanie ustawiony).
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x1D | ADEN | ADSC | ADATE | ADIF | ADIE | ADPS2 | ADOS1 | 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 |
Ustawienie tego bitu w stan 1 włącza przetwornik A/C. Po wpisaniu tutaj bitu 0 przetwornik A/C zostaje wyłączony. Wyłączenie przetwornika podczas przetwarzania przerywa to przetwarzanie.
W trybie pojedynczego przetwarzania (ang. Single Conversion mode) zapisz do tego bitu 1, aby rozpocząć każde przetwarzanie. W trybie ciągłym (ang. Free Running mode) zapisz tutaj 1, aby rozpocząć pierwsze przetwarzanie. Pierwsze przetwarzanie po ustawieniu bitu ADSC i włączeniu przetwornika A/C lub gdy bit ADSC jest ustawiany równolegle z bitem ADEN, zajmie 25 cykli zegarowych przetwornika A/C zamiast normalnych 13 cykli. Podczas pierwszego przetwarzania wykonywana jest inicjalizacja przetwornika A/C.
W trakcie przetwarzania bit ADSC będzie dawał odczyt 1. Gdy przetwarzanie zostanie wykonane, bit wróci do stanu 0. Zapisanie 0 do tego bitu nie daje żadnego efektu.
Gdy ten bit zostanie zapisany stanem 1, zostaje włączone autowyzwalanie przetwornika A/C. Przetwornik A/C będzie rozpoczynał przetwarzanie przy dodatnim zboczu wybranego sygnału wyzwalającego. Źródło sygnału wyzwalającego jest wybierane przez ustawienie stanu bitów wybierania źródła wyzwalania ADTS w rejestrze ADCSRB.
Ten bit jest ustawiany, gdy zakończy się przetwarzanie w przetworniku A/C i rejestry danych (w ATtiny 5/10 jest tylko jeden rejestr danych) zostają uaktualnione. Żądanie przerwania przy zakończeniu przetwarzania w przetworniku A/C zostanie wygenerowane, jeśli bit ADIE jest ustawiony. Bit ADIF jest zerowany sprzętowo przy wykonaniu odpowiedniego wektora obsługi przerwania. Alternatywnie można go wyzerować przez zapis logicznej jedynki do tego znacznika.
Gdy bit ten zostanie zapisany stanem 1, to zostanie włączone żądanie przerwań 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ą zegara wejściowego dla przetwornika A/C. Poniższa tabela przedstawia możliwe wartości:
| 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 |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x1C | - | - | - | - | - | ADTS2 | ADTS1 | ADTS0 | ADCSRB |
| Zapis/Odczyt | O | O | O | O | O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity są zarezerwowane i przy odczycie zawsze dają stan 0.
Jeśli bit ADATE w ADCSRA zostanie zapisany stanem jeden, to wartość tych bitów wybierze, które źródło będzie wyzwalało przetwarzanie w przetworniku A/C. Jeśli bit ADATE jest wyzerowany, to ustawienia bitów ADTS2:0 nie będą miały żadnego efektu. Przetwarzanie będzie wyzwalana przez narastające zbocze wybranego znacznika przerwania. Zwróć uwagę, iż przełączenie ze źródła wyzwalania będącego w stanie niskim na źródło będące w stanie wysokim wygeneruje dodatnie zbocze sygnału wyzwalania. Jeśli bit ADEN w ADCSRA jest ustawiony, to rozpocznie się przetwarzanie. Przełączenie na tryb ciągły (ADTS[2:0]=0) nie wywoła zdarzenia wyzwalającego, nawet jeśli znacznik przerwania zostanie ustawiony.
| 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 | Zdarzenie Input Capture w timerze/liczniku |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x19 | ADC7 | ADC6 | ADC5 | ADC4 | ADC3 | ADC2 | ADC1 | ADC0 | ADCL |
| Zapis/Odczyt | O | O | O | O | O | O | O | O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Gdy przetwarzanie zostanie zakończone, tutaj znajduje się 8-bitowy wynik.
Te bity reprezentują wynik przetwarzania.
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x17 | - | - | - | - | ADC3D | ADC2D | ADC1D | ADC0D | DIDR0 |
| Zapis/Odczyt | O | O | O | O | Z/O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity są zarezerwowane i przy odczycie zawsze dają stan 0.
Gdy dany bit ma stan logiczny 1, to cyfrowy bufor wejściowy na odpowiadającej mu końcówce przetwornika A/C zostaje wyłączony. W takim przypadku odczyt stanu końcówki w rejestrze PIN da zawsze wartość 0. Gdy do końcówki ADC3...0 zostaje doprowadzony sygnał analogowy, a wejście cyfrowe tej końcówki nie jest potrzebne, to ten bit powinien zostać zapisany stanem 1, aby zmniejszyć pobór prądu w cyfrowym buforze wejściowym.
![]() |
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.