Digital Analog Converter

Odtwarzanie muzyki na mikrokontrolerze

DAC (Digital Analog Converter) czyli przetornik cyfrowo analogowy to układ zamieniajcy wartości binarne na napięcie wyjściowe. Nie nie stoi na przeszkodzie, żeby napięcie zmieniało się w okresowo, a więc bez problemu można uzyskać na wyjsciu falę o porządanym kształcie. Falą tą może być przebieg trójkątny lub sisnus, a zbiór sinusów może być opisem fali dzźwiękowej. W ten oto sposób doszliśmy do jednego z zastosowań DAC, które zostanie opisane poniżej - otwarzanie plików dźwiękowych w formacie *.wav

Format *.wav jest zapisem dźwięku w formie nieskompresowanej, a więc nie ma konieczność by mikrokontroler musiał jeszcze dekodować odtwarzany utwór. Poniższy opis będzie dotyczył następujących parametrów pliku *.wav: PCM, 8khz, mono


dac + stm32 audio player stm32

Na powyższym zdjęciu widać popularną płytkę "BluePill", jednak został w niej wymieniony procesor z stm32F103C8 na stm32f303CC.

Procesory z serii F1 należy uznać już za wychodzące z użycia (obsolete), to dość leciwa konstrukcja - jego resejtry nie są poukładane w tak przemyślany sposób jak w nowszych procesorach (konfiguracja gpio w nowszej serii F0 to wręcz przyjemność), peryferia wyraźnie uboższe, a energoosczędność dość słabo wypada na tle nowszych układów.

Przykładowa konfiguracja DAC dla STM32 z użyciem operacji na rejestrach. Wystarczające jest jedynie uruchomienie DAC, Timera 6 (nawet dokumentacja wspomina że został dodany z myślą o wyzwalaniu DAC), oraz skonfigurowanie DMA. W poniższym przykładzie próbki pobierane są z tablicy umieszczonej w pamięci flash mikronotrolera (nic nie stoi jednak na przeszkodzie by odczytywać je bezpośrednio z karty SD). W celu skonwertowania pliku na *.wav na tablice C użyty został linuxowy program xxd (aby zamienić plik dźwiękowy na gotowy plik do użycia w projekcie wystarczy wydać w termianu polecenie xxd -i plik.wav plik.c


Przykładowy plik dźwiękowy zapisany jako tablica C można znaleźć pod tym linkmiem. Należy mieć świadomość, że pliki dźwiękowe są bardzo duże i nawet kilkusekundowy utwór potrafi zająć całą pamięć flash mikrokontrolera.

TAGS: dma, uart, ethernet