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 |
©2023 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
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.
Schemat blokowy przetwornika analogowo cyfrowego
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.
Logika autowyzwalania przetwornika A/C
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 przetwarzania 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.
Preskaler przetwornika A/C
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. Podział w 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.
Wykres czasowy
przetwornika A/C, pierwsze przetwarzanie (tryb
pojedynczego przetwarzania)
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.
Wykres czasowy
przetwornika A/C, pojedyncze przetwarzania
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.
Wykres czasowy
przetwornika A/C, przetwarzanie z autowyzwalaniem
W trybie ciągłym nowe przetwarzanie rozpoczyna się natychmiast po zakończeniu poprzedniego, a bit ADSC pozostaje w stanie wysokim.
Wykres czasowy
przetwornika A/C, przetwarzanie ciągłe
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 |
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 VREF = Vcc. Kanały o napięciu przewyższającym VREF dadzą w wyniku kody nasycone do 0xFF.
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. Uzytkownik powinien wpisać 0 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.
Składowe sygnału wyższe od częstotliwości Nyquista (fADC/2) nie powinny btć 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.
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.
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, a 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.
Wybór źródeł autowyzwalania dla przetwornika A/C
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 q, 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 ©2023 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: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.