Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Kategoria: Akumulatorki / Baterie / Ładowarki

Odtwarzacz ChipTune na Raspberry Pi

ghost666 30 Gru 2016 15:21
  • Odtwarzacz ChipTune na Raspberry Pi
    Autor zajął się tym projektem przy okazji zabawy komputerem Apple II. Celem tego odtwarzacza jest osiągnięcie takich samych efektów dźwiękowych jakie osiąga się w Apple II. W tym celu wykorzystany został oryginalny układ scalony z serii AY-3-8910/1/2. Układ ten może generować trzy kanały przebiegów prostokątnych oraz nakładać na nie różne efekty, dając bardzo charakterystyczne brzmienie starych komputerów, takich jak Spectrum czy Atari, ale też Apple II. Scena tworząca muzykę na ten układ jest nadal bardzo szeroka, więc układ z pewnością będzie miał co odtwarzać.

    Celem projektu jest skonstruowanie odpowiedniego interfejsu dla komputera Raspberry Pi tak aby był on w stanie odtwarzać pliki *.ym na oryginalnym AY-3-8910 podłączonym do systemu. Dodatkowo autor postanowił do układu dodać proste wizualizacje odtwarzanej muzyki oparte o diody LED.

    Projekt

    Autor nie spodziewał się, że projekt stanie się tak popularny, dlatego stanowczo nie jest to najlepiej opisany projekt. Zazwyczaj przed publikacją układ jest już gotowy w 100%, z własną płytką drukowaną etc. Tutaj nie jest tak elegancko i autor udostępnia tylko dwa odręcznie narysowane schematy ideowe:

    Odtwarzacz ChipTune na Raspberry Pi Odtwarzacz ChipTune na Raspberry Pi


    Układ AY-3-8910 jest dosyć prosty. Układ ten generuje trzy przebiegi prostokątne oraz szum. Przebiegi te następnie mogą być wzmacniane zgonie z obwiednią itp. Do układy wystarczy podłączyć zegar (w tym przypadku 1 MHz) i można zapisywać do jednego z 16 (a w zasadzie to 14) rejestrów konfiguracyjnych układów. Wystarczy podać adres i 8 bitów danych, aby dokonać zapisu z pomocą trzech linii kontrolujących komunikację. W typowym pliku *.ym, wszystkie 14 rejestrów zapisywanych jest z częstotliwością 50 Hz.

    Zamiast układu AY-3-8910 wykorzystać można AY-3-8912 (z tą różnicą że inaczej rozłożone są wyprowadzenia). Główną różnicą pomiędzy układami jest to, że 8910 wyposażony jest w dwa dodatkowe porty GPIO o szerokości 8 bitów.

    Do kontroli naszego syntezatora wystarczy tylko 6 wyprowadzeń Raspberry Pi. Trzy wyprowadzenia podłączone są do rejestru przesuwnego 75HC595, który zmienia dane szeregowe w równoległe 8 bit, a trzy kolejne GPIO 'Maliny' sterują całą komunikacją.

    Wizualizacja z wykorzystaniem LEDów zrealizowana została w oparciu o wyświetlacze LED kontrolowane poprzez interfejs I²C RPi.

    Za syntezatorem znajduje się wzmacniacz (oryginalnie był to najczęściej LM386), który wzmacnia sygnał pochodzący z syntezatora. Auto wykorzystał moduł z Adafruit oznaczony MAX98306, aczkolwiek zamierza go zmienić na inny z uwagi na problemy z działaniem i jakością tego wzmacniacza.

    Plany na przyszłość:

    * Dobudowanie drugiego kanału (drugi rejestr przesuwny i ukłąd AY-3-8910), aby system działa w stereo.
    * Zamontowanie lepszego wzmacniacza niż LM386.
    * Zaprojektowanie i wytrawienie PCB.
    * Zrobienie obudowy do urządzenia.
    * Sterowanie rejestrem przesuwnym poprzez SPI a nie piny GPIO.
    * Optymalizacja oprogramowania - nawet pomimo wykorzystania szybkiej biblioteki libbcm2835 ciężko uzyskać częstotliwość zapisu do układu na poziomie wymaganych 50 Hz - być może praca na niskopoziomowym oprogramowaniu z dużym dostępem do sprzętu i systemu operacyjnego by pomogła. Innym rozwiązaniem jest wykorzystanie w pełni równoległego połączenia z syntezatorem, bez potrzeby instalowania rejestru przesuwnego, co jednakże zajęłoby aż 11 pinów GPIO. Póki co Odtwarzanie ChipTune działa lepiej na Apple II z procesorem 6502 taktowanym 1 MHz niż na Raspberry Pi...
    * Zacząć tworzyć własne pliki *.ym.

    Oprogramowanie

    Całe potrzebne oprogramowanie znaleźć można na GitHubie: https://github.com/deater/vmw-meter.git.. Wystarczy sklonować repozytorium autora poleceniem w bashu (o ile na Raspberry Pi mamy zainstalowanego gita):

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    a pliki z oprogramowaniem do syntezatora znajdziemy w folderze ay-3-8910.

    Aby zainstalować oprogramowanie i potrzebne biblioteki musimy przejść kilka kroków:

    1. Zainstalować bibliotekę bcm2835 - klasyczne, dostępnie w Linuxie porty GPIO nie są dostatecznie szybkie do działania tego układu. Aby zainstalować tą bibliotek musimy wpisać w terminalu:

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    2. Dalej zainstalować musimy bibliotekę liblhasa-dev, która pozwala nam na odtwarzanie plików um5, skompresowanych z pomocą LHA - wiekszość plików *.ym zapisywanych jest właśnie w ten sposób. Aby zainstalować bibliotekę wystarczy skorzystać z apt-geta:

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    Ale w sytuacji gdy chcemy ją skompilować od podstaw albo korzystamy z innego systemu niż Debian warto jest zajrzeć do makefile biblioteki i dokonać koniecznych zmian.

    Jeśli nie chcemy bądź nie możemy skompilować opisanej biblioteki to zawsze pozostaje nam manualna dekompresja plików *.ym przed odtwarzaniem wykorzystując narzędzie lhasa, jakie powinno być dostępne w systemie. Wystarczy wtedy w terminalu wpisać tylko:

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    3. Instalujemy program, wpisując w terminalu make w folderze z plikami pobranymi z GitHuba autora Wygeneruje to plik ym_play. Teraz jeśli wpiszemy:

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    będzie on odtwarzał plik YM_FILE. Inne opcje programu poznać możemy wpisując w terminalu:

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    W czasie odtwarzania możemy sterować działaniem programu korzystając z następujących skrótów klawiszowych:

    (spacja) pauza/odtwarzanie
    , przewinięcie utworu do początku
    . przewinięcie do przodu o 5 s
    < przejście do poprzedniego utworu
    > przejście do kolejnego utworu
    l zmiana sposob zapętlania obecnej piosenki
    r zmiana powtarzania utowó na playliście
    m przejście w tryb wyświetlania 8x16

    Uwaga!

    Kod ten ciągle jest edytowany - daleko mu do finiszu, szczególnie interfejsowi użytkownika). Autor zaprasza do używania go w stanie obecnym, ale należy się spodziewać, że oprogramowanie ulec może sporym zmianom w przyszłości.

    Autor intencjonalnie nie udostępnia plików *.ym - są one do znalezienia w sieci, ale czasami ich rozpowszechnianie ograniczone jest prawami autorskimi. Publikować autor projektu zacznie dopiero własne utwory.



    Źródło: http://www.deater.net/weave/vmwprod/hardware/ay-3-8910/

  • #2 31 Gru 2016 09:50
    SylwekK
    Poziom 28  

    Klasyka pipania :-) Napisałem kiedyś w asemblerze na Commodore+4 player (i kilka muzyczek) na ten układ. Standardowo możliwości commodorka były cieniutkie, a AY dodał mu skrzydeł. Dodatkowe porty I/O pozwoliły z kolei na zabawę w sterowanie światłami na ciut większą skalę :-) Ech, aż miło powspominać...

  • #3 31 Gru 2016 12:30
    R-MIK
    Poziom 35  

    SylwekK napisał:
    Klasyka pipania :-) Napisałem kiedyś w asemblerze na Commodore+4 player (i kilka muzyczek) na ten układ. Standardowo możliwości commodorka były cieniutkie, a AY dodał mu skrzydeł. Dodatkowe porty I/O pozwoliły z kolei na zabawę w sterowanie światłami na ciut większą skalę :-) Ech, aż miło powspominać...

    C+4 tak, natomiast C64 ze swoim SID-em (6581/8580) bił na głowę AY.

  • #5 01 Sty 2017 19:01
    Ronin64
    Poziom 34  

    Ciężko pobić brzmienie SID'a :) 8580 rządzi :)