Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Muzyczne stacje dyskietek - 16-kanałowy sterownik MIDI

To_Ja92 27 Wrz 2012 11:10 14769 20
  • Muzyczne stacje dyskietek - 16-kanałowy sterownik MIDI

    Mam zamiar dziś zaprezentować swoją zabaweczkę - układ przyjmujący sygnał MIDI, sterujący szesnastoma stacjami dyskietek. Na razie wejście MIDI jest tylko poprzez port szeregowy; pętlę prądową zrobię troszkę później; będzie można wybierać, czy sygnał ma być brany z prawdziwego MIDI czy z MIDI na rs232. Poza tym i tak nie posiadam fizycznego wyjścia MIDI ani gameportu w żadnym kompie, więc nie mam póki co motywacji.

    Z drugiej strony znajduje się 16 4-pinowych wyprowadzeń - każde do jednej stacji, żeby było fajnie, stacje podpiąłem 5,25-calowe, pod względem sygnałowym nie różnią się od tych na 3,5".
    Pewnie co niektórzy zastanawiają się po co 4 druty? Skoro przeważnie na YT można znaleźć 3- i 2-drutowe rozwiązania. No to tak: 2 druty są do kierowania głowicą, jeden drut jest od diody (i włączania stacji), i jeden drut powrotny, którym stacja mówi, kiedy głowica jest na pierwszej ścieżce, po to żeby to, co myśli mcu pokrywało się z tym, gdzie głowica jest naprawdę. Drugi powód jest taki, że płytka z dwoma dodatkowymi scalakami wygląda bardziej słodko.

    Z bajerów, bez których da się przeżyć jest jeszcze:
    - pamięć eeprom i wyjście i2c - po co? Nie wiem, jak coś zaprogramuję, to będę wiedział, na razie wykorzystałem to tylko do sprawdzania, co jest w eepromach wylutowanych z TV;
    - wyjście na wyświetlacz hd44780 lub kompatybilny (trzeba tylko dorobić wyjście na podświetlenie z potencjometrem do jasności, to skutek tego, że wyświetlacz, który mam podpięty wydłubałem z jakiegoś telefonu, i nie miał podświetlenia);
    - 4 cyferki 7-segmentowe; początkowo miały być dwie; nie mogłem się zdecydować co do koloru, wiec są i te, i te. Sterowane układem uaa2022 (cyferki i uaa są z wylutu);
    - guziczki, 4 pushbutton czy jak to się tam zwie, i 4 dipswitche.

    A teraz jak to mniej więcej działa:
    Całością steruje AtMega8A, wcześniej (to jeszcze na stykowej i na 8 stacji) miałem attiny2313, ale porzuciłem ten pomysł ze względu na pojemność pamięci.
    Dyskietki są podpięte przez rejestry przesuwne, wiec pożerają tylko 6 nóg od mcu.
    Aktualny program sterujący aktualizuje położenie stacji z cz. ~~15kHz, więc związane z tym różnice w częstotliwości wysokich dźwięków, a te z którymi rusza, są na tyle małe, że wszystko gra i buczy jak trzeba.
    Każda stacja odpowiada jednemu kanałowi MIDI. Jest w stanie jednak zagrać tylko jeden dźwięk naraz (chociaż przy 16 sztukach to nie problem).
    Zaprogramowałem odpowiednio wszystkie potrzebne komunikaty MIDI, czyli że:
    - Note on działa (jeśli gra już jakiś dźwięk, to cichnie i zaczyna grać ten nowy);
    - note off działa (jako note on z volume = 0 też);
    - all sound off i all notes off gaszą stacje;
    - device reset tak samo;
    - jeśli przyjdzie komunikat realtime w połowie zwykłego, to się nic nie zepsuje.
    - active sensing działa, czyli jak przyleci pierwszy, to po nieotrzymaniu następnego po 1s. stacje cichną (specyfikacja mówi 300ms, ale więcej nie zaszkodzi);
    - działa również testowo pitch bend, jednak jeszcze się tym bawię, mam zamiar zrobić w pełni śmigający pitch bend (o zgrozo, dzielnie na AVR >.< ) i modulation)
    - Running status też jest supportowany, czyli że urządzenie sterujące nie musi powtarzać status bajtu, jeżeli jest identyczny do poprzedniego.

    Aktualnie jak gram, to mam podpiętego kompa z portem szeregowym i wgranym Yamaha CBX driver (sterownik wywalający MIDI na szeregowy). Midacze odgrywam z Winamp'a albo Sekaiju.
    Jednak, zanim można będzie midacza puścić, trzeba się troszkę w sequencerze pobawić, poustawiać, która stacja ma który dźwięk grać, akordy rozproszyć na kilka stacji (po 1 na dźwięk), itd.
    Każda stacja ma swoje brzmienie, jedne nadają się do tego, drugie do tamtego, na odwrót jest kiszka. Przy 3,5" stacjach ten efekt jest wyraźnie mniejszy.


    Teraz o pozostałych peryferiach - hd44780 jest również podpięty przez rejestr przesuwny, natomiast bit MSB jest podpięty bezpośrednio pod mcu tak, żeby dało odczytać się flagę zajętości, R/W jest również podpięty do /OE w rejestrze, żeby wyłączyć wyjścia rejestru kiedy LCD ma pozwolenie na gadanie. W praktyce wyszło tak, że te wszystkie druty są wspólne z wyjściami od rejestrów dyskietkowych; jedynym wyjątkiem jest drut E od LCD, bo przy wsuwaniu czegoś do dyskietek można by było wysłać do LCD śmieci (a raczej na pewno).
    Guziki też są podpięte przez rejestr przesuwny, tylko że PISO, a nie SIPO i podobnie jak poprzedni, dodaje tylko jeden gratisowy drut na odczyt.
    No i jeszcze UAA2022, w praktyce rejestr SIPO z wyjściami prądowymi na LED'y. Tutaj też jeden drut od mcu gratis, na wejście zatrzaskujące rejestr na wyjścia. Problemem, jaki mi się pojawił jest to, że UAA2022 ma charakterystykę AC tragiczną, dlatego zaprogramowany został tak, że wsuwany jest jeden bit podczas wysyłania wszystkiego do stacji, czyli mniej więcej 15 kbit/s. Drut zegarowy współdzielony jest z zatrzaskującym od dyskietkowych i jednocześnie zegarowy od LCD. I tu pewnie ktoś, kto rozumie, o czym piszę i popatrzył na schemat zapyta się, co z wysyłaniem na LCD i jakim prawem się śmieci nie pojawiają? No to tak:
    Jak jest przerwanie, to wsuwa się 16 bitów do dyskietek, po czym zatrzaskuje (jednocześnie wsuwając 1 bit do uaa), potem za przerwaniem, gdzieś w programie jest wsuwanie do LCD, więc teoretycznie jednocześnie zatrzaskuje 8 razy dyskietkowe, ale jako że ich wewnętrzna zawartość się nie zmieniła, to się nic nie dzieje. Uaa2022 powinno przesunąć i pokazać śmieci na cyferkach, ale jak już wcześniej pisałem, układ ma tą swoją charakterystykę taką, jaką ma (patrz datasheet) i kompletnie nie reaguje na krótkie impulsy przy wsuwaniu do LCD.
    Pora na jeszcze jedną ciekawostkę - na początku miały być 2 cyfry, bo tyle uaa2022 ma nóg, żeby pociągnąć. Ale są 4, multipleksowane, 2 nogi od kierowania kropkami, są podpięte przez pnp do wspólnych anod, w efekcie 4 cyferki multipleksowane po 2. Częstotliwość ma absolutnie wystarczającą, więc nie mrygocze na gołe oko.

    Dobra, dosyć gadania, pora pokazać jak to wygląda i jak buczy:

    Widok na płytkę:

    Muzyczne stacje dyskietek - 16-kanałowy sterownik MIDI Muzyczne stacje dyskietek - 16-kanałowy sterownik MIDI Muzyczne stacje dyskietek - 16-kanałowy sterownik MIDI Muzyczne stacje dyskietek - 16-kanałowy sterownik MIDI Muzyczne stacje dyskietek - 16-kanałowy sterownik MIDI


    Układ w trakcie tworzenia, podstawki na max232, atmega8a i rejestry dyskietkowe.

    Muzyczne stacje dyskietek - 16-kanałowy sterownik MIDI

    Same układy leżały akurat obok:

    Muzyczne stacje dyskietek - 16-kanałowy sterownik MIDI

    Tutaj w trakcie testowania, czy działa - wpięte kilka stacji i obecny już eeprom (co nie znaczy, że był wykorzystywany).

    Muzyczne stacje dyskietek - 16-kanałowy sterownik MIDI

    Układ w akcji, podpięty (na jednym z zdjęć nie ma jeszcze cyferek!):

    Muzyczne stacje dyskietek - 16-kanałowy sterownik MIDI Muzyczne stacje dyskietek - 16-kanałowy sterownik MIDI

    Tak wygląda gniazdo na 5-calową stację, niby mógłbym bezpośrednio kable przylutować, ale taka wtyczka jest przynajmniej "bezinwazyjna".

    Muzyczne stacje dyskietek - 16-kanałowy sterownik MIDI

    Schemacik:

    Muzyczne stacje dyskietek - 16-kanałowy sterownik MIDI

    No i chyba najważniejsze: film przedstawiający, jak to gra.


    Link


    Na kanale mam więcej nagrań, jeżeli kogoś to interesuje i być może dolecą nowe.

    Podziękowania dla Mankoma, który poprawił tony błędów ortograficznych, które chcąc czy nie, robię hurtowo :/

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    To_Ja92
    Poziom 10  
    Offline 
    To_Ja92 napisał 22 postów o ocenie 46, pomógł 0 razy. Mieszka w mieście Wrocław. Jest z nami od 2010 roku.
  • #2
    To_Ja92
    Poziom 10  
    Załączam w załączniku, ale jednoczesnie ostrzegam że schemat w eaglu robiłem po skonczeniu płytki, (nie mowiac o wczesniejszych wersjach na stykowej) a moja jedyna wcześniejsza dokumentacja wygląda tak (niebij prosze):
    Muzyczne stacje dyskietek - 16-kanałowy sterownik MIDI
  • #3
    phanick
    Poziom 28  
    Ja się zapytam, bo chyba nie wyjaśniłeś.
    Od czego zależy częstotliwość dźwięku generowanego przez stację? Od numeru odczytywanej ścieżki?
  • #4
    To_Ja92
    Poziom 10  
    Nie nie, numer ścieżki niema żadnego znaczenia, no poza tym ze poniżej 0 i powyżej 80 głowica nie pojedzie.

    Zakładam że wiesz "jak działa muzyka" i ze każda nuta ma swoją częstotliwość, i tą częstotliwość bierze się z ruchu głowicy, tylko samego ruchu. Tam siedzi silnik krokowy, więc jeżeli głowice będziemy przesuwać o np. 110 ścieżek na sekundę, to częstotliwość podstawowa uzyskanego dźwięku będzie mieć 110 Hz.

    Takie patenty ludzie już robili z samymi silnikami krokowymi (ja na początku też), ale bez pudła rezonansowego były ledwo słyszalne, raz jak do szkoły przyniosłem to z chłopakami brody do ławki przyciskaliśmy i dopiero wtedy było go słychać >.<
    Stacja dyskietek jest o tyle fajna, ze oprócz silnika jest głowica, która zdecydowanie uwydatnia dźwięk, no i również na tacy podany driver, a do samego silnika trzeba montować mostki tranzystorowe albo kupować scalaki za 10zł.
    Z tego co zaobserwowałem niektórzy żeby uzyskać głośniejszy dźwięk (na 3,5 calowych) przesuwali głowice tylko o jedna ścieżkę w te i nazad. Na ta chwile moje zasuwają na całej długości + zawracają przy każdej nowej nucie. (dzięki temu następujące po sobie dwie takie same nuty dają się rozróżnić, no i lepiej to wygląda wizualnie.
  • #5
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #6
    KJ
    Poziom 31  
    Projekt bardzo fajny ale widzę ten sam problem co przy graniu na tesli jeśli gramy więcej niż 2-3 dźwięki jednocześnie zlewają się one ze sobą i nie dają rozróżnić efekt jest taki że lepiej brzmią 4 dyskietki niż 16 niemniej jednak gratulacje udanego projektu. Sam walczę z implementacją midi od dość dawna i nadal mam problem z pewnymi rzeczami.
  • #7
    Griz
    Poziom 15  
    Brawo! Bardzo rozbudowany projekt w stosunku do podobnych obecnych w internecie.

    Aż prosi się o obudowę w formie kolumny podłogowej. Wykorzystanie jakiejś starej podłogówki do zamontowania wszystkich stacji i sterownika poprawiłoby znacząco estetykę a może nawet brzmienie.

    Czy użycie kilku stacji 3,5" nie dałoby lepszego dźwięku?
  • #8
    To_Ja92
    Poziom 10  
    @piekon: jak tylko to pomierzę to obiecuję napisać. chwilowo wiem tyle ze zasilacz 300W dawał rade.

    @griz:
    stacji 3.5" mam ponad 20, wiec z nimi też próbowałem. I zdecydowałem sie jednak na 5.25, dlaczego?
    - 3.5 sa przejedzone tzn praktycznie wszyscy robiący muzykę na dyskietkach używają 3.5, zas 5.25 znalazłem na tylko jednym nieswoim filmie - phantom in the floppera (jak ktoś gdzieś jeszcze widział to mówić)./
    - z moich dotychczasowych "badań" wychodzi ze 3.5 nie różnią się za bardzo od siebie, wszystkie mają podobną barwę i głośność. Natomiast 5.25 maja poważne różnice miedzy różnymi modelami, zarówno w głośności jak i barwie, dzięki temu każdy utwór można odpowiednio dostosować. I to co napisał KJ, właśnie ta różnorodność sprawia że dźwięki się mniej zlewają niż przy 3.5.

    Ale są i wady: ciężej dostać, (chociaż jak gościu w T.Rex'ie dal mi caly karton (9szt.) za 50zł to myślałem że do tramwaju się nie doczłapie.
    No i obudowa, a w zasadzie jej brak, 3.5 są opatulone blaszką z każdej strony i można je hurtowo pakować bez obaw, zaś 5.25 trzeba ostrożniej, żeby nie uszkodzić gołych elementów na pcb albo głowicy. I trzecia wada: złącze krawędziowe, dodatkowy wydatek na gniazda. No niby mógł bym goldpiny przylutować do pcb, ale to był by wandalizm względem zabytkowej stacji, a tego nie chciałem.

    PS: Jeżeli ktoś jest zainteresowany, to można mi podesłać pliczek midi, 1 kanał - 1 stacja. Ja odpalę i odeślę filmik jak ten midi buczy.
  • #9
    PO.
    Poziom 20  
    Żeby jeszcze w tym hałasie dało się rozpoznać jakąś muzykę :/ ... Dobrałbyś taki przyklad, żeby to grało - wiem, że nie będzie łatwo ale temu ta konstrukcja ma służyć.
    Poszukam później kilku starych midów ale bez gwarancji że coś sensownego usłyszysz.
  • #10
    djoy
    Poziom 15  
    Cytat:
    PS: Jeżeli ktoś jest zainteresowany, to można mi podesłać pliczek midi, 1 kanał - 1 stacja. Ja odpalę i odeślę filmik jak ten midi buczy.

    To powiedz które kanały do jakich dźwięków się nadają, bo jak wspomniałeś wcześniej każda stacja 5.25" ma inną barwę...
  • #12
    markovip
    Poziom 34  
    Ila tak na prawdę fonii ma sterownik? (2?) Na głównym filmiku wszystkie dzięki się zlewają i mało jest to czytelne.
  • #13
    To_Ja92
    Poziom 10  
    Foni ? Masz na myśli grane jednocześnie dźwięki ? Tyle ile stacji - 16.
  • #14
    To_Ja92
    Poziom 10  
    Jeżeli tylko trzęsiesz głowicą zamiast nią poruszac po calej dlugosci, to niektóre ci zawsze będą "fałszować".
  • #15
    matys4877
    Poziom 11  
    Na początku też poruszałem głowicą w obie strony ale dochodzą wtedy takie stuki gdy głowica zmienia kierunek po dojechaniu do końca. Dodatkowo jak dla mnie to wtedy miały strasznie rozjechaną charakterystykę głośności od częstotliwości. A tutaj jest miej więcej dobrze.
  • #16
    karol9966
    Poziom 9  
    W czym pisałeś program? Mógłbyś powiedzieć, które piny stacji dyskietek są potrzebne, by można było zagrać na nich jakąś melodię?
  • #17
    To_Ja92
    Poziom 10  
    karol9966 napisał:
    W czym pisałeś program? Mógłbyś powiedzieć, które piny stacji dyskietek są potrzebne, by można było zagrać na nich jakąś melodię?


    Pisałem w Code::blocks, konkretnie w C sporadycznie wstawka asm, a w zasadzie cały czas piszę, obecnie przypadkowo zaopatrzyłem się w wiekowy casio ht3000 więc mam motywacje żeby dokończyć brakujące elementy midi (pitch bend, modulacja itd.). Jak juz będzie wszystko cut mjut to pewnie wrzucę.

    A jeśli chodzi o wydanie dźwięku stacją - 3 piny, pin 12 - zwarcie z masą włącza odczyt z pozostałych pinów, i zapala diodkę. pin 18 - wybór kierunku (masa - środek dyskietki, floating - brzeg, ewentualnie na odwrót nie pamiętam w tej chwili) i pin 20 - w momencie zwarcia z masą przesuwa głowicę o jedną ścieżkę.
  • #18
    phanick
    Poziom 28  
    Przeglądając inne `dyskietkowe` filmy kolegi jednak zauważam, że ich brzmienie jest jednak dość marne, a ten z tego tematu jest chyba najlepszy.

    Proszę np. wziąć przykład z tego utworu:

    Link

    Tutaj jest bardzo dobra dynamika, nie zlewają się głosy.

    Może dlatego, że głowica jeździ od prawej do lewej, a nie tylko drga, jak u Ciebie?
  • #19
    krawciox
    Poziom 9  
    Witam.
    Czy atmega ma coś wgrane coś szczególnego do pamięci?
    Jak tak to czy mogę prosić o wsad
    Pokusił się już ktoś o zrobienie druku do tego?
    pozdrawiam
  • #20
    krawciox
    Poziom 9  
    Chodziło mi o coś szczególnego, co ma wgrane i prosiłem, (jeżeli to możliwe) o wsad.
    A jak kolega ma zamiar nabijać sobie posty ironicznymi odpowiedziami ...
  • #21
    PO.
    Poziom 20  
    To niech kolega wyraża swoje myśli w sposób precyzyjny bo to forum techniczne a nie dla wróżek.