- Płytka o wymiarach 102×155 mm
- Typy obsługiwanych kart: MMC/SD
- System plików: FAT16/32
- Prędkość transmisji przez port MIDI: 31,250 kbd.
- Elementy sterowania: 4 przyciski, wyświetlacz LCD informujący o odtwarzanym pliku MIDI
Do czego może być przydatny prezentowany w artykule odtwarzacz? Na pewno będą wiedzieli użytkownicy wszelkich keyboardów. Najnowsze ich modele są już standardowo wyposażone w czytnik popularnych kart SD/MMC, na których można przechowywać pliki MIDI przeznaczone do odtwarzania. Starsze keyboardy posiadały najczęściej wbudowany napęd dyskietek 3,5 cala, który wyszedł już praktycznie z użycia. Istnieje jednak możliwość unowocześnienia tego typu instrumentów poprzez zastosowanie przystawki służącej do odtwarzania plików MIDI, która będzie podłączana do instrumentu poprzez gniado MIDI. Zaprezentowany w dalszej części artykułu odtwarzacz MIDI umożliwia odtwarzanie plików MIDI w formacie 0, odczytywanych z karty SD/MMC. W przypadku plików MIDI zapisanych w innych formatach, dostępne są liczne programy konwertujące pliki MIDI do formatu 0. Początkowo zastanawiałem się nad wykorzystaniem w takiej przystawne układu Vinculum (host USB), dzięki któremu można w prosty sposób obsłużyć pamięci masowe typu Pendrive. Zasadniczym założeniem było jednak maksymalne uproszczenie konstrukcji i ograniczenie kosztów. Zastosowanie układu Vinculum podniosłoby nieco koszt całej przystawki. Ostatecznie decyzja padła na łatwo dostępne pamięci, jakimi są karty SD/MMC.
Z kartami tymi może się bezpośrednio komunikować mikrokontroler. Idealny do tego typu przystawki okazał się kosztujący kilkanaście złotych mikrokontroler PSoC firmy Cypress, dla którego są dostępne biblioteki umożliwiające obsługę kart SD/MMC z wykorzystaniem systemu plików FAT. Tak więc po przekopiowaniu plików MIDI z wykorzystaniem komputera na kartę pamięci, może je bez problemu odczytać odtwarzacz. Do obsługi przystawki służą są 4 przyciski: „PREV”, „NEXT”, „PLAY”, „STOP”, a na wyświetlaczu LCD są przedstawiane informacje o nazwie odtwarzanego pliku.
Podstawowe informacje o MIDI
MIDI, czyli cyfrowy interfejs instrumentów muzycznych, mimo swojego wieku nadal jest popularny i bardzo często wykorzystywany. W standardzie MIDI występują trzy złącza: MIDI IN, MIDI THRU i wykorzystywany w tym odtwarzaczu MIDI OUT (wyjście). Dane przesyłane za pomocą interfejsu MIDI mają postać asynchroniczną i przebiegają z prędkością 31,250 kbd. Przesyłane dane mają postać 10–bitowych ramek składających się z bitu startu, 8 bitów danych i bitu stopu. Wiadomości przesyłane przez interfejs MIDI można podzielić na bajty statusu i bajty danych. Interfejs MIDI jest logicznie dzielony na 16 kanałów numerowanych do 1 do 16. W rozpoczynającym większość wiadomości bajcie statusu kodowany jest numer kanału, na którym dany komunikat jest przesyłany. Plik MIDI jest zbiorem głównie wiadomości dźwiękowych, które są przesyłane na jednym z dostępnych kanałów. Za pośrednictwem wiadomości dźwiękowych można generować dźwięk o określonych parametrach (ton, głośność itp.) dla każdego z kanałów, który jest kodowany w przesyłanej wiadomości. Zestawienie dostępnych wiadomości dźwiękowych wysyłanych przez odtwarzacz przedstawiono w tab. 1, natomiast w tab. 2 pokazano kody nut dla wiadomości dźwiękowych.
W plikach MIDI przechowywane są wiadomości MIDI wraz z informacją o czasie ich odbioru, przy czym czas jest odmierzany względnie, pomiędzy parami sąsiednich komunikatów. Pliki mogą również przechowywać wiele dodatkowych informacji, jak tempo, takt, czy tekst piosenek. Można wyróżnić różne formaty plików MIDI różniące się sposobem wewnętrznej organizacji danych. Prezentowany w artykule odtwarzacz obsługuje pliki MIDI w formacie 0, który jest plikiem z pojedynczą ścieżką utworu. Dokładniejsze informacje o MIDI można znaleźć w artykule „MIDI – Cyfrowy interfejs instrumentów muzycznych”, który był publikowany w EP 11/2005, 12/2005 i 1/2006.
Opis działania układu
W odtwarzaczu zastosowano mikrokontroler PSoC CY8C29443, którego zasoby (zwłaszcza wielkość pamięci RAM i Flash) pozwalają na skorzystanie z biblioteki obsługi kart SD/MMC. Na rys. 1 pokazano schemat ideowy odtwarzacza. Jego budowa jest bardzo prosta.
Mikrokontroler U1 wraz z wyświetlaczem LCD są zasilane napięciem +5 V, natomiast karta SD/MMC musi być zasilana napięciem +3,3 V. Rezystory R1...R6 podciągają linie interfejsu SPI karty SD/MMC (J1) do dodatniego napięcia zasilania. Nie są wtedy wymagane dodatkowe układy pośredniczące do konwersji poziomów napięć linii komunikacyjnych z kartą SD/MMC. Linia SD_CD złącza J1 jest wykorzystywana do wykrywania włożenia karty SD/MMC do gniada. Przyciski S1...S4 służą do obsługi odtwarzacza. Pozwalają na zmianę utworu oraz start/stop odtwarzania. Odczytane z pliku MIDI nuty są wysyłane z wykorzystaniem linii TXD doprowadzonej do gniada MIDIOUT. Diody D1 i D2 zabezpieczają linię TXD przed uszkodzeniem. Odtwarzacz może być zasilany napięciem niestabilizowanym lub stabilizowanym o wartości do 12 V. Elementy M1, U3, U4, C1...C6 tworzą prosty zasilacz odtwarzacza. Stabilizator U3 stabilizuje napięcie na poziomie +5 V, a stabilizator U4 na poziomie +3,3 V. Odtwarzacz składa się z niewielu elementów, a to dzięki wykorzystaniu mikrokontrolera PSoC, który posiada wiele rekonfigurowanych peryferiów. Oprogramowanie mikrokontrolera zostało przygotowane w języku C. Jego głównym zadaniem jest odczyt zawartości pliku MIDI i wysłanie nut na linię TXD mikrokontrolera (w tempie odczytanym również z pliku MIDI). Na wyświetlaczu LCD, w pierwszym wierszu jest wyświetlana nazwa wybranego pliku, natomiast w drugim wierszu jest wyświetlany stan odtwarzacza (Start/Stop odtwarzania). Po wysłaniu wszystkich nut odtwarzacz przechodzi w tryb stopu.
Mikrokontroler pracuje z częstotliwością 24 MHz. Na rys. 2 pokazano wykorzystane bloki peryferiów mikrokontrolera PSoC w odtwarzaczu MIDI. Moduł peryferyjny Delay jest 16–bitowym licznikiem (zajmuje dwa cyfrowe bloki mikrokontrolera), który jest wykorzystywany do odmierzania tempa wysyłania nut przez interfejs MIDI. Moduł TXD jest szeregowym 8–bitowym transmiterem zgodnym z interfejsem UART. Służy on do wysyłania danych do interfejsu MIDI z prędkością 31,250 kbd. Moduł LCD służy do obsługi wyświetlacza LCD, natomiast moduł SDCard służy do obsługi kart SD/MMC. Moduł SDCard do poprawnej pracy wykorzystuje blok peryferyjny interfejsu SPI. W celu poprawnej pracy odtwarzacza MIDI wymagany był dodatkowy bufor na odczytywane z karty dane. Zastosowanie bufora uniezależniło czas wysyłania nut przez interfejs MIDI od czasu potrzebnego na ich odczytanie z karty SD/MMC. Dość ciekawy moduł obsługi kart SD/MMC nie jest trudny w wykorzystaniu, a może znacznie uprościć budowane urządzenie, które ma zbierać i przechowywać duże ilości informacji. Może on pracować w kilku trybach: Full File System, Standard File System, Basic File System, Read Only File System oraz Basic Read Write.
W odtwarzaczu MIDI wykorzystywany jest tryb Full File System, w którym jest możliwy odczyt i zapis danych w systemie plików FAT16/32. Ten tryb, w odniesieniu do pozostałych trybów wymaga najwięcej pamięci Flash i RAM mikrokontrolera. Moduł obsługi kart może obsługiwać karty typu: SD, miniSD, microSD, MMC, MMCmobile oraz MMCplus o pojemnościach do 2 GB. Moduł SDCard posiada funkcje dostępne tylko w języku C. Jest ich kilkanaście i są łatwe w użyciu. Po uruchomieniu modułu SDCard funkcją SDCard_Start() jest on gotowy do pracy. Przed rozpoczęciem komunikacji, można wykorzystać dodatkowe linie złącza karty do sprawdzenia włożenia jej do gniazda lub blokady zapisy (niektóre karty posiadają do tego celu specjalny przełącznik). Do utworzenia pliku lub otwarcia już istniejącego, można wykorzystać funkcję SDCard_fopen, która zwraca uchwyt do pliku. Dane do otwartego pliku można zapisać z wykorzystaniem funkcji SDCard_fputcs. Po zapisaniu danych do pliku, należy zamknąć otwarty plik z wykorzystaniem funkcji SDCard_fclose. Z pozostałych funkcji wykorzystywanych w odtwarzaczu do obsługi karty SD/MMC, funkcja SDCard_GetFileCount zwraca liczbę plików znajdujących się na karcie, natomiast funkcja SDCard_GetFilename zwraca nazwę pliku o podanym numerze, która jest wyświetlana na wyświetlaczu LCD. W odtwarzaczu MIDI, za pomocą funkcji SDCard_GetFileSize pobierana jest informacja o wielkości odtwarzanego pliku w celu uzyskania informacji, kiedy należy zakończyć odtwarzanie. Dane są odczytywane za pośrednictwem funkcji SDCard_fgetc z otwartego do odczytu pliku. O tym, jak łatwe jest stosowanie we własnych projektach kart SD/MMC z procesorem PSoC można się najlepiej przekonać analizując oprogramowanie odtwarzacza MIDI.
Montaż i uruchomienie
Schemat montażowy odtwarzacza MIDI przedstawiono na rys. 3. Gniazdo karty SD/MMC oraz stabilizator U4 są montowane techniką SMD, pozostałe elementy techniką przewlekaną. Po zmontowaniu i sprawdzeniu napięć na wyjściach stabilizatorów, odtwarzacz od razu powinien poprawnie pracować. Potencjometrem P1 należy wyregulować kontrast wyświetlacza. Do zasilania odtwarzacza można wykorzystać dowolny, nawet niestabilizowany zasilacz 12 V. Pliki MIDI na karcie MMC/SD powinny być umieszczone w katalogu głównym karty, przy czym karta powinna posiadać założony system plików FAT16 lub FAT32. Po włożeniu karty z zapisanymi na niej plikami MIDI, na wyświetlaczu zostanie pokazana nazwa pierwszego pliku. Zmianę pliku MIDI można przeprowadzić za pomocą przycisków „PREV” lub „NEXT”. Po wybraniu pliku odtwarzanie rozpoczyna się po naciśnięciu przycisku „PLAY”, a zakończenie po naciśnięciu przycisku „STOP”. Po odtworzeniu całego pliku MIDI odtwarzanie kończy się samoczynnie, o czym świadczy komunikat „STOP” na wyświetlaczu LCD.
Gdyby pliki MIDI przeznaczone do odtwarzania były zapisane w innych formatach niż 0, trzeba je przekonwertować do akceptowanego przez odtwarzacz formatu 0.
W celu przetestowania odtwarzacza MIDI jego wyjście MIDIOUT można dołączyć do komputera (karty dźwiękowej z interfejsem MIDI) lub posiadanego instrumentu. Udostępnione oprogramowanie mikrokontrolera można modyfikować i na przykład rozszerzyć możliwości odtwarzacza o funkcje nagrywania (zapisu nut do pliku MIDI). Przedstawiony odtwarzacz MIDI powstał niejako na zamówienie użytkowników keyboardów i dlatego też na tego typu przystawkę zdecyduje się pewnie niejeden użytkownik urządzeń muzycznych. Jeśli Czytelnicy wykażą zainteresowanie, możliwe, że zostanie zaprojektowany tego typu odtwarzacz z układem Vinculum. Dzięki niemu będzie możliwe odtwarzanie plików MIDI z pendrive’ów zamiast z kart MMC lub SD. W przypadku korzystania z Pendrive, nie będzie potrzebny do komputera czytnik kart SD/MMC.
Marcin Wiązania