→ powrót

___ muzykant 3 ________________

Muzykant 3 wersja druga to prosty sterownik klawiatury midi przeznaczony do samodzielnego montażu. Układ umożliwia realizację matryc klawiaturowych o rozmiarach do 140 przycisków, przy czym obecnie 136 można dowolnie zaprogramować komunikatami trójbajtowymi, osobno dla wciśnięcia i zwolnienia każdego z przycisków. W szczególności projekt pozwala na zbudowanie niedynamicznej klawiatury muzycznej. Układ został maksymalnie uproszczony, a cena części potrzebnych do jego zbudowania jest wyjątkowo niska, dzięki czemu sterownik jest możliwy do zbudowania także przez początkujących elektroników. Urządzenie pobiera niewiele prądu, co pozwala na efektywne zasilanie z baterii.

→ Tutaj znajdują się wcześniejsze wersje projektu.

___ sprzęt ________________

Sercem układu jest mikrokontroler Atmel 89S52 z popularnej rodziny 51. Poza procesorem w układzie pracuje tylko kilka prostych elementów. Do większości nóżek kontrolera można podłączyć styki posiadanych klawiatur, których kształt i forma zależy wyłącznie od budującego sterownik.

Klawiatura zbudowana jest w ten sposób, że każdy przycisk zwiera ze sobą wybrany wiersz z wybraną kolumną. Aby układ pracował poprawnie wymaga się, by zwarcia odpowiedniej kolumny i wiersza dokonywać przez diodę. Widać to dokładnie na powiększonym fragmencie matrycy, na szarym tle. Zatem na każdy przycisk przypada jedna dioda. Ilość przycisków, jak łatwo policzyć, wynosi 8 (wiersze) razy 17 (kolumny), co daje liczbę 136. Diody można pominąć jeśli jednocześnie będziemy przyciskać tylko jeden przycisk. Po prawej stronie znajdują się dodatkowe cztery przyciski o adresach 32–35 o funkcjonalności opisanej niżej.

Elementy w kolorze szarym – diody świecące wraz z rezystorami – nie są niezbędne do pracy układu, lecz ułatwiają orientację, co do działania sterownika. Dioda podłączona do wyjścia 30⁄RX świeci ciągle, by na czas wysyłania komunikatu przygasnąć, natomiast podłączona do wyjścia 36 będzie jedynie sygnalizować wysyłanie komunikatów krótkimi błyskami, co pozwoli ograniczyć nieco pobór prądu przy zasilaniu bateryjnym.

Układ należy zasilać napięciem z przedziału 4–5,5V, pobór prądu wynosi około 10mA. → Tutaj można znaleźć więcej informacji na temat zasilania układów mikroprocesorowych. Ze względu na prostotę projektu nie ma potrzeby stosować płytki drukowanej, jednakże nic nie stoi na przeszkodzie, by sobie ją zaprojektować i poprowadzić montaż w sposób bardziej estetyczny. Nie polecam używania podstawki pod mikrokontroler z uwagi na jej zawodność i niewielki sens stosowania w tym projekcie. Poniżej znajdują się zdjęcia układu prototypowego, na których można się wzorować przy budowie sterownika.

___ oprogramowanie ________________

Zanim zaprogramujemy procesor, musimy przygotować program zgodnie z własnymi potrzebami. Nie potrzeba do tego wiedzy na temat programowania mikrokontrolerów, natomiast przyda się odrobina znajomości komunikatów midi. → Stąd pobieramy plik źródła programu, który następnie należy otworzyć w notatniku. Odszukujemy wiersz o treści dane komunikatów midi, po którym znajduje się interesujący nas fragment.

Każdy przycisk na schemacie ma swój niepowtarzalny adres i ten sam adres znajdziemy w każdym wierszu w źródle programu. Struktura wiersza wygląda następująco: down oznacza akcję po wciśnięciu przycisku, up – po jego zwolnieniu. Następnie znajduje się adres przycisku, a na końcu trzy cyfry będące trzema bajtami wysyłanymi przez midi. Nie wolno zmieniać struktury pliku ani też usuwać nieużywanych bajtów (te zastępujemy neutralną wartością 254, Active Sensing, patrz niżej). Wszystkie bajty natomiast można dowolnie zmieniać według poniższego klucza.

1. Przycisk ma symulować klawiaturę muzyczną (wysyłane będą komunikaty Note On⁄Note Off).

a) Wciśnięcie (down) klawisza Note On.

I bajt. Kanał midi (pierwszy – 144, drugi – 145,... szesnasty – 159).
II bajt. Numer klawisza klawiatury muzycznej (wysokość nuty), dowolny z zakresu 0–127, 60 dla środkowego c.
III bajt. Dynamika (szybkość) wciśnięcia klawisza, tutaj ustalona na stałe, dowolny z zakresu 0–127, standardowo 100. Zero nie da żadnego efektu (nie będzie słychać dźwięku).

b) Zwolnienie (up) klawisza Note Off.

I bajt. Kanał midi (pierwszy – 128, drugi – 129,... szesnasty – 143).
II bajt. Jak wyżej.
III bajt. Dynamika (szybkość) zwolnienia klawisza, tutaj ustalona na stałe, dowolny z zakresu 0–127, standardowo 0.

Należy pamiętać o tym, by dla każdej pary komunikatów wciśnięcia i zwolnienia jednego przycisku ustawić ten sam kanał midi i tę samą wysokość nuty.

2. Przycisk ma wysyłać komunikat kontrolera (Control Change).

a) Wciśnięcie (down) przycisku.

I bajt. Kanał midi (pierwszy – 176, drugi – 177,... szesnasty – 191).
II bajt. Numer kontrolera, dowolny z zakresu 0–127. Z popularnych, a użytecznych tutaj: 1 – Modulation, 2 – Breath, 64 – Sustain, 65 – Portamento, 66 – Sostenuto, 67 – Soft, 120 – All Sounds Off, 123 – All Notes Off.
III bajt. Wartość kontrolera, dowolna z zakresu 0–127, przy czym dla kontrolerów przełączających (Sustain, Portamento, Sostenuto, Soft) sens ma wartość 127, a dla resetujących (All Sounds Off, All Notes Off) – wartość 0.

b) Zwolnienie (up) przycisku.

I bajt. Jak wyżej.
II bajt. Jak wyżej.
III bajt. Jak wyżej, przy czym dla kontrolerów przełączających (Sustain, Portamento, Sostenuto, Soft) sens ma wartość 0, a kontrolery resetujące (All Sounds Off, All Notes Off) winno się zastąpić sekwencją obojętną dla urządzenia, którym nasz kontroler będzie sterował. W szczególności wszystkie trzy bajty można zastąpić wartościami 254, co oznacza wysłanie trzech neutralnych bajtów (Active Sensing).

3. Przycisk ma wysyłać komunikat zmiany brzmienia (Program Change).

a) Wciśnięcie (down) przycisku.

I bajt. Kanał midi (pierwszy – 192, drugi – 193,... szesnasty – 207).
II bajt. Numer brzmienia (programu), dowolny z zakresu 0–127.
III bajt. 254 (wartość neutralna).

b) Zwolnienie (up) przycisku.

I bajt. 254 (wartość neutralna) bądź jak wyżej.
II bajt. 254 (wartość neutralna) bądź jak wyżej.
III bajt. 254 (wartość neutralna).

W szczególnych wypadkach zwolnienie przycisku również może zmienić brzmienie, co ma sens np. przy użyciu przełączników dwustanowych. Takie rozwiązanie przełącza cyklicznie brzmienia pomiędzy dwoma wybranymi.

4. Przycisk ma wysyłać komunikat czasu rzeczywistego (Real Time).

a) Wciśnięcie (down) przycisku.

I bajt. Numer komunikatu Real Time, dowolny z zakresu 248–255. Z popularnych, a użytecznych tutaj: 250 – Start, 251 – Continue, 252 – Stop.
II bajt. 254 (wartość neutralna).
III bajt. 254 (wartość neutralna).

b) Zwolnienie (up) przycisku.

I bajt. 254 (wartość neutralna) bądź jak wyżej.
II bajt. 254 (wartość neutralna).
III bajt. 254 (wartość neutralna).

W szczególnych wypadkach zwolnienie przycisku również może wysłać komunikat midi, co ma sens np. przy użyciu przełączników dwustanowych. Takie rozwiązanie wysyła naprzemiennie parę komunikatów, np. Start – Stop.

Poza wymienionymi rozwiązaniami w szczególnych wypadkach można zestawiać dowolne komunikaty trójbajtowe. Należy tylko zadbać o poprawną ich interpretację przez urządzenie starowane kontrolerem.

Wspomniane wcześniej cztery przyciski o adresach 32–35 posiadają inną funkcjonalność.

Wciśnięcie przycisków 32 i 34 generuje komunikat zmiany brzmienia (Program Change), przy czym wartość za każdym razem zwiększa się, a po przekroczeniu 127 przyjmuje wartość 0.

Wciśnięcie przycisków 33 i 35 generuje komunikat zmiany brzmienia (Program Change), przy czym wartość za każdym razem zmniejsza się, a po przekroczeniu 0 przyjmuje wartość 127.

Jeśli któryś z tych czterech przycisków pozostanie przez chwilę wciśnięty, nastąpi generacja serii komunikatów. Aby zdefiniować kanał midi dla każdej z par należy przewinąć źródło programu do samego końca, odnaleźć wiersz o treści dane kanałów midi przycisków 32–35 i uzupełnić kolejno dla każdej z par numer kanału midi zgodnie z zasadą: pierwszy – 192, drugi – 193,... szesnasty – 207.

Po uzupełnieniu wszystkich danych plik należy poddać procesowi asemblacji oraz zaprogramować nim mikrokontroler.

→ proces asemblacji