Modułowy odtwarzacz MP3 (1)

Praktyczne testy – sprzęt

Do testowania odtwarzacz MP3 użyłem modułu ewaluacyjnego Microchip Microstick II z 16 bitowym mikrokontrolerem PIC24 FJ64GB002. Moduł ma wbudowany programator/debugger i jest w pełni obsługiwany przez wtyczkę MCC środowiska MPLAB X IDE. Oprócz modułu odtwarzacza MP3, podłączonego do mikrokontrolera przez interfejs UART, wykorzystałem mały wyświetlacz OLED z interfejsem SPI oraz impulsator ze stykiem zwieranym przyciśnięciem osi – rysunek 2.

Rysunek 2. Układ testowy

Praktyczne testy – oprogramowanie

Za pomocą MCC (MPLAB Code Configurator) szybko skonfigurowałem interfejs UART. Obsługa jest oparta na systemie przerwań i ma programowy bufor nadajnika i odbiornika – rysunek 3. MCC, na podstawie częstotliwości taktowania mikrokontrolera (8 MHz) i zadanej prędkości transmisji (9600 bd), konfiguruje rejestry liczników odpowiedzialnych za prędkość transmisji interfejsu UART.

Procedura inicjalizacji UART wygenerowana przez MCC została pokazana na listingu 1.

Listing 1. Inicjalizacja UART-a

Obsługa komunikacji przez UART

Do sterowania modułem są nam potrzebne procedury wysyłania (listing 2) i odbierania (listing 3) bajtu przez UART.

Listing 2. Wysyłanie bajtu przez interfejs UART

Listing 3. Odbieranie bajtu przez UART

Zapis komendy do modułu

Wyposażeni w procedury wysyłania i odbierania bajtów przez UART ,możemy przystąpić do napisania procedur wysyłających komendy do modułu odtwarzacza. Podstawowa funkcja wysłania komendy WriteCmdYX ma trzy argumenty: kod komendy, parametr 1 i parametr 2 – listing 4.

Listing 4. Procedura wysyłania komendy do YX5300

Funkcje realizacji komend

Jeżeli po wysłaniu komendy moduł ma odpowiedzieć potwierdzeniem, to po bajcie komendy cmd trzeba wysłać bajt 0x01. Za pomocą funkcji WriteCmdYX można już sterować wszystkimi funkcjami odtwarzacza. Żeby było wygodniej można napisać szereg prostych funkcji realizujących poszczególne komendy (listing 5).

Listing 5. Funkcje komend odtwarzacza

Główna pętla programu

Testowe odtwarzanie odbywa się w pętli nieskończonej. Na początku pętli jest sprawdzany warunek przyciśnięcia osi i zwarcia styku. Jeżeli oś jest przyciśnięta, to program najpierw czeka na jej zwolnienie, a potem analizuje stan dwu zmiennych: cont i pauza. Zależnie od ich stanu przyciśnięcie powoduje wysłanie komendy Pauza (PauzaP()), lub kontynuuj (ContP()). Obrócenie ośki enkodera powoduje zmianę poziomu sygnału audio ustawianą komendą VolSet z argumentem zmieniającym się od 0 do 32.

Po sprawdzeniu stanu procedury obsługi enkodera program sprawdza czy moduł nie wysłał do mikrokontrolera przez UART danych. W programie zostało wyłączone wysyłanie potwierdzeń i możemy się spodziewać tylko ramki z danymi sygnalizującymi koniec odtwarzania utworu. Jeżeli dane zostały odebrane i jest to ramka sygnalizująca koniec odtwarzania, to jest wysyłana komenda odtwarzająca kolejny utwór z katalogu.

Pętla została pokazana na listingu 6.

Listing 6. Pętla testowania modułu YX5300

Moduł testowany w ten sposób działa bez problemu. Wszystkie funkcje są wykonywane prawidłowo. Po włączeniu potwierdzenia każde wysłanie komendy skutkuje przesłaniem ramki z danymi. W aplikacjach wymagających dużej niezawodności wskazane byłoby włączenie potwierdzenia i przesyłanie bajtów CRC. Dla mniej wymagających zastosowań nie jest to konieczne.

Tomasz Jabłoński

 Zachęcamy do przeczytania też części drugiej artykułu

O autorze

Absolwent Wydziału Elektroniki Politechniki Wrocławskiej, współpracownik miesięcznika Elektronika Praktyczna, autor książek o mikrokontrolerach Microchip i wyświetlaczach graficznych, wydanych nakładem Wydawnictwa BTC.
Zawodowo zajmuje się projektowaniem zaawansowanych systemów mikroprocesorowych.