PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Experimenteller microcontrollergesteuerter Midi Controller



goara
05.01.2009, 12:46
Hallo,

auf dem 25c3 gab es einen Vortrag über microcontrollergesteuerte elektronische musik :)
http://events.ccc.de/congress/2008/Fahrplan/events/2843.en.html
Fand den Sound echt hammer, und will mir jetzt auch sowas bauen.
(ja ich weis habe grad schon genug Projekte, aber macht ja nix )

Was es können soll:
Will eine Kiste mit vielen Knöpfen, schaltern, potties.... mit der ich ein MIDI-Signal erzeugen kann, um einen Synthesizer / Drummaschin ( Software ) zu steuern. zb Live oder sowas in der Art.

Wie bekomme ich das midi-Signal in meinen Laptop ( der hat kein midi in) gibts das als USB oder brauche ich eine extrene Soundkarte?
Hat irgendwer schon mal was in die Richtung geamcht ??

ISt jetzt erst mal zimlich planlos, aber das wird schon noch ;)

Besserwessi
05.01.2009, 13:01
Das midi signal ist eigentlich nichts anderes als eine UART mit einer sonst nicht gebräuchlichen Baudrate (irgendwas um 34 kBuad) und anderen Pegeln. Früher ging das am PC zum Teil über den Game Port.

Was es heute gibt weiss ich nicht, aber USB-Midi wäre sicher möglich.

robocat
05.01.2009, 15:04
bei hardware synthies ist meistens eine auflistung der sysex messages in der anleitung, wobei auch da die doku manchmal zu wünschen übriglässt. wie das bei software synths ist, kann ich nicht sagen.

auf jeden fall spannendes thema. halte uns bitte auf dem laufenden :)

gruesse

EDIT: kurz USB und MIDI in ebay gesucht... sowas http://cgi.ebay.de/USB-2-0-MIDI-1-IN-OUT-Kabel-Adapter-Interface-Vista-CE_W0QQitemZ140291534993QQcmdZViewItemQQptZStudioe quipment?hash=item140291534993&_trksid=p3286.c0.m14&_trkparms=72%3A1239|66%3A2|65%3A12|39%3A1|240%3A13 18 könnte was für dich sein. ist ja erschwinglich.

goara
05.01.2009, 17:44
@robocat danke für den link , hab ich mir gelcih mal geschoppt ;)

Denke bei dem Thema kann man eine Menge machen,
z.b hatten die bei dem Vortrag so ein gerät, dass einfach zufallsgenerierte (zusammenpassende) Töne sendet, dann kann man z.b mit einem Potti einstellen wie viele verschiedene Töne es sein sollen....
Klingt so hammer.
Ausserdem hatten die noch ne Drummachine, die einfach im Takt die Beats sendet, und das dann auch mit algorithmen berechnet, sodass es harmonsich klingt.. hoff mal dass der Vortrag noch online gestellt wird, dann schick ich dir mal den Link ;)

goara
05.01.2009, 21:44
so.. habe mir jetz mal ein grobes design überlegt:
http://dyyyh.de/robo/midi2.png
unten kann man über Taster die Tracks wählen, dann oben links die BPM und den Takt,
Der Rechte LCD zeigt Effekte und so zeugs, das kann man über die Tasten oben rechts wählen, der Linke die Sequenzen..
an dem Tastenkreuz kann man die Effektparamter bearbeiten, an den drehpotties irgendein anderes zeugs..
und ein schiebepotti für sosnt noch was, weis ich noch nicht...
Was haltet ihr davon? Verbesserungsvorschläge ? Anregungen ??

goara
11.01.2009, 17:07
So, habe mich jetz mal ein wenig in MIDI eingelesen.
Das Signal ist ein Invertiertes Signal mit 31250 Baud. 0V = logisch1, 5V = logisch 0.
Wie kann ich denn ein solches Signal erzeugen ??
Ist es möglich einfach die Baudrate von 31250 einzustellen und die UART dafür zu benutzen ?
Dann müsste ich das Signal nur vorher invertieren, oder das mit nem Transistor machen.
Aber wie bekomme ich dei ganzen Start/Stop parity sosntwas bits weg ?
Oder wie könnte man sonst so ein SIgnal erzeugen ??

goara
20.01.2009, 08:52
habe dazu noch eine Frage:

benötige ja sehr viele AD wandler. (ca 20)
was gibt es denn da für welche (DIL)
oder macht es mehr sinn die vorhandenen 8 zu nutzen und auf die verschidenen Potties zu schlaten ? dann hätte ich jeweils 3 Potties immer abwechselnd / ADC, wie könnte man das denn schalten?
Einfach 3 Transistoren pro / port oder geht das irgndwie einfacher

wkrug
20.01.2009, 10:26
So, habe mich jetz mal ein wenig in MIDI eingelesen.
Das Signal ist ein Invertiertes Signal mit 31250 Baud. 0V = logisch1, 5V = logisch 0.
Wie kann ich denn ein solches Signal erzeugen ??
Ist es möglich einfach die Baudrate von 31250 einzustellen und die UART dafür zu benutzen ?

Wenn man eine geeignete Quarzfrequenz auswählt ganz einfach über den USART eines Microcontrollers



Dann müsste ich das Signal nur vorher invertieren, oder das mit nem Transistor machen.

In den Schaltungen die ich kenne wird das mit einem einfachen Treiber gemacht.
Auf die Midi Leitung wird über einen 220Ohm Widerstand +5V gegeben. Die andere Leitung wird ebenfalls über einen 220Ohm Widerstand an den Ausgang des Treibers gegeben.
Eine einfache Beschreibung ( + Schaltplan ) findest Du bei wikipedia mit dem Suchbegriff Midi.
Du solltest aber darauf achten, das ein MiDi Signal als Stromschleife ausgeführt wird. In den MiDi Eingang kommt üblicherweise ein Optokoppler, der dann auch gleich die galvanische Trennung übernimmt.
Oft wird dazu der CNY17 III empfohlen, das hat aber bei mir nie richtig funktioniert. Ich hab dann der PC900 von Sharp genommen, den man aber nicht mehr so einfach beschaffen kann.

Aber wie bekomme ich dei ganzen Start/Stop parity sosntwas bits weg ?
Oder wie könnte man sonst so ein SIgnal erzeugen ??
Soweit ich weiß arbeitet MiDi doch mit Start und Stoppbits, es wäre also Unklug die wegzulassen.

Anstatt der Dreh- Potis könntest Du auch Drehencoder benutzen und somit A/D Wandler sparen. Dann kommst Du eventuell mit den 8 internen A/D Wandlern ( ATMEL AVR ATMEGA Reihe ) aus.

Für so eine Sound- Beat Maschine brauchst Du dann aber schon einen ziemlich potenten Controller.
Für das eigentliche MiDi Protokoll ist nicht viel Rechenpower notwendig. Die Berechnung der Töne wird da mehr Rechenzeit in Anspruch nehmen.

malthy
20.01.2009, 13:46
Moin!

Ich hab den Thread nur überflogen, aber es gibt schon einige Selbstbauprojekte von Midi-Controllern. Ich habe mal einen von Thorsten Klose (in der "Szene" durchaus bekannt) nachgebaut, hier seine Seite: http://www.ucapps.de/ Dort kannst Du Dir auch einige schaltungstechnische Details ansehen, wie man einen µC-UART an den Midi-Standard adaptiert.

Gruß,
Malte

johns
20.01.2009, 16:04
hallo,

in meinem alten billigst-controller sind die potis über analoge multiplexer an die begrenzte anzahl an adcports des verwendeten 8051-abkömmlings angebunden.

aber auch ich würde encoder (und/oder motorfader) empfehlen, unteranderem da sich so der eingestellte wert auch durch externe midi CC messages verändern (synchronisieren) lässt.

um das midisignal in einen pc zu bekommen kann man die baudrate einfach auf die nächsthöhere 'pc-taugliche' baudrate konvertieren und das ganze per rs232 oder usb (auch mittles passendem rs232-usb adapter) anschliessen. um die daten dann dem betriebssystem als midi daten zur verfügung zu stellen kann man sich einem treiber für kommerzielle midi-rs232 (ev. midi-usb) adapter bedienen, afair zb von roland. das ganze wurde bereits erfolgreich in die praxis umgesetzt, nur leider habe ich die url dazu nicht mehr.

obwohl du ja eigendlich keinen midicontroller im klassischen sinn bauen willst, sondern eher einen "halbautomatischen echtzeit midi sequenzer", sei hier dennnoch die imho sehr preiswerte B-Control reihe von behringer erwähnt: http://www.behringer.com/EN/Products/Recording/Controllers/

allerdings könntest du dein vorhaben stark vereinfachen (besonders die mechanische komponente - gehäuse) indem du einen kommerziell erhältlichen controller als eingabegerät verwendest, dessen midi nachrichten du mit deiner eigenen schaltung auswertest und die aus input nachrichten und "halbautomatischer echtzeit midi sequenzer"-logik resultierenden ouput mididaten and die entsprechenden midi-klangerzeuger weitergibt.


lg

goara
21.01.2009, 23:51
Danke erst mal für die Antworten.
@wkrug habe mal bei wiki den plan angeschaut, im prinzip brauche ich erst mal nur den out (in und thru vielleicht später wobei thru eigentlich sinnlos ist ?? )
Wozu brauche ich denn den 4049 kann ich das nicht einfach so machen:
http://dyyyh.de/robo2/midi/midi_out.png
??
Wegen der Rechenpower wollte ich das auf 2 chips verteilen, einen der in echtzeit die Daten sendet, und einer der den Rest erledigt. (mit uart oder i2c verbunden, was eigent sich dafür besser? )
@malthy : danke die Seite ist echt fein, werde da mal ein wenig rumlesen, wo hast du da Schaltüläne gefunden? bin glaub ein Blindfisch ;)
@johns:
Motorfader und Encoder mit statusanzeige wären natürlich fein, das überstiegt aber gerade mein Budget, später viellecht ;)
Wegen der Idee mit dem rs232 hatte ich auch schon überlegt, aber will doch lieber ein "echtes" Midi SIgnal erzeugen, dann ist das auch mit meinen anderen Geräten kompatibel.

wkrug
22.01.2009, 08:49
Wegen der Rechenpower wollte ich das auf 2 chips verteilen, einen der in echtzeit die Daten sendet, und einer der den Rest erledigt. (mit uart oder i2c verbunden, was eigent sich dafür besser? )
Wenn der Controller genügend Ausgangsstrom zur Verfügung stellt kann man das natürlich so wie in Deinem Schaltplan machen.
Da man aber für die THRU Buchse ohnehin einen Treiber mit Schmitt Trigger braucht spart man auch nicht wirklich was.
Als Verbindung zwischen den Controllern würde ich SPI verwenden.
Das geht schnell und ist von Atmel auch gut Dokumentiert.
Bei der USART Lösung bräuchtest Du einen Controller der 2 USART's hat, weil Du die MiDi ja vermulich auch über USART laufen lassen willst.
Ich schieb bei den ATMEL AVR Controllern so viele Aufgaben wie möglich und sinnvoll in die Hardware, weil dadurch nur wenig Rechenpower verloren geht.



...in und thru vielleicht später wobei thru eigentlich sinnlos ist ??
Das würd ich so nicht stehen lassen.
Für Deinen speziellen Anwendungsfall könnte das eventuell zutreffen.
Auf dem THRU liegt ein unverzögertes Midi in Signal an.
Beispiel:
Wenn man mehrere MiDi fähige Geräte hat, kann das Erste die MiDi Kanäle 1...8 verarbeiten ( Synthesizer ?! ). Dann geht man aus der THRU Buchse raus in das nächste MiDi fähige Gerät, das dann die Kanäle 9...10 verarbeitet ( Drum Computer ?! ) usw. . So kriegen alle Geräte in der MiDi Kette ihre Befehle zur gleichen Zeit.
Würde man so was über MiDi in / MiDi out lösen, könnte es bei mehreren Geräten hintereinander zu Laufzeitverzögerungen kommen, weil das MiDi in Signal ja erst vom Gerätecontroller verarbeitet werden muß, bevor es wieder auf der MiDi Out Buchse gesendet wird.
Ausserdem kommen aus dem MiDi Out ja auch die Daten raus, die das Gerät selber produziert.

Nur zur Info!:
Will man die Daten von mehreren Geräten wieder zurück auf einen Master bringen, kann man das über einen sogenannten MiDi Merger machen.
Das ist dann wieder ein Kästchen mit einem Controller und mehreren MiDi in Buchsen drin.

goara
06.03.2009, 18:37
so.. bin mal wieder dazugekommen ein wenig weiterzumachen... der Plan ist jetzt folgender.. 8 x Atmega16 mit je Display, 2 Joysticks, 4 Pots und 4 Tastern
das ganze wird verbunden über SPI....
aussehen tut es so:
http://www.dyyyh.de/robo2/midi/midi_s1.png
die einzelnen Platinen lesen die werte ein berechnen das ganze Zeugs und senden es dann an eine weitere Platine, die das Midisignal erzeugt.....
Wird jetzt ein wenig groß das ganze, da die 8 Displays nebeneinandr schon 70cm breit sind, aber das macht ja nichts, neben den plattenspielern is noch Platz ;)