Az alap felépítmény egy PIC16F876-os microchip-el működik. Ebben vam maga a firmware is.
Én magam kiegészítettem a dolgot ezzel a mergerrel ami hosszú évek óta kifogástalanul működött már a -szintén DIY- MIDI patch bay-emben.
Tápnak egy mobiltelefon töltőt tettem rá...
A splitter firmware-ét annyiban módosítottam, hogy ha 0xF0-nál nagyobb értékű byte érkezik a MIDI-n keresztül (nem csatorna üzenetek: System Real Time, System Common, stb) akkor megnézi hogy hány byte-os üzenet jött (1-2-3) és annak megfelelően számolja a következő 1 vagy 2 adatbyte-ot és azokat is "broadcast-ra" küldi - tehát függetlenül a csatorna kiosztástól kiküldi minden OUT portra.
Alapból ugyanis a firmware úgy működött, hogy megnézte a beérkezett byte legfelső bit-jét. Ha ez 0 akkor az egy adat, ha 1 akkor egy status byte. Ez utóbbi esetben a byte "alsó" fele magát a midi csatornát tartalmazza - ezt használja a port táblázat indexeléséhez.
Na most ha egy F8 MIDI CLK üzenet jött akkor azt csak a 9-es csatornára küldte ki ami nekem nem felelt meg. Első körben ezt az üzenetet broadcast-oltam, aztán szépen lépésenként minden módosítás után tesztelve bővítettem a "logikát" olyanra hogy most már pl. a Song Pointer üzenet is szépen kimegy minden portra az azt követő 2 byte-al együtt...
Ezzel a részével nincs is gond! (A system exclusive üzenetekkel külön nem foglalkozom - de erről majd később, csak ha valakit kifejezetten érdekel...)
Maga a setup így nézne ki:
PCR-800 (1-16) -> Splitter IN A
MC-808 (1-16) -> Splitter IN B
Splitter OUT A -> Korg RADIAS(1,3,10)
Splitter OUT B -> Waldorf Blofeld (2)
Splitter OUT C -> Edirol UM-1 mkII. (1-16) DAW felé ha kellene
Splitter OUT D -> Roland D-05 (4)
Splitter OUT F -> Roland FA-06 (5-16)
Minden szép és "csaci ragyi" csak...
Elindul a szekvencia az MC-808-ról. Bemegy a splitter-be. Az annak rendje módja szerint továbbítja az üzeneteket oda ahova valók a MIDI csatornáknak megfelelően, illetve "broadcast-olja" pl. a MIDI CLK-ot (0xF8).
A probléma a következő:
1. PCR-800-on Channel AfterTouch-ot generálva az 1-es MIDI csatornán note-on üzenetekként jelenik meg a Blofeld-en (2-es csatorna)
2. "Beragadnak" hangok - olyan mintha note-off üzeneteket "elnyelne" a rendszer - pedig nem. Mind a MIDI THRU-n, mind az OUT C-n PC-vel monitorozva (MIDIOX) látom hogy kiment az a fránya note off, csak éppen nem veszi tudomásul az eszköz. De sajnos tök random hogy mikor-melyiket 😕
Amire már gondoltam:
1. firmware
Átnéztem oda-vissza. Megnézte egy másik programozó kollégám is - logikai hibát ő sem talált benne. PC-n simulátorban futtatva (is) tökéletesen teszi a dolgát - igaz csak egy-egy byte-al tudom szimulálni - "byte özönnel" nem. Ráadásul, a teszteken sorozatosan átment az UM-1-et használva ehhez a teszterhez. 32000 byte-ot kiküldve és a különböző portokon várva vissza mindig jó volt az UM-1-el.
ALESIS io2express esetén már soha sem futott le hibátlanul, ezért jött a következő gondolat:
1.1 MIDI kábel...
Cseréltem ilyenre-olyanra, gyárira, sajátra, rövidre, semmi.... mindig ugyanaz...
Megjegyzem a kábeleimmel ezeddig soha semmi gond nem volt... de azért az ördög nem alszik, hát ezt az utat is véágigjártam.
2. elektronika...
A MIDI IN része a dolognak szabványosnak mondható. 220 ohmos ellenállás, dióda, optocsatoló stb... 6N137 és 6N138-as optocsatolókat(**) használok - ezek már beváltak sok éve a MIDI PAtch bay-emben és számos thru box-ban amit építettem. Ráadásul;
a.) ugyanazt a mergert használom amit a patch bay-ből szedtem ki (ahol is tökéletesen tette a dolgát),
b.) a merger rész nélkül (egy bemenetet használva csak) sem múlt el a jelenség -> nem a merger a "hibás";
Az mondjuk már gyanús, hogy a MIDI THRU-ra kötve is jelentkeznek a problémák(*), ugyanakkor ez segített kipipálni a firmware gond lehetőséget... A MIDI THRU-hoz ugyanis semmi köze a PIC chip-nek - az pusztán logikai kapukkal van "kiosztva"...
A MIDI OUT -al kapcsolatban több dolgot is kipróbáltam de minden esetben ugyanúgy jelentkezett ugyanaz a hiba: más byte megy ki mint aminek kellene...
Csatoltam az OUT-okat az eredeti kapcsolásnak megfelelően a 74LS00-ás IC NAND kapuinak kimeneteire közvetlenül. A 74HC245-ös octalbus-on keresztül is (a LED-ek helyett MIDIOUT-nak használva a portjait). Próbáltam "átvezetni" 74HC14-es Schmidt triggeren keresztül is (természetesen két-két kaput használva egy-egy kimenethez) de ez sem vezetett eredményre, noha a már sokat emlegetett MIDI Patch bay-emben ez a verzió tökéletesen működik...
Arra is adtam esélyt, hogy maga a PIC chip sérült esetleg a tesztek során - vettem még egyet de azzal is tök ugyanaz a helyzet...
Arra is gondoltam hogy a 4MHz-es órajel esetleg kevés arra hogy időben kiszolgáljon minden megszakítási kérelmet (bár elvben ez kizárt mert a MIDI "csak" 31,250 baud sebességű) - most 8MH-z-es kristály adja az órajelet, de ez sem oldotta meg a problémát.
A soros adatok feldolgozása során sem jelentkezik hiba (frame error)... ami azt jelenti, hogy a PIC chip UART-ja szinkronban van a MIDI jelek sebességével... de mint mondtam már a MIDI THRU-nál is jelentkezik a gond, amiben a PIC benne sincs...
A sokat emlegetett patch bay-em egy ethernet switch házába lett beszerelve, annak tápegységét használva... Gondoltam kipróbálom azzal a táppal is - nem változott a helyzet...
Egy szó mint száz, ne kíméljetek! Várom az ötleteket, meglátásokat szerintetek hol/mi lehet a hiba? Az is sokat segít ha csak "hangosan gondolkodtok" a problémán! Hátha olyasmi jut eszetekbe ami nekem eddig nem...
Szerk (*): ha a bemenetek optocsatolóival lenne gond és bithibák kerülnének elő a splitter jelezné a soros kommunikáció hibáját (frame error) - mert gondolom a véletlenszerű bithiba nem korlátozódna kizárólag byte-on belülre... Ráadásul az UM-1-el mint mondtam tökéletesen működik minden (szerk: ez nem volt igaz, sajnos nem azt teszteltem amit kellett volna vele)... ugyanakkor ott van a "rozsdás bökő", hogy már a MIDI thru sem jó...
Szerk.: (**) Időközben kiderült, hogy ez azonban csak az 5V-os midi rendszerekkel működik jól - 3.3V-os rendszerekhez PC900-as vagy H11L1 kell(ene)... Később talán ki is cserélem (Most örülök hogy megy mindennel a cuccaim közül kivéve az Alesis io2Express hangkarit )
Természetesen feltúrtam a netet hasonló probléma után kutatva. Találtam is hivatkozásokat amelyekből kiderült hogy egyes esetekben MIDI kábel gond volt, más esetben egy-egy kontroller koszos potija miatt küldött ki "zajból" generált CC üzenetet az adott eszköz, de hangkártyák/MIDI csatolók is széles palettán képesek arra amire az io2express - így ezzel a részével meg is tudnék békélni - de hogy 3 gyártó 3 különböző vasa is produkálja ugyanazt a hibát (amit a patch bay-emmel meg nem) arra enged következtetni hogy a splitter elektronikája szivat de rendesen... (Szerk.: ha valaki ilyesmivel találkozik majd egyszer gondoljon majd a 3.3V vs 5V-os MIDI rendszerek közötti átjárásra!)
Kérdés
LiPI
Sziasztok!
Építettem egy MIDI router/splitter-t eme leírás alapján...
Az alap felépítmény egy PIC16F876-os microchip-el működik. Ebben vam maga a firmware is.
Én magam kiegészítettem a dolgot ezzel a mergerrel ami hosszú évek óta kifogástalanul működött már a -szintén DIY- MIDI patch bay-emben.
Tápnak egy mobiltelefon töltőt tettem rá...
A splitter firmware-ét annyiban módosítottam, hogy ha 0xF0-nál nagyobb értékű byte érkezik a MIDI-n keresztül (nem csatorna üzenetek: System Real Time, System Common, stb) akkor megnézi hogy hány byte-os üzenet jött (1-2-3) és annak megfelelően számolja a következő 1 vagy 2 adatbyte-ot és azokat is "broadcast-ra" küldi - tehát függetlenül a csatorna kiosztástól kiküldi minden OUT portra.
Alapból ugyanis a firmware úgy működött, hogy megnézte a beérkezett byte legfelső bit-jét. Ha ez 0 akkor az egy adat, ha 1 akkor egy status byte. Ez utóbbi esetben a byte "alsó" fele magát a midi csatornát tartalmazza - ezt használja a port táblázat indexeléséhez.
Na most ha egy F8 MIDI CLK üzenet jött akkor azt csak a 9-es csatornára küldte ki ami nekem nem felelt meg. Első körben ezt az üzenetet broadcast-oltam, aztán szépen lépésenként minden módosítás után tesztelve bővítettem a "logikát" olyanra hogy most már pl. a Song Pointer üzenet is szépen kimegy minden portra az azt követő 2 byte-al együtt...
Ezzel a részével nincs is gond! (A system exclusive üzenetekkel külön nem foglalkozom - de erről majd később, csak ha valakit kifejezetten érdekel...)
Maga a setup így nézne ki:
PCR-800 (1-16) -> Splitter IN A
MC-808 (1-16) -> Splitter IN B
Splitter OUT A -> Korg RADIAS(1,3,10)
Splitter OUT B -> Waldorf Blofeld (2)
Splitter OUT C -> Edirol UM-1 mkII. (1-16) DAW felé ha kellene
Splitter OUT D -> Roland D-05 (4)
Splitter OUT F -> Roland FA-06 (5-16)
Minden szép és "csaci ragyi" csak...
Elindul a szekvencia az MC-808-ról. Bemegy a splitter-be. Az annak rendje módja szerint továbbítja az üzeneteket oda ahova valók a MIDI csatornáknak megfelelően, illetve "broadcast-olja" pl. a MIDI CLK-ot (0xF8).
A probléma a következő:
1. PCR-800-on Channel AfterTouch-ot generálva az 1-es MIDI csatornán note-on üzenetekként jelenik meg a Blofeld-en (2-es csatorna)
2. "Beragadnak" hangok - olyan mintha note-off üzeneteket "elnyelne" a rendszer - pedig nem. Mind a MIDI THRU-n, mind az OUT C-n PC-vel monitorozva (MIDIOX) látom hogy kiment az a fránya note off, csak éppen nem veszi tudomásul az eszköz. De sajnos tök random hogy mikor-melyiket 😕
Amire már gondoltam:
1. firmware
Átnéztem oda-vissza. Megnézte egy másik programozó kollégám is - logikai hibát ő sem talált benne. PC-n simulátorban futtatva (is) tökéletesen teszi a dolgát - igaz csak egy-egy byte-al tudom szimulálni - "byte özönnel" nem.
Ráadásul, a teszteken sorozatosan átment az UM-1-et használva ehhez a teszterhez. 32000 byte-ot kiküldve és a különböző portokon várva vissza mindig jó volt az UM-1-el.
ALESIS io2express esetén már soha sem futott le hibátlanul, ezért jött a következő gondolat:
1.1 MIDI kábel...
Cseréltem ilyenre-olyanra, gyárira, sajátra, rövidre, semmi.... mindig ugyanaz...
Megjegyzem a kábeleimmel ezeddig soha semmi gond nem volt... de azért az ördög nem alszik, hát ezt az utat is véágigjártam.
2. elektronika...
A MIDI IN része a dolognak szabványosnak mondható. 220 ohmos ellenállás, dióda, optocsatoló stb... 6N137 és 6N138-as optocsatolókat(**) használok - ezek már beváltak sok éve a MIDI PAtch bay-emben és számos thru box-ban amit építettem. Ráadásul;
a.) ugyanazt a mergert használom amit a patch bay-ből szedtem ki (ahol is tökéletesen tette a dolgát),
b.) a merger rész nélkül (egy bemenetet használva csak) sem múlt el a jelenség -> nem a merger a "hibás";
Az mondjuk már gyanús, hogy a MIDI THRU-ra kötve is jelentkeznek a problémák(*), ugyanakkor ez segített kipipálni a firmware gond lehetőséget... A MIDI THRU-hoz ugyanis semmi köze a PIC chip-nek - az pusztán logikai kapukkal van "kiosztva"...
A MIDI OUT -al kapcsolatban több dolgot is kipróbáltam de minden esetben ugyanúgy jelentkezett ugyanaz a hiba: más byte megy ki mint aminek kellene...
Csatoltam az OUT-okat az eredeti kapcsolásnak megfelelően a 74LS00-ás IC NAND kapuinak kimeneteire közvetlenül. A 74HC245-ös octalbus-on keresztül is (a LED-ek helyett MIDIOUT-nak használva a portjait). Próbáltam "átvezetni" 74HC14-es Schmidt triggeren keresztül is (természetesen két-két kaput használva egy-egy kimenethez) de ez sem vezetett eredményre, noha a már sokat emlegetett MIDI Patch bay-emben ez a verzió tökéletesen működik...
Arra is adtam esélyt, hogy maga a PIC chip sérült esetleg a tesztek során - vettem még egyet de azzal is tök ugyanaz a helyzet...
Arra is gondoltam hogy a 4MHz-es órajel esetleg kevés arra hogy időben kiszolgáljon minden megszakítási kérelmet (bár elvben ez kizárt mert a MIDI "csak" 31,250 baud sebességű) - most 8MH-z-es kristály adja az órajelet, de ez sem oldotta meg a problémát.
A soros adatok feldolgozása során sem jelentkezik hiba (frame error)... ami azt jelenti, hogy a PIC chip UART-ja szinkronban van a MIDI jelek sebességével... de mint mondtam már a MIDI THRU-nál is jelentkezik a gond, amiben a PIC benne sincs...
A sokat emlegetett patch bay-em egy ethernet switch házába lett beszerelve, annak tápegységét használva... Gondoltam kipróbálom azzal a táppal is - nem változott a helyzet...
Egy szó mint száz, ne kíméljetek! Várom az ötleteket, meglátásokat szerintetek hol/mi lehet a hiba? Az is sokat segít ha csak "hangosan gondolkodtok" a problémán! Hátha olyasmi jut eszetekbe ami nekem eddig nem...
Szerk (*): ha a bemenetek optocsatolóival lenne gond és bithibák kerülnének elő a splitter jelezné a soros kommunikáció hibáját (frame error) - mert gondolom a véletlenszerű bithiba nem korlátozódna kizárólag byte-on belülre... Ráadásul az UM-1-el mint mondtam tökéletesen működik minden (szerk: ez nem volt igaz, sajnos nem azt teszteltem amit kellett volna vele)... ugyanakkor ott van a "rozsdás bökő", hogy már a MIDI thru sem jó...
Szerk.: (**) Időközben kiderült, hogy ez azonban csak az 5V-os midi rendszerekkel működik jól - 3.3V-os rendszerekhez PC900-as vagy H11L1 kell(ene)... Később talán ki is cserélem
(Most örülök hogy megy mindennel a cuccaim közül kivéve az Alesis io2Express hangkarit )
Természetesen feltúrtam a netet hasonló probléma után kutatva. Találtam is hivatkozásokat amelyekből kiderült hogy egyes esetekben MIDI kábel gond volt, más esetben egy-egy kontroller koszos potija miatt küldött ki "zajból" generált CC üzenetet az adott eszköz, de hangkártyák/MIDI csatolók is széles palettán képesek arra amire az io2express - így ezzel a részével meg is tudnék békélni - de hogy 3 gyártó 3 különböző vasa is produkálja ugyanazt a hibát (amit a patch bay-emmel meg nem) arra enged következtetni hogy a splitter elektronikája szivat de rendesen...
(Szerk.: ha valaki ilyesmivel találkozik majd egyszer gondoljon majd a 3.3V vs 5V-os MIDI rendszerek közötti átjárásra!)
Link to comment
Share on other sites
válasz erre a kérdésre
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.