DIY project: Tiny MIDI Merger

organix

Synth DIY Goeroe
Lid sinds
24 oktober 2005
Berichten
908
Locatie
Omgeving Rotterdam
In het kader van de Synthforum DIY projecten hier mijn eerste inzending 8) Ik ben de afgelopen twee maanden bezig geweest met het ontwerpen van een MIDI Merger.

Je vraagt je misschien af waarom, omdat er al zoveel ontwerpen en commerciële MIDI Mergers zijn. Toch heeft deze MIDI Merger een leuke eigenschappen. Hij is om te beginnen erg klein en eenvoudig zelf te bouwen, en hij is bovendien erg goedkoop qua onderdelen. Hij maakt gebruik van de Atmel ATtiny45 microcontroller. Met een beetje creativiteit bouw je deze MIDI Merger voor +/- 10 euro!

Even alle eigenschappen op een rij:

  • Klein eenvoudig ontwerp met weinig componenten. Slechts 2 stuks DIP-8 IC´s en wat 'gruis-componenten'.
  • Merged alle type MIDI berichten (incl. Sysex en realtime berichten. MTC Quarter Frames alleen op ingang 1 ondersteund).
  • Pitchwheel waarden worden gesommeerd, 16 kanalen onafhankelijk.
  • Automatische MIDI Clock selectie (interlock á la Phil Rees / Kenton).
  • Zend eigen Active Sense (geactiveerd wanneer één van de ingangen dit ontvangt).
  • Ingebouwde MIDI Panic (geactiveerd bij power-on of wegvallen Active Sense).
  • Ondersteund MIDI Running Status.
  • 64-bytes buffer per kanaal (ongeveer 20 MIDI Messages).
  • Buffer wordt automatisch opgeschoond wanneer deze vol raakt (de oudste berichten worden als eerst weggegooid).
  • Snelle firmware geprogrammeerd in 100% assembly.
  • Ontwerp, firmware en updates gratis en voor noppes :biertje:

Schema:

attachment.php


Vandaag heb ik V1.0 van de firmware afgerond. Uiteindelijk wil ik het ontwerp ook op m'n eigen website (organix.inque.org) gaan publiceren, inclusief bouwhandleiding, kant-en-klaar PCB ontwerp etc. Ik heb de volgende hardware features nog in gedachten:

  • Voeding via MIDI ingang ipv losse +5V.
  • Optioneel ontwerp met de ATtiny85, waardoor de ingangs buffers naar de 192-bytes kunnen. Zeker handig voor de Sysex diehards onder ons.

Wat mij leuk lijkt is als mensen hem hier alvast willen bouwen (op gaatjesprint i.o.d.) en kunnen testen.

Naast de componenten in het schema heb je nodig:
  • 3 stuks DIN-5 MIDI connectoren. De cijfers in het schema verwijzen naar de pin-nummers.
  • Losse +5V voeding (voeding via MIDI ingang zal ik binnenkort testen en uitleg posten).
  • Gereedschap, AVR programmer... (logisch)

Firmware is in de bijlage te downloaden. Ik sta open voor suggesties, bugs etc. 8) Firmware updates zal ik in dit topic posten zodra ze er zijn.

Veel plezier ermee alvast!
 

Attachments

  • Schematic_small.jpg
    Schematic_small.jpg
    28,4 KB · Bekeken: 266
  • TinyMIDIMerger_ATtiny45_V1_0.zip
    95,6 KB · Bekeken: 177
Hi Organix,

Ziet er zeker leuk uit.
Puntje van kritiek: de MIDI-standaard eist dat je aan de ingangen opto-couplers gebruikt. Dit ivm potentiaal-verschillen, groundloops en wat wat je nog meer voor ellende tegen kan komen. (Bron: http://en.wikipedia.org/wiki/MIDI_1.0 )

Voor de rest mooi project!

Succes,
- Warner

P.s. voeding via MIDI ingang lijkt me géén goed idee. Niet rommelen aan de standaard ;)
 
Laatst gewijzigd:
Klopt. IC1 is een dubbele opto-coupler.

Voeding via MIDI is inderdaad niet echt volgens de standaard, maar het wordt wel erg vaak toegepast bij commerciële MIDI mergers. Je kan namelijk +5V verkrijgen via de pinnen 4 en 2 op één van de ingangen.
 
Er zijn inderdaad commerciële mergers die gevoed kunnen worden uit de ingang, maar volgens mij haperen die dan aan alle kanten en lees je juist altijd adviezen om die met een echte voeding te voeden...

Ik ben er zelf ook niet zo'n voorstander van. Je raakt toch je isolatie kwijt, en omdat er geen stroom loopt als er geen data is werkt het eigenlijk alleen betrouwbaar als er iets van midi clock op staat. Als er vijf minuten geen data is vraag ik me af of de AT snel genoeg stroom heeft en opstart om niet gelijk iets te missen.
 
Hmm, is dat zo? naar mijn beleving hangt pin 4 van de MIDI uitgang in ieder apparaat altijd direct met een serieweerstand van 220 ohm aan de +5V.

Het is dan juist pin 5 die van +5V en GND wisselt tijdens datatransmissie (UART uitgang). Tijdens idle toestand staat op pin 5 +5V. Er loopt dan inderdaad geen stroom door de LED van de opto-coupler.

Daarom wordt bij MIDI powered pin 4 en pin 2 (GND) gebruikt. Dan heb je continue +5V. Groundloops kun je natuurlijk wel krijgen inderdaad.

De problemen met MIDI powered worden denk ik veroorzaakt doordat de verzender pin 2 niet heeft aan gesloten, of de kabel deze pin niet doorvoert.

Ik zit er aan te denken om via twee (soldeer)jumpers de merger omschakelbaar te maken tussen losse voeding en MIDI powered.
 
naar mijn beleving hangt pin 4 van de MIDI uitgang in ieder apparaat altijd direct met een serieweerstand van 220 ohm aan de +5V.

Het is maar hoe ze het geïmplementeerd hebben. MIDI is een current loop op pinnen 4 en 5, dat kun je op meerdere manieren implementeren en pin 4 aan +5V is geen verplichting in de spec meen ik.

De problemen met MIDI powered worden denk ik veroorzaakt doordat de verzender pin 2 niet heeft aan gesloten

Ehm... dat lijkt me ook geen oplossing. Pin 2 van de ingang mag volgens de spec niet worden aangesloten, dus als jij die gaat gebruiken creëer je direct een groundloop.
 
Even wat schema's bekeken, maar bijvoorbeeld bij de Juno-106 zit pin 4 van de midi uit al niet aan +5V maar hangt die aan een current source. Vraag is of je daar je hele schakeling dan nog aan wilt hangen.
 
Ik zat ook wat schema's te bekijken in de tussentijd :) Je hebt gelijk dat bij sommige apparaten ze een stroombron gebruiken ipv een harde spanning. Dat zie ik nu pas. Dat zou inderdaad dan problemen kunnen geven bij MIDI powered mergers.

Overigens zie ik dan wel steeds pin 2 aan GND hangen.
 
leuk project.

Maar bij de programmer haak ik meestal al af.
Komt omdat je daarvan zoveel versie's hebt .
Is er geen mogelijkheid dat dit ergens centraal, of op bestelling gedaan kan worden voor diegene die hier interesse in hebben ?
 
Ja... zit ik ook een beetje aan te denken. In ieder geval PCBtjes, want daar wil ik er binnenkort toch een aantal van bestellen, dus heb er dan redelijk wat over.

Programmeren van een AVR wil ik best doen wanneer iemand daar om vraagt, maar dan moet eerst de firmware goed getest zijn.
 
@organix hoe staat het met dit project ? Is er nog een vervolg geweest (ander thread...).

Nog niet veel meer aan gedaan dan dat het nu is, maar dit project is eigenlijk al zo goed als klaar. De firmware / schakeling doet wat het moet doen. Misschien dat ik er ooit nog een compact PCBtje voor teken, maar het schema is zo eenvoudig dat je het als DIYer makkelijk op een gaatjesboard bouwt.

Suggesties / bugreports nog steeds welkom.

Betreft die voeding : hoe lang zou dit kunnen werken op een gewone batterij van 9 (of 4.5) Volt ?

Pfoe... durf ik niet direct te zeggen. Een Tiny AVR microcontroller trekt niet zo heel veel stroom, maar ik zeg er wel bij dat er (nog) geen sleep-mode in de firmware is ingebouwd. De merger zou dus theoretisch nog iets zuiniger kunnen.

Met 4.5 Volt zal de microcontroller wel werken maar de vraag is of de ontvanger (het aangesloten MIDI apparaat) dan nog het inkomende signaal ziet. Deze verwacht theoretisch 5 Volt TTL.

Wanneer je 9 Volt batterijvoeding toepast moet er een (zuinige) spanningsregelaar tussen geplaatst worden.

Kan die AVR ook geen Arduino bordje worden ?

Zou kunnen... ben zelf niet zo thuis in de Arduino. Ik bouw m'n hard- en software liever zelf vanaf scratch. Waarom zou je deze schakeling op een Arduino bordje willen hebben?
 
Laatst gewijzigd:
Ah, op die manier.

Ik denk dat je dit project en een Arduino los van elkaar moet zien. Een Arduino is meer een veredeld AVR development board met wat (modulaire) toeters en bellen die handig zijn voor beginners, zoals een ingebouwde programmer (ISP / JTAG) via USB. Puur gericht op het ontwikkelen van nieuwe applicaties.

Voor het uiteindelijke product is het gebruik van een development board vaak minder interessant, gezien de kosten, overhead aan overgebleven ongebruikte hardware, en het fysieke formaat wat meestal niet in een commercieel product past. Bovendien heeft een development board vaak nog niet alle hardware aan boord die nodig is voor het product, waardoor je dan toch weer een losse PCB er naast zou moeten gaan bouwen, dus waarom dan niet één PCB met alles er op? Men past dan wel (in dit geval) een AVR toe, maar niet in de Arduino context.

Zo is ook het verschil met dit project, al is dit geen commericieel project. Maar het is wel het eindproduct: een kant-en-klare DIY midi merger met als doel dat het minder dan 10 euro aan onderdelen kost en snel op te bouwen is: even 2 IC's en wat losse componenten op een experimenteer-PCB, HEX-file in de AVR zetten en klaar. Er hoeft voor de 'eindgebruiker' geen code meer geprogrammeerd te worden.
 
hij is mooi, ga ik maken.
gebruik je een soft uart?

volgens de midi standaard is er altijd een pin , nr2 mat de massa verbonden , dus je zou hem toch zonder problemen moeten kunnen voeden uit de midi IF zelf.
dat maakt voor de loop niet uit, zolang alles maar vanuit een punt gevoed wordt.

waar het fout kan gaan met midi IF is wanneer van alle apparaten die aangesloten worden, de massa´s worden doorgekoppelt.
een juiste midikabel zou een in en een uitgang moeten hebben, waar aan een kant de massa niet is verbonden.
dan lost gelijk het probleem op van fabrikanten die doodleuk bij alle midi in en uitgangen pin 2 met de massa verbinden.

ah, vergeten...
:koffie:
 
@organix Ik had die zip-file nog niet gezien voordien. Blijkbaar heb je het programmeerwerk ook reeds gedaan (of van wie is dit project ?). :okdan:
Nou dan heb ik wel interesse in een AVR reeds voorzien van die code, kun je dat voor me bezorgen ?
Ik denk dat je dit project en een Arduino los van elkaar moet zien. Een Arduino is meer een veredeld AVR development board met wat (modulaire) toeters en bellen die handig zijn voor beginners, zoals een ingebouwde programmer (ISP / JTAG) via USB. Puur gericht op het ontwikkelen van nieuwe applicaties.
...
Inderdaad, en als ik daaraan zou beginnen, is het ook om een uitgebreider project te maken,
met inbegrip van bvb. deze merger, maar ook enkele uitbreiding om dingen via midi te sturen CC's t.e.m. sysexdumps.
(P.s. je website... dat kan toch beter hé ?)
 
Klopt. IC1 is een dubbele opto-coupler.

Voeding via MIDI is inderdaad niet echt volgens de standaard, maar het wordt wel erg vaak toegepast bij commerciële MIDI mergers. Je kan namelijk +5V verkrijgen via de pinnen 4 en 2 op één van de ingangen.

Je vergist je, die 5V staat alleen op de midi OUT bussen, niet op de ingangen.
Zoals je het nu heb krijg je helemaal geen voeding....
 
gebruik je een soft uart?

Yep, zowel de twee ingangen als de uitgang zijn soft uarts. Startbits worden gedetecteerd door de INT0 en de Pin Change interrupt, en bits worden uitlezen / uitgestuurd op timer interrupts.

Nou dan heb ik wel interesse in een AVR reeds voorzien van die code, kun je dat voor me bezorgen ?

Dat wil ik best. Hou er wel rekening mee dat als je zelf geen AVRs kan programmeren (lees: HEX/BIN file er in stoppen), dat je dan niet makkelijk een nieuwe firmware update er in krijgt.
Er zit (nog) geen bootloader in (wat firmware updates via MIDI mogelijk maakt). Misschien dat ik daar binnenkort eens aan begin.

Je vergist je, die 5V staat alleen op de midi OUT bussen, niet op de ingangen.
Zoals je het nu heb krijg je helemaal geen voeding....

Wat je zegt over de midi OUT bussen klopt, en daarom kun je +5V verkrijgen op één van de ingangen van de merger.

Zoals het schema nu is gepresenteerd is er geen Power-over-MIDI en moet je zelf een voeding aansluiten op de betreffende +5V punten in het schema.
 
Back
Top