Moin,
mal ein (langes) Statusupdate von mir. Ich hatte gerade Urlaub und habe in den letzten zwei Wochen intensiv an der Firmware des Controllers weitergearbeit, nachdem die fertige Hardware jetzt ein halbes Jahr im Regal verstaubte.
Bis auf die Routinen zum bearbeiten, speichern und kopieren/verschieben von Presets ist alles fertig. Der Controller kann jetzt folgendes:
- Speichern und abrufen von 800 Presets in 50 Bänken zu 16 Presets. Die Grenze wir im Prinzip nur von der Größe des EEPROMs gesetzt, ich habe ein AT24C512 mit 64 kB verbaut, da ist noch etwas Luft nach oben. Ein Preset ist im Moment 29 Byte groß.
- Im Controller können bis zu acht MIDI-Geräte angelegt werden. Jedem gerät kann ein achtstelliger Name sowie ein MIDI-Kanal zugeordnet werden, außerdem kann jedes Gerät dezidiert aktiviert oder deaktiviert werden.
- Im Direktmodus arbeitet der Controller wie ein Pedalboard, die 16 Presettaster arbeiten als an/aus für einzelne Effekte oder Einstellungen, die Taster senden CC# ("binär", entweder 0 oder 127). Ob ich das mit Zwischenwerten noch mal konfigurierbar mache, muss ich überlegen. Eigentlich ist das aber unnötig. Jeder Taster kann einem hinterlegten Gerät zugeordnet werden, außerdem können CC# und Betriebsart eingestellt werden. Die drei Betriebsarten eines Tasters sind Normal (an/aus), Taster und "Senden mit Preset" (wie Normal, aber der im Preset gespeicherte Zustand wird beim Presetabruf mit raus gesendet). Insgesamt stellt der Controller 32 Taster zur Verfügung, die Taster 17-32 sind "virtuell" und über die 16 physischen Taster per "Shiftfunktion" erreichbar.
- Auch im Direktmodus ist der Presetwechsel möglich, hier können die Presets per "UP"/"DOWN"-Taster durchgesteppt werden, auch bankübergreifend, also auf Preset 16 in Bank 1 folgt bei "UP" Preset 1 in Bank 2. Andere Controller (z.B. die CAE Controller) nutzen hier getrennte Preset-Speicherbereiche, das fand ich aber unnötig.
- Redundante Midinachrichten werden vom Controller gefiltert, d.h. beim Abruf eines Presets wird nur das gesendet, was sich zum vorher aktiven Preset unterscheidet. Auch der erneute Abruf eines Presets z.B. bei versehentlicher doppelter Betätigung eines Tasters wird herausgefiltert. Über langes Drücken eines Tasters kann der Filter übergangen werden, dann sendet der Controller das komplette Preset (ggf. erneut).
- Das LCD zeigt im Presetmodus die aktuelle Bank, die Presetnummer und den Namen des Presets an. Im Direktmodus zeigt es bei Tasterbetätigung den Namen und den Zustand des Tasters an. Letzteres ist eigentlich überflüssig, denn jeder Taster hat ja eine LED.
Weggelassen habe ich ein MIDI-IN und die Anschlussmöglichkeit von Expression Pedalen. Sollte ich das doch mal brauchen, muss ich das halt nachrüsten. Was noch fehlt sind wie gesagt die Presetroutinen, außerdem wäre es vermutlich nicht unklug, Konfiguration und Presets irgendwie extern sichern zu können. Das muss also auch noch.
Der Mikrocontroller ist in der Schaltung programmierbar. Auf der Platine sitzt eine ISP-Wannenstecker, außerdem habe ich einen Bootloader auf dem µC installiert, so dass er per USB bzw. MIDI programmiert werden kann. Praktisch ist das im Moment so, dass ich eine kleine USB-to-UART-Bridge habe, die am Board angeschlossen ist und deren Kabel aus dem Gehäuse raushängen. Ob und wie ich die Firmware per MIDI-Schnittstelle updaten kann, muss ich noch mal rausfinden. Gegebenenfalls baue ich entweder eine USB-Flanschbuchse ein und belasse die UART-Bridge im Controller, oder ich löte einfach mal einen MIDI-Stecker an die Bridge.
Ich habe den Controller bisher nur zu Hause am Audio/MIDI-Interface getestet. Ich habe mir den Output mit der Software MIDI-OX angesehen, bisher passt das alles. Der Controller sendet ja theoretisch bis zu 40 Nachrichten pro Preset, im Moment sind es maximal 17, da ich die virtuellen Taster deaktiviert und nur ein Gerät eingerichtet habe. Die Nachrichten erscheinen bei Tastendruck im Prinzip sofort auf dem Bildschirm, die Performance scheint also sehr gut zu sein. Die meisten Rackgeräte reagieren vermutlich deutlich langsamer. Ob der Controller ggf. sogar zu schnell ist, muss ich noch rausfinden.
Heute Abend nehme ich den Controller mal mit zur Probe und steuere mein G-Sharp damit. Habe ich letzte woche schon mal gemacht, aber da war die Leistung der Firmware noch deutlich reduziert und ich hatte nur ein paar MIDI-Befehle hart gecoded eingebaut. Heute will ich mal schauen, ob der Controller, so wie er jetzt ist, den ganzen Abend stabil und ohne Abstürze durchläuft.
Im nächsten Schritt baue ich dann noch das Rackgegenstück. Hier habe ich mich gegen den kompletten Neubau eines Rackloopers/Switchers entschieden, da ich ja einen voll funktionierenden Relaislooper habe. Stattdessen werde ich eine Steuereinheit bauen, die dort anflanscht, wo das vorhandene Steuerpedal des Loppers angeschlossen wird.
Die Steuereinheit wird wohl auch sehr viel einfacher und "dümmer" als der Controller werden. Kein Display, keine Taster, keine LEDnn womöglich nicht mal Presets. Die Rackeinheit wird vermutlich ausschließlich per CC# gesteuert werden. In meinem Ansatz ist also der Bodencontroller das Gehirn des Setups, nicht der Racklooper, wie das in vielen anderen Projekten ist. Der vorhandene Relaislooper hat 12 Loops und 7 Schaltausgänge, passend zum Controller werde ich die Rackeinheit auf 32 Schaltausgänge auslegen.
Ich hoffe, ich bekomme die Controllerfirmware nächste Woche soweit fertig, dann versuche ich zeitnah, auch die Rackeinheit zu bauen. Die Bauteile dafür habe ich alle schon zu Hause, lediglich ein Gehäuse muss ich noch kaufen - und die Platinen bauen / bestücken.
Ich muss mal sehen, wie es mit der Veröffentlichung des C-Quelltextes hier steht. Es ist fast alles von mir, die Entprellroutine basiert auf obigem Link, sonst habe ich, glaube ich, keinen fremden Quelltext benutzt; muss ich noch mal prüfen. Wer sich direkt bei mir meldet, kann aber - wenn ich komplett fertig bin - den Quelltext gerne von mir bekommen. Er ist sicherlich nicht der eleganteste, schönste, kompakteste, speicherschonenste oder perfomanteste Code, aber er funktioniert. Die kompilierte Firmware ist derzeit 11 kB (!!!) groß, es braucht also schon einen der größeren ATMEGA dafür.
Mein persönliches Fazit ist auf alle Fälle schon mal, das sich das Projekt absolut gelohnt hat. Ich habe quasi bei Null angefangen und sehr viel dabei gelernt, und wenn man die investierte Zeit nicht mitrechnet (was man ja eh nicht machen darf) habe ich vermutlich einige hundert Euro im Vergleich zu komerziell erhältlichen Controllern gespart, vor denen sich meiner nicht zu verstecken braucht. Außerdem habe ich - wie beim Ampbau auch - einiges an Respekt vor den im Handel erhältlichen Produkten verloren. Die kochen auch nur mit Wasser, und einige Preise und auch einige Defizite sind, wenn man's erst mal selbst gemacht hat, kaum mehr verständlich.
Gruß, Nils