Cyfrowy system bezprzewodowy do gitary elektrycznej
English version of this document
Niżej opisany system stanowi DARMOWY PROJEKT, opublikowany bez żadnej gwarancji!
Jeśli chcesz go zbudować i używać, robisz to na własne ryzyko!
Zwróć też uwagę że to urządzenie korzysta z transmisji radiowej.
Zanim zaczniesz go używać, upewnij się, że nie narusza to przepisów
obowiązujących w miejscu lub kraju Twojego pobytu!
Opisywany system został stworzony aby:
- Umożliwić podłączenie gitary do wirtualnego wzmacniacza/procesora dźwięku bez niewygodnego kabla
- Umożliwić przełączanie ustawień wirtualnego wzmacniacza/procesora dźwięku regulatorami umieszczonymi
w nadajniku systemu - tuż przy gitarze
- Umożliwić cyfrową rejestrację dźwięku gitary
Oczywiście istnieją profesjonalne systemy oferując powyższe funkcje, jednak ich ceny znacznie
wykraczają poza możliwości gitarzysty-amatora.
Z drugiej strony mój system wprawdzie nie oferuje takich parametrów jak systemy profesjonalne,
ale za to daje się go zbudować za dość skromną cenę. Zasadnicze elementy to:
- W nadajniku
- przetwornik analogowo/cyfrowy CS5343 lub CS5344.
(możliwe jest też dostosowanie źródeł do współpracy z innym przetwornikiem AC podłączanym
przez interfejs I2S lub SPI i zapewniającym dostateczną rozdzielczość i częstotliwość próbkowania).
Przy wykorzystaniu CS5343/4 i użyciu typowej gitary nie jest konieczny żaden przedwzmacniacz!
- mikrokontroler ATmega88 pracujący z zegarem 18,432MHz
- moduł do radiowej transmisji danych RFM70
- W odbiorniku
- mikrokontroler ATmega32u4 pracujący z zegarem 16MHz
- moduł do radiowej transmisji danych RFM70
Aktualnie system oferuje następujące parametry:
- Cyfrową transmisję dźwięku próbkowanego z rozdzielczością 20 bitów
i z częstotliwością 24 kHz
- Odbiornik jest widziany jako urządzenie USB MIDI z interfejsem USB Audio
dostarczające dźwięku PCM w formacie
PCM S24_3LE (24 bity, 4 najmłodsze bity są zawsze zerowe) z częstotliwością próbkowania
24 kHz (możliwe jest skompilowanie oprogramowania odbiornika tak, aby emulował
pracę z częstotliwością próbkowania 48 kHz, dla zapewnienia zgodności z systemem Windows)
- Transmitowane jest ustawienie 7 regulatorów (3 potencjometrów i 4 przełączników). Informacja
ta jest przekazywana jako komendy USB MIDI, co pozwala łatwo sterować funkcjami wirtualnego
wzmacniacza gitarowego/procesora dźwięku (komendy wysyłane przez poszczególne regulatory
można modyfikować za pomocą oprogramowania)
Aktualny schemat dostępny jest jako projekt KiCad,
lub jako oddzielne pliki PDF: nadajnik,
blok regulatorów,
nakładka z przetwornikiem CS5343/CS5344,
odbiornik.
Aktualne źródła firmware'u są dostępne jako archiwum oraz
(z historią ostatnich zmian) w
repozytorium github,
a niektóre wcześniejsze wersje były publikowane na grupie
alt.sources.
W aktualnej wersji systemu nadajnik został zmontowany na specjalnie
zaprojektowanej płytce drukowanej (pełna dokumentacja jest zawarta w projekcie KiCad)
umieszczonej w obudowie
Z32.
Aby umieścić potencjometry pod pojemnikiem na baterie, konieczne było znalezienie możliwie
płaskich potencjometrów oraz lekkie podfrezowanie obudowy.
Zmontowany nadajnik wygląda następująco:
Wnętrze nadajnika z włożonymi akumulatorkami:
Wnętrze nadajnika z wyjętym pojemnikiem na akumulatorki - widoczne potencjometry:
Widok płytki drukowanej nadajnika został ukazany na dwóch poniższych zdjęciach:
Widok płytki drukowanej odbiornika został ukazany na dwóch poniższych zdjęciach:
Zasilanie nadajnika
W celu zapewnienia wydajnego zasilania bateryjnego, użyto dwóch akumulatorów NiMH (można zamiast
nich użyć także baterii alkalicznych)
i przetwornicy podnoszącej napięcie wykorzystującej układ MCP1640. Jest to rozwiązanie dość ryzykowne w systemie
mającym przenosić sygnały akustyczne o dużej dynamice. Aby uniknąć zakłóceń,
napięcie zasilające układy scalone jest stabilizowane scalonymi stabilizatorami trójkońcówkowymi.
Istotne jest także właściwe dobranie pojemności odsprzęgających.
Nadajnik wyłączany jest wyłącznikiem (nie pokazanym na schemacie) połączonym szeregowo z akumulatorkami.
Współpracujące oprogramowanie
System został stworzony przy założeniu, że użytkownik korzysta
z cyfrowego, wirtualnego wzmacniacza/procesora dźwięku. W moim przypadku
jest to program guitarix lub
rakarrack działający na komputerze pracującym
pod kontrolą systemu Linux, współpracujący z systemem jack.
Do rejestracji i obróbki dźwięku
używam programu ardour.
Przy normalnie skompilowanym oprogramowaniu odbiornika system zgłasza się jako urządzenie dostarczające
dźwięku monofonicznego próbkowanego w trybie 24 bity/24 kHz (efektywnie tylko 20 bitów).
Do przetwarzania dźwięku z wielu źródeł zazwyczaj używam systemu "jack" pracującego
z częstotliwością próbkowania 48kHz.
Niezbędną konwersję częstotliwości i synchronizację zapewnia program "alsa_in"
(wywołany jako:$ alsa_in -d hw:2,0,0 -r 24000 -c 1 -n 2
).
Aby umożliwić współpracę systemu z komputerami działającymi pod kontrolą MS Windows, dodałem
tryb emulacji częstotliwości próbkowania 48 kHz. Aby go uaktywnić, należy przed kompilacją
firmware'u odbiornika odkomentować linię
#define WGS_EMUL_48KHZ
w pliku customize.h
. Mimo zgodności częstotliwości
próbkowania także w tym przypadku należy użyć programu "alsa_in", aby zapewnić korektę
drobnych różnych częstotliwości próbkowania i synchronizację między systemem gitarowym i systemem jack.
W tym przypadku program "alsa_in" należy wywołać jako
$ alsa_in -d hw:2,0,0 -r 48000 -c 1 -n 2
.
Dlaczego system pracuje z częstotliwością próbkowania 24kHz?
Tak naprawdę przetwornik CS5343/CS5344 pracuje z częstotliwością próbkowania 48kHz i w trakcie
pierwszych prób systemu udało mi się uzyskać prawdziwą transmisję dźwięku cyfrowego 24bity/48kHz.
Niestety z uwagi na ograniczoną szybkość transmisji modułu RFM70 wymagało to wyłączenia
mechanizmów potwierdzenia i automatycznej retransmisji pakietu,
co ostatecznie (z uwagi na "gubienie pakietów") dało
gorszą jakość dźwięku niż transmisja 20 bity/24kHz użyta w finalnej wersji systemu.
Gdyby udało się znaleźć zamiennik modułu RFM70 oferujący większą przepustowość, powinno się dać
zmodyfikować oprogramowanie tak, aby uzyskać transmisję 24bity/48kHz.
Modyfikowanie komend wysyłanych przez regulatory
Aby zapewnić maksymalną uniwersalność systemu, użytkownik może określać jakie komendy MIDI
ma wysyłać system przy wciskaniu i zwalnianiu przycisków oraz przy zmianie pozycji
potencjometrów. Programowanie jest zrealizowane podobnie, jak w opracowanym przez mnie
"Pedale ekspresji MIDI z przełącznikami nożnymi".
Początkowo system wysyła przy wciśnięciu jednego z przycisków polecenie MIDI "Program Change"
z numerami programu od 1 do 4. Zwolnienie przycisków początkowo nie powoduje wysyłania żadnych komend.
Ustawienia regulatorów są początkowo wysyłane jako komendy MIDI "Control/Mode Change" z numerami
regulatorów od 80 do 82.
W celu zmiany komend należy przy pomocy specjalnego programu do odbiornika wysłać pakiety kontrolne USB.
Osobiście używam do tego celu prostego programu napisanego w języku Python, korzystającego
z biblioteki "pyusb".
Aby uzyskać zmianę komunikatu wysyłanego przy zmianie pozycji jednego z regulatorów, należy
wysłać pakiet sterujący o następującej postaci (składnia dla języka Python z pyusb):
dev.ctrl_transfer(0x40,0xbN,0xB1B2,0xB3B4)
gdzie N oznacza numer regulatora (od 0 do 2), a wartości B1, B2 i B3 oznaczają
kolejne bajty wysyłanej komendy MIDI, podczas gdy B4 jest zastępowany aktualnym ustawieniem regulatora
(gdy B4=0) lub "odwróconym" ustawieniem regulatora (gdy B4 jest różne od 0).
Aby uzyskać zmianę komunikatu wysyłanego przy wciśnięciu N-tego przycisku, należy wysłać
pakiet sterujący o następującej postaci (składnia dla języka Python z pyusb):
dev.ctrl_transfer(0x40,0x8N,0xB1B2,0xB3B4)
gdzie N oznacza numer przycisku (od 0 do 3), a wartości B1, B2, B3 i B4 oznaczają
kolejne bajty wysyłanej komendy MIDI z jednym zastrzeżeniem: jeśli B1 jest równe zero,
to przy wciśnięciu przycisku nie będzie wysyłana żadna komenda.
Aby uzyskać zmianę komunikatu wysyłanego przy zwolnieniu N-tego przycisku, należy wysłać
pakiet sterujący o następującej postaci (składnia dla języka Python z pyusb):
dev.ctrl_transfer(0x40,0xcN,0xB1B2,0xB3B4)
gdzie N oznacza numer przycisku (od 0 do 3), a wartości B1, B2, B3 i B4 oznaczają
kolejne bajty wysyłanej komendy MIDI z jednym zastrzeżeniem: jeśli B1 jest równe zero,
to przy zwolnieniu przycisku nie będzie wysyłana żadna komenda.
Przykład programu przeprogramowującego system można znaleźć tutaj.
Przez odpowiednie zdefiniowanie pliku reguł "udev" w Linuksie można uzyskać automatyczne
skonfigurowanie pedału po jego podłączeniu. Na przykład w moim systemie mam dodaną regułę:
ACTION=="add", SUBSYSTEM=="usb", ATTRS{product}=="WZab Digital Wireless Guitar System 1",
ATTRS{bcdDevice}=="0001", MODE="660", OWNER="root", GROUP= "audio", RUN+="/usr/local/midi/setup_dwgs_v1.py"
Aby dostosować ten program do własnych potrzeb warto przestudiować informacje na temat
USB MIDI oraz
tablicę komunikatów MIDI.
Przełączanie kanałów
Transmisja sygnału przez tor radiowy może być zakłócana np. przez sieć WiFi.
Dlatego w systemie przewidziano dwa przyciski do zmiany używanego kanału.
Aby nie wykroczyć poza pasmo ISM, w którym może pracować system, możemy wykorzystać
83 dolne kanały (rozmieszczone co 1MHz) udostępniane przez moduł RFM70.
Przyciski zmiany kanału powodują przejście o 8 kanałów w górę lub w dół (modulo 83).
Ponieważ liczby 8 i 83 są względnie pierwsze, to przez wielokrotne naciśnięcie jednego z przycisków
możemy wybrać dowolny kanał. Z drugiej strony przeskakiwanie o 8 kanałów naraz pozwala
szybko "odsunąć się" od częstotliwości zajętej przez sieć Wi-Fi.
Stara wersja schematu i oprogramowania
Wcześniejsza wersja systemu jest dostępna jako projekt KiCad (schematy i płytka nadajnika)
oraz jako archiwum ze źródłami oprogramowania.