Technik > Tech-Talk Design & Konzepte
Entwicklung eines Midi-Switching-Systems auf Arduino-Basis
Markus H.:
Hallo!
Nachdem ich Nils H. angeschrieben hatte, weil ich extrem angetan von seinem Midi Controller Projekt bin und eine kleine Gruppe derzeit ebenfalls an einem ähnlichen projekt arbeitet, meinte Nils, es wäre doch nett, wenn ich darauf hier kurz verlinken würde, vielleicht interessiert es ja einige. Dem will ich jetzt hiermit nachkommen:
Wir bauen derzeit auf Arduino Basis einen Midi Controller. Wobei ich gleich sagen muss: Das Zugpferd, was die technische Programmierung angeht bin nicht ich, sondern der OSon aus dem axefx.de Forum.
Anyhow: Wer vielleicht genauso ein "Greenhorn" in Sachen Elektrotechnik und Software-Programmierung ist, wie ich, aber trotzdem vielleicht Interesse an einer solchen Eigenkonstruktion hätte, der kann ja gerne mal bei "uns" vorbeischauen, denn ich denke, das Projekt ist auch für absolute Einsteiger zumindest Nachbaubar ...
Hier zu den Infos:
Diskussion im axefx.de Forum: http://www.axefx.de/showthread.php/1040-DYI-MIDI-Fu%C3%9Fleiste-selber-bauen-!
Software auf github.com: https://github.com/oson/midi_board_ONE
(Nochmals größten Dank an den "Konstrukteur" OSon!!!
Video-Dokumentation auf youtube: http://www.youtube.com/watch?v=dIs-Xt1zd-U&list=PLT2sYJRe7JGzRZjYknhBgOrFEbOZDuBH5
Liebe Grüße
Markus
Nils H.:
Moin,
es gibt neues zu vermelden. Das Floorpedal verrichtet jetzt ja schon 'ne Weile seinen Dienst im Proberaum (Steuerung eines G-Major 2), über den Weihnachtsurlaub hatte ich jetzt mal Zeit, mich dem Racklooper zu widmen. Die Hardware ist heute (fast - siehe unten) fertig geworden, jetzt muss ich "nur noch" die Firmware schreiben.
Das sollte aber recht schnell gehen, denn ich werde die Software sehr "dumm" halten - Empfang auf MIDI-Kanal 1, 18 CCs für 18 Relais - fertig. Presets oder anderen Firlefanz brauche ich nicht, und ich will bis Sonntag fertig sein ;D .
Zur Hardware: Ich habe meinen alten TB-Relaislooper geschlachtet und neue Platinen eingebaut. Daher bleibt es bei der alten Ausstattung - 3 Chains zu je 4 Loops, dazu 6 potentialfreie Schaltkontakte. Zu jedem Relais gibt es eine Status-LED, die sind hartverdrahtet parallel zu den Relaisspulen, also nicht programmierbar. Vorne gibt es ein Pedal In mit Phantompower, hinten MIDI-Through und -Out (im Moment nicht bestückt, weil auch nix gesendet wird). Die I/O-Platine ist so vorbereichtet, dass bis zu 32 Schaltsignale verarbeitet werden können, genutzt werden aber wie gesagt jetzt erst mal nur 18.
Was noch fehlt: Einschaltverzögerung für die Relais, Grund: Habe ich total vergessen :devil: . Ich hatte das früher schon mal angesprochen, die Portexpander schalten beim Hochfahren einmal die Masse durch und alle Relais ziehen an. Ich habe auf dem AVR erst mal nur die Initialisierung des I²C-Busses programmiert; das Initialisieren des Controllers und des I²C-Busses dauert dann doch 2(!) Sekunden, d.h. für 2 Sekunden ziehen alle Relais an. Das ist natürlich doof.
Frage: Warum ist das so, dass das so lange dauert? Das Programm macht wirklich nichts außer den Bus zu initialisieren und in alle Expander eine 0 zu schreiben. Braucht der AVR wirklich so lange? (unabhängig davon braucht's natürlich trotzdem eine Einschaltverzögerung).
Anbei mal zwei Bilder, wie das Ding gerade neben mir steht, wie man sieht, hat das Chassis schon arg gelitten. Die LED-Leitungen muss ich noch strapsen und verlegen.
Gruß, Nils
Dirk:
Hi,
wann wird denn der I2C initialisiert und kannst Du nicht auf die Portexpander verzichten ? 18 Ports gehen auf alle Fälle über den Atmega, oder müssen es am Ende wirklich 32 Ports sein ?
Ich habe mal eben bei mir getestet mit einem Programm, dass per I2C auf einen 24C... zugreift und eines ohne I2C Bus und in beiden Fällen ist der Atmega gleich ansprechbar ohne irgendwelchen Müll auf dem I2C zu produzieren. Zumindest konnte ich nichts feststellen.
Programmfehler ? Taktrate erhöhen oder Bus-Zugriff anders umsetzen ?
Gruß, Dirk
Nils H.:
Moin Dirk,
18 Digitale Pins wird mit einem ATMEGA im DIL-Gehäuse aber eng... theoretisch hat er 23. Praktisch bleiben weniger über: zwei weg für serielle Schnittstelle, zwei für externen Oszillator, einen für Reset, dann ist man bei 18. Und dann ist keiner mehr frei für Status-LED oder so was. Finde ich doof.
Darüber hinaus war die Zielvorgabe, als ich die Platinen gebaut habe, mal: 16 Loops und 8 Schalter, da reicht ein ATMEGA eh nicht mehr aus. Ich hab das dann etwas runterskaliert, weil ich mein vorhandenes Material weiter nutzen wollte.
Jedenfalls: Wenn, dann kann ich auch eh gleich vier Expander verbauen, da kommt's dann eh nicht drauf an ;D . Und: Weil's geht ;) .
Das Programm führt im Moment nur die i2c_init()-Routine aus - Zwei Register beschreiben und alle PFC low setzen. Ich vermute, dass die PCF8574 so lange brauchen bis sie das erste Mal auf ein Telegramm vom AVR reagieren - lese gerade noch mal das Datenblatt. Der Bus läuft mit dem Maximum (vorgegeben durch die PCF) von 100 kHz.
Die Initialisierung kommt im Prinzip ausm Atmel-Datenblatt, sollte also korrekt sein. Ich hab wie gesagt die PCF8574 im Verdacht. Das alles ändert aber eh nix dran, dass erst mal alle Relais kurz anziehen, also Verzögerung muss eh sein.
Gruß, Nils
Dirk:
Hi,
zum PCF8574 kann ich nichts weiter sagen. Ich habe auch leider keinen hier um mal selbst auszuprobieren. Hatte zwar auch mal an eine Porterweiterung gedacht, aber verworfen und zwischenzeitlich angefangen mir ein "Mainboard" für einen Mega128 zu entwerfen.
Keinen Atmega16 in der Schublade liegen ;-)
Du programmierst in C ?
Stelle doch mal das Programm hier ein.
Gruß, Dirk
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln