Modułowy odtwarzacz MP3 (2)

Praktyczne testy

Ponieważ napięcia zasilające i interfejs sterujący jest taki sam jak w module YX5300, zastosowałem taki sam układ testowy z modułem Microstick II, wyświetlaczem OLED i enkoderem. Dokładnie w taki sam sposób został skonfigurowany układ UART oraz obsługa wyświetlacza i enkodera.

Odtwarzanie

Funkcje komend zapisują bufor BufCmd kolejnymi bajtami przesyłanymi przez UART do modułu. Na listingu 7 jest pokazana funkcja PlayMp3() wysyłająca komendę PLAY o kodzie 01h.

Listing 7. Komenda PLAY

Najpierw do bufora BufCmd[] są zapisywane bajty: startu, ilości danych, kodu komendy i stopu. Potem na ekranie wyświetlacza jest wyświetlana informacja o uruchomieniu odtwarzania „PLAY TRACK” i wywoływana jest funkcja WriteCmdMp3() z argumentami: wskaźnikiem na bufor z bajtami do wysłania i ilością danych do wysłania.

Listing 8. Funkcja wysłania bajtów komendy

Po wysłaniu bajtów komendy program odczekuje 50 ms na odebranie potwierdzenia. To dużo więcej niż potrzeba. Każdy bajt to 10 bitów przesyłanych z prędkością 9600 bitów na sekundę. Czyli przesłanie jednego bajtu trwa 1/9600*10=1,04 ms . Trzy bajty potwierdzenia to ok 3 ms, 4 bajty odpowiedzi po komendach o status modułu to ok 4ms . Jednak przy obserwowaniu transmisji na oscyloskopie widać było, że moduł nie odsyła odpowiedzi natychmiast.

Program sprawdza czy bajty zostały odebrane testując status transmisji funkcją UART1_TransferStatusGet();. W innych implementacjach użytkownik musi sobie zapewnić możliwość odbierania bajtów i sygnalizację odebrania.

Po odebraniu odpowiedzi następuje analiza odebranych znaków. Wykrycie znaków „OK” oznacza prawidłowo odebrana komendę, wykrycie znaku „E” oznacza niezidentyfikowane polecenie, wykrycie innych znaków jest sygnalizowane brakiem potwierdzenia NACK. Komendy PAUZA i STOP zostały pokazane na listingu 9.

Listing 9. Komedy PAUZA i STOP

Głośność

Z zestawu komend konfigurujących najczęściej używana będzie komenda ustawiania głośności – listing 10.

Listing 10. Ustawianie głośności

W tym przypadku po kodzie komendy jest wysyłany jeden bajt argumentu mogący mieć wartość z zakresu 0…30.

Wybór utworu

Do przedstawionych wyżej komend trzeba dołączyć komendę wyboru pliku na podstawie numeru katalogu i numeru pliku (listing 11) i można zbudować prosty ale funkcjonalny odtwarzacz mp3.

Listing 11. Funkcja wyboru pliku do odtwarzania

Podsumowanie

Pokazane w artykule moduły odtwarzacz MP3 są głównie przeznaczone do zastosowań przemysłowych. Zbudowanie „konsumenckiego” odtwarzacza plików muzycznych mp3 jest również możliwe, ale kłopotliwe. Przeszkodą mogą być narzucone nazwy plików oraz brak możliwości odczytania rzeczywistej nazwy pliku będącej jednocześnie nazwą utworu. Żeby skutecznie wybierać utwory do odtwarzania trzeba za każdym razem zmieniać ich nazwę, tak by zaczynała się od trzycyfrowej liczby.

Ta niedogodność jest jednocześnie zaletą kiedy chcemy wybierać komunikaty głosowe nie na podstawie dowolnej nazwy składającej się ze znaków ASCII, ale na podstawie wartości cyfrowej. Takie rozwiązanie bardzo ułatwia odtwarzanie komunikatów zależnie od jakiejś wartości, na przykład napięcia, mocy, temperatury, itp.

Podczas testów okazało się, że oba moduły radzą sobie z podanymi częstotliwościami próbkowania, ale gorzej jest z przepływnością. Na początku przez zupełny przypadek umieściłem na nośniku pliki z przepływnością 320kb/s. Moduł YX5300 jakoś sobie poradził. Odtwarzacz MP3 z interfejsem USB odtwarzał materiał dźwiękowy ze sporym poziomem szumów i chwilowymi zniekształceniami. Widać było ,że wbudowany mikrokontroler nie bardzo radził sobie z takim plikiem. Materiał nagrany w 64 kB/s i 128 kb/s był odtwarzany z dobrą jakością. Zważywszy na przeznaczenie modułów, trudno to zakwalifikować jako wadę, gdyż przepływność 128 kb/s daje już bardzo dobrą jakość.

Na pewno ze względu na bardzo korzystny stosunek cena/możliwości warto się zainteresować zastosowaniem tego rozwiązania we własnych konstrukcjach. Trzeba jednak pamiętać, że problemem może być stabilność dostaw.

Tomasz Jabłoński

O autorze