Kurs XMEGA: przetwornik DAC

Przetwornik cyfrowo-analogowy to kolejna nowość w XMEGA względem starszych rodzin AVR, gdzie był on dostępny jedynie w mikrokontrolerach przeznaczonych do zastosowań specjalistycznych, jak np. AT90PWM3B. W XMEGA przetwornik DAC dostępny jest w zdecydowanej większości mikrokontrolerów – jedynie najtańsze i najuboższe nie mają tego układu.

Przetwornik DAC przetwarza wartość cyfrową na napięcie, które możemy wykorzystać do sterowania układów analogowych, np. jasnością diody. Można zbudować generator sygnałów analogowych (co zademonstruję w dalszej części tego odcinka) lub można pójść o krok dalej i zrobić odtwarzacz plików audio, co z wykorzystaniem DAC i DMA nie jest bardzo skomplikowane.

W XMEGA ma 12-bitową rozdzielczość, co oznacza, że możliwe jest uzyskanie 4096 poziomów napięcia pomiędzy zerem, a napięciem referencyjnym przetwornika, które wyznacza jakie maksymalne napięcie przetwornik może wygenerować. Mamy do wyboru cztery napięcia odniesienia:

  • AVCC – napięcie zasilające podłączone do pinu zasilającego procesor. Ze względu na liczne szumy na liniach zasilających, nie zaleca się stosowania tego rozwiązania w aplikacjach wymagających dużej precyzji
  • Wewnętrzne 1V – jest to najlepsze wbudowane źródło odniesienia o wystarczającej stabilności do większości zastosowań
  • AREFA i AREFB – są to odpowiednio piny A0 i B0, do których możemy podłączyć zewnętrzne źródło napięcia odniesienia

Napięcie referencyjne wyznacza maksymalne napięcie, jakie można uzyskać na wyjściu przetwornika. Jest ono liniowo proporcjonalne do liczby wpisanej do rejestru CHxDATA, a formalnie napięcie wyjściowe opisuje poniższe równanie.

Wzór na przetwornik cyfrowo-analogowy

DAC posiada dwa niezależne kanały o numerach 0 i 1, a każdy posiada przepustowość rzędu miliona próbek na sekundę. Wyjścia kanałów w ATxmega128A3U są niestety na sztywno połączone z pinami B2 i B3 (oznaczonymi na płytce eXtrino XL etykietami DAC0 i DAC1). Kanał 0 można wewnętrznie połączyć z komparatorem analogowym oraz przetwornikiem analogowo-cyfrowym.

Budowa wewnętrzna DAC w XMEGA

Konwersja rozpoczyna się w dwóch przypadkach. Pierwszy polega na „ręcznym” wpisaniu wartości do rejestru CHxDATA, po czym przetwornik samoczynnie generuje właściwe napięcie na swoim wyjściu. Przed wpisaniem kolejnej wartości należy sprawdzić, czy przetwornik zakończył już przetwarzanie, by nie zakłócić jego pracy. Druga metoda zdecydowanie automatyzuje proces przetwarzania i dobra jest, kiedy chcemy uzyskać generator jakiegoś sygnału. Sztuczka polega na tym, że po zakończeniu konwersji, przetwornik zgłasza do układu DMA żądanie przesłania kolejnej próbki. Konwersja następuje po podaniu sygnału wyzwalającego przez system zdarzeń, pochodzącego np. od timera. Dzięki temu można łatwo i efektywnie wysyłać kolejne próbki w równych odstępach czasu. W dalszej części kursu przećwiczymy obie metody obsługi przetwornika.