Bouwverslag MIdrum 2 x2

Draakje

Stamgast
Lid sinds
6 november 2003
Berichten
274
Locatie
Udenhout
Omdat ik graag de door GentleG aangeboden MIdrum 2 x2 wilde kopen, maar niet genoeg geld op mijn rekening bleek te hebben, bood GentleG mij aan om mij te helpen er een zelf te bouwen. Mits ik een openbaar bouwverslag zou bijhouden op bv het synthforum.
Aangezien ik al vele apparaten van anderen heb nagebouwd vond ik dit een heel mooi voorstel omdat ik zo ook eens mijn steentje bij kan dragen aan de doe-het-zelf apparaat knutsel wereld!

Daar gaat die dan.

De MIdrum 2 is een heel gave topographic drumsequencer gebaseerd op de Grids module van Mutable Instruments
Het enige dat ik hier over kan zeggen is dat je met deze sequencer geen drumnoten genereert door steps te programmeren, maar door aan schuifjes en knopjes te draaien. Je flowed als het ware door patterns heen en kan allerlei variabelen instellen, zoals randomize, en het grid waarop je noten staan. Opvallend/kenmerkend zijn de shuffles en grooves die je zo kan genereren.
Aangezien ik niet zo van patterns programmeren hou, maar wel van knoppen draaien lijkt het mij super om deze module aan mijn Vermona DRM1 te hangen.

GentleG heeft de code van de Grids module gebruikt om een eigen versie te bouwen die ipv triggers midi noten uitstuurt. Bovendien kan deze 6 verschillende drums bespelen ipv 3, zoals de Grids.
Hier kun je meer lezen over GentleG's MIdrum 2 x2.

En hier is een filmpje!

In de volgende posts zal ik zo goed mogelijk mijn vorderingen met de MIdrum bijhouden.
 
Volgens de site van Geert Goltstein (=GentleG) heb ik de volgende onderdelen nodig:

14 Pots (10K lineair)
14 Faders (10K lineair)
1 switch 4bit
1 Dipswitch 4bit
4 buttons
2x 4067
6n137
1 two color led
Arduino Nano V3.0
bridge rectifier
LM7805
en dan nog enkele condensatortjes en weerstandjes.

Ik ben nu begonnen om de MIdrum op een breadboard te maken, en ik heb inmiddels het voedingsgedeelte en de midi-in en -uit naar de Arduino Nano af. Ik heb bijgevoegde schemaatjes gebruikt Bij het voedingsgedeelte heb ik de 2200uF condensator vervangen voor 470uF, en de 330nF vervangen voor 100nF.
Aangezien er geen schema van de MIdrum beschikbaar is hoop ik het meeste uit de Arduino code te kunnen halen.

@Geert. Is dat de juiste manier, of heb jij een ander idee?
@Geert. De code die op jou GitHub staat is van de MIdrum2, zou je hier de code voor de MIdrum2 x2 willen posten, of op je GitHub plaatsen?
 

Attachments

  • power-source.jpg
    power-source.jpg
    19,6 KB · Bekeken: 53
  • Arduino-midi-out.jpg
    Arduino-midi-out.jpg
    26 KB · Bekeken: 56
  • Arduino-midi-out-2.jpg
    Arduino-midi-out-2.jpg
    19,2 KB · Bekeken: 55
  • Arduino-midi-in.jpg
    Arduino-midi-in.jpg
    26,4 KB · Bekeken: 52
  • Arduino-midi-in-foto.jpg
    Arduino-midi-in-foto.jpg
    18 KB · Bekeken: 58
Hier een fotootje van mijn vorderingen.

Op het breadboard zie je het voedingsgdeelte, de midi-in en -out en de arduino Nano.
Voor de faders heb ik een oude lichttafel uit elkaar gehaald, ik hou wel van dat robuste ouwe spul. Ik heb de faders flink moeten schoonmaken want er lijkt en muizennest in de schuur te zitten;{.
Met een beetje geluk kan ik het geheel strax nog in mijn eurorack schroeven, wel meteen een hele verdieping in mijn rack gevuld.
 

Attachments

  • Midrum-2x2-01.jpg
    Midrum-2x2-01.jpg
    54,4 KB · Bekeken: 62
Geert bedankt voor de code! Ik heb er eerst weer flink mee moeten klooien maar het uploaden naar de arduino lijkt prima te zijn gegaan. Eerst wilde de arduino software mijn Nano boardje niet herkennen. En omdat ik DEZE chineese 'imitatie' had gekocht dacht ik dat het daar aan lag. Na met drivers te hebben geklooid en de arduino software opnieuw installeren enz. bleek de fout te zitten in het feit dat het boardje nog in mijn breadbord zat. Ook al stond er geen spanning op en waren verder alleen de midi-in en -uit aangesloten. Na het boardje uit het breadbord te hebben gehaald was uploaden geen probleem meer.
Nu de de hardware nog aan gaan sluiten. Ik heb in de code idd een hoop aanwijzingen gevonden dus daar ga ik eerst mee aan de slag.

@marcmarc : Ik heb dat voedingsschema gepakt van de MIDIbox Core8 module. Daar zit vaak ook een grote LCD aan en een hoop ledjes, dus ik dacht idd dat dat in dit geval overdreven was.
Ik heb er nu een 9 Volt AC adapter aanhangen, maar dat kan morgen zomaar een DC zijn en polariteit verschilt ook nog al wel eens. Maar door die gelijkrichter maakt dat toch niet zoveel uit, of wel?
 
@Draakje:
Je had die hele voeding weg kunnen laten.
Enkel een 9V DC aansluiten op de Vin pin van de Arduino.
Daar zit namelijk al een spanningsregelaar op van 5 Volt.
De 5 Volt kan je dan ook voor andere doeleinden aftappen van de +5V pin.

Als het uploaden naar de Arduino een probleem is als ie in het breadboard zit, dan komt dat omdat je de MIDI aangesloten hebt op de RX. Die wordt dan gedeeld met de USB seriƫle verbinding.

In het schema staat voor R2 een 470 Ohm R.
Dat is een pullup waarmee 10mA wordt geschakeld bij 5V.
Dat is kul!
Maak die maar 4,7 K. Dan wordt het 1mA en dat is al ruimschoots voor een korte verbinding.
 
Ok, misschien laad ik het voedingsgedeelte dan wel weg wanneer ik hem op een gaatjesprintje ga zetten.

En ik heb zojuist de 470 Ohm weerstand in het midi-in gedeelte vervangen voor een 4k7, en nou upload de code ook prima terwijl hij op het breadboard zit. Bedankt voor de tip!
Ik wil dat eigenlijk ook ff melden in de post hierboven waar het schema staat, maar ik kan die niet meer editten, of zie ik iets over het hoofd?!
 
Voeding (nattevinger 100mA is voldoende):
Direct max 9V aansluiten kan, maar pas op bij de chinese clones... 7V is beter, ik heb er al eens een opgeblazen.
Want veel oude adapters geven meer spanning af dan de 9V die er op staat.

Ik heb zelf wel eens in benevelde toestand een apparaat gesloopt door een verkeerde adpter te gebruiken, sindsdien maak ik mijn apparaten hufterproof met een bruggelijkrichter (= 4diodes) en een 7805 :biertje:
Dan is 12Vdc ook nog te doen of zelfs 9Vac

Inmiddels is 5V usb voeding zo standaard geworden dat je ook via de usb ingang direct 5V voeden.

Midi maak ik zelf altijd op basis van 6n137 met een 10k pullup
 
@GentleG:
Een 7 volt adapter is niet bepaald standaard.
Een 9 Volt DC geschakelede voeding levert tegenwoordig netjes 9 volt af.
Je kan natuurlijk ook 3x een IN4001 diode in serie zetten met een elco erachter van 100UF.
Dan het je de 7 Volt.

Als je nou een adapter uit China combineert met een Chinese Nano...
 
Om voor mezelf een overzicht te krijgen van de verschillende onderdelen en hoe deze aan te sluiten heb ik een word bestandje gemaakt, zie bijlagen

Daaruit komen de volgende vragen naar voren:

1 Bij alle voorgaande versies zitten boven de X en Y faders twee potmeters, 1 voor modulation wheel en 2 groove. Bij de laatste versie, waarvan ik volgens mij de code heb, is de modulation potmeter niet meer aanwezig en zijn er 2 extra schuifschakelaars bijgekomen.
Wat doen deze schakelaars en hoe zitten ze aangesloten???

2 De CD4067's zit via S0 t/m S3 aan de arduino (digital pin 6 t/m 9). Zitten deze gewoon parallel aangesloten of zit er een bepaalde volgorde in, of zit de 2e 4067 nog weer anders aangesloten???

3 Bij de foto's van vorige versies lijkt het erop dat de pinnen van de X en Y fader, en de twee pots ook aan de CD4067's zitten, maar in de huidige code hebben deze pinnen een eigen ingang op de arduino (A0,A3 en A4) ?!
Ik denk dus dat de 4067's dan een aantal ongebruikte analoge ingangen heeft, moet ik deze aan ground hangen???

4 Ik heb ook zo'n mooi 4bit rotary switch om het midi kanaal in te stellen, maar ik heb werkelijk geen idee hoe ik deze zou moeten aansluiten?!?!?!?!

Volgens mij is de rest vrij helder, en hoop ik dat ik de pinout een beetje goed heb van de 4067, zie bijlage.
Ik vind het erg lastig om zo'n overzicht te maken, zeker als een ander het ook nog moet begrijpen, misschien willen jullie de bijlages ook ff checken op fouten/tips.
Alvast bedankt!
 

Attachments

  • MIdrum overzicht.pdf
    145 KB · Bekeken: 74
  • MIdrum overzicht.doc
    218 KB · Bekeken: 75
1. Alleen de Groove-pot is belangrijk.
De Modwheel pot is facultatief.
De switches waren voor een test, nu ongebruikt.

2. Download en lees maar eens de datasheet van 4067.
Het is een 4bit (=16) analoge switch (=schakelaar), de 4bits zijn de 4 gekleurde kabels S0/S3
Beide zitten hetzelfde aangesloten.

3. Maakt niet veel uit, kijk maar wat je het best uitkomt: X en Y aan 4067 of direct aan arduino, er zijn genoeg ingangen
Het is wel netjes om ongebruikte in/uitgangen aan grond te hangen

4. Ik gebruik een exponentiele opeenvolging van weerstanden (ongeveer) om zo 16 unieke waarden te bereiken, zie regels 471 t/m 504 van de MIdrum code
Dit gebruik ik voor zowel de dipswitches als de draaiswitch. Beide komen dus binnen op een eigen analoge input.

ps Goede vragen!
 
Joepie!!!!
Na dagen en nachten zwoegen, tussen de paasbrunches door, is het dan toch gelukt om hem werkend te krijgen.
ZIE HIER!!!

Het had wel wat voeten in de aarde en ik heb zelfs wat code aangepast.
Om te beginnen had ik de pushbuttons als pull down aangesloten, wat ik verreweg het meeste zag bij 'google button arduino". Toen ik zag dat de LEDs begonnen te knipperen als ik de stop button ingedrukt hield begon er een lampje te branden. Vervolgens zag ik in de code dat de pinmodes pull-up waren, en na dat hardware matig aangepast te hebben leek het er al meer op.
Daarna had ik het probleem dat alles bleef hangen zodra ik de 'panic button' indrukte. Het geheel bleef trouwens ook al bij het opstarten hangen als ik de 4067's met daaraan de 12 faders en pots aangesloten had. Bij toeval ontdekte ik dat ik moest opstarten zonder de 4067's, die ik gelukkig met een stekkertje aan het breadbord had zitten.
Dan kon ik op play drukken en begonnen de noten random te spelen. Daarna kon ik de 4067's aansluiten en liep het allemaal lekker. Moest ik natuurlijk niet per ongeluk de panic button indrukken want dan moest ik deze procedure weer herhalen.
Overigens viel me ook al op dat de configuratie instellingen (dipswitches) bij het opstarten vrij random de instellingen pakte.
Maar goed, ableton eraan en ik kon lekker spelen, super gaaf!!!

Aangezien de 'panicbutton' met die configuratie instellingen en ook de faders/pots te maken heeft leek het me logisch dat daar de fout zat.
Gelukkig had ik nog een oude code op mijn computer staan en heb die naast de nieuwe code gelegd en toen viel me het volgende op.
In het begin bij de definities staat in de oude code:
#define DipPin A4
#define ChannelPin A5
en geen:
#define LeftSPin A1
#define RightSPin A1
En in de nieuwe code staat dus niets over DipPin of ChannelPin, en hierboven heeft Geert al gezegd dat de twee switches een test waren en nu ongebruikt. Dus ik denk nu dat LeftSpin en RightSPin overbodig zijn.
Vervolgens ben ik op zoek gegaan naar het stuk code dat over de 'panic button' gaat. Deze stukken verschilden iets van elkaar dus ik heb uit de oude code dit stuk geknipt:

void dipped(){ // this function runs at start up and when the topmost red button is pressed
MIDI.sendControlChange (120 , 0, channel); // All sounds off

int channelpinRead = analogRead(ChannelPin);
channel = Switch4bit(channelpinRead);
if (channel == 0){ channel = 16; }

int dippinRead = analogRead(DipPin);
dips = Switch4bit(dippinRead);

BarBeatLed = !!bitRead(dips, 0); // dipswitch 1: enable / disable bar beat indicator for your non-midi-syncable-bandmate
if (!BarBeatLed){
digitalWrite(LedBar, LOW);
digitalWrite(LedBeat, LOW);
}
if (!!bitRead(dips, 1)){ // dipswitch 2 ON: enable MIDI thru
MIDI.turnThruOn() ;
}
if (!bitRead(dips, 1)){ // dipswitch 2 OFF: disable MIDI thru
MIDI.turnThruOff() ;
}
MidiSyncOut = !!bitRead(dips, 2); // dipswitch 3: enable / disable Start - Stop - Clock messages on MIDI out
MidiSyncInt = !!bitRead(dips, 3); // dipswitch 4: external / internal sync
}


En geplakt in de nieuwe code, ipv deze:

void dipped(){ // this function runs at start up and when the topmost red button is pressed
MIDI.sendControlChange (120 , 0, channel); // All sounds off

ReadPotFad();

channel = Switch4bit(Pots[12]);
if (channel == 0){ channel = 16; }
Serial.println(channel);

dips = Switch4bit(Faders[12]);
Serial.println(dips);

BarBeatLed = !!bitRead(dips, 0); // dipswitch 1: enable / disable bar beat indicator for your non-midi-syncable-bandmate
if (!BarBeatLed){
digitalWrite(LedBar, LOW);
digitalWrite(LedBeat, LOW);
}
if (!!bitRead(dips, 1)){ // dipswitch 2 ON: enable MIDI thru
MIDI.turnThruOn() ;
}
if (!bitRead(dips, 1)){ // dipswitch 2 OFF: disable MIDI thru
MIDI.turnThruOff() ;
}
MidiSyncOut = !!bitRead(dips, 2); // dipswitch 3: enable / disable Start - Stop - Clock messages on MIDI out
MidiSyncInt = !!bitRead(dips, 3); // dipswitch 4: external / internal sync
}


Vervolgens heb ik deze definities opgegegeven:
#define LeftSPin A5
#define RightSPin A5
#define DipPin A1
#define ChannelPin A2

En nou lijkt alles te werken zoals het hoort. Ik heb LefSPin en RightSPin helemaal proberen te verwijderen maar dan wil de code niet meer compileren. Vandaar dat ik ze de enige vrije analoge pin heb gegeven.

Ik heb geen idee of dit een goede aanpassing van de code is en of waarom de nieuwe code het niet goed doet bij mij.
Wat denk jij Geert?

Ik kan iig het geheel op gaatjes print over gaan zetten en de hardware afmaken, en zal dan ook fotootjes en een nieuw bouw overzicht met mijn bevindingen maken.
ps Ik ben ook heel blij met mijn joystick voor de X enY fader!
 
Goed begin :okdan:
Alle push buttons staan in de code als pull up, je schakelt dus naar grond.
De 4bit switches hebben wel elk 5 weerstanden nodig, dat kan ik in de video niet zijn.
Ik kan ook niet zien hoe alles is aangesloten aan je arduino, afhankelijk daarvan moet je de code aanpassen.
 
De 4bit dipswitches heb ik idd met de 5 weerstanden aangesloten zoals in jou beschrijving in de code staat. Ik heb nu gewoon pinnen met jumpertjes gebruikt, dat werkt ook goed nu ik de code heb aangepast met dat stukje oude code en deze definities:
#define LeftSPin A5
#define RightSPin A5
#define DipPin A1
#define ChannelPin A2

Maar wat zijn LeftSPin en RightSPin, of wat is hun functie in de code?
 
Maar als ik deze 2 regels delete, krijg ik de volgende foutmelding:
Arduino: 1.6.8 (Windows 7), Board:"Arduino Nano, ATmega328"

C:\Users\Samsung\Downloads\MIdrum\Code\MIdrum2x2aangepast02\grids_resources.ino: In function 'void Pulse()':

grids_resources:345: error: 'LeftSPin' was not declared in this scope

153, 0, 0, 0, 102, 102, 102, 102,

^

grids_resources:346: error: 'RightSPin' was not declared in this scope

};

^

exit status 1
'LeftSPin' was not declared in this scope
 

Vergelijkbare discussies

Back
Top