Technik > Tech-Talk Design & Konzepte
Entwicklung eines Midi-Switching-Systems auf Arduino-Basis
Nils H.:
--- Zitat von: SvR am 12.09.2011 18:22 ---Salü,
Wenn du es bearbeiten kannst, würde ich für die Anwendung Stahlblech klar bevorzugen. Alu ist einfach so lapprig, grad bei der relativ großen Fläche und den Fusstastern.
mfg sven
--- Ende Zitat ---
Moin,
2mm Alu sollte eigentlich genauso stabil sein. Der aktuelle Controller ist eine Holzkiste mit einem 1,5mm Alu-Deckel oben drauf, der ist bei 400x300 ausreichend stabil. Was mich aber stört ist der hohe Preis.
Die Bearbeitung von Stahl sollte gehen, wobei das auch eine Frage der Materialstärke ist. Aus dem Bauch heraus würde ich dazu neigen, zu 1mm zu greifen und notfalls in der Mitte eine Stützwange ins Chassis einzubauen. Ich habe ein - zugegeben, viel kleineres - 1441er Gehäuse für meinen Ampswitcher benutzt, das fühlt sich mit 1,2mm Materialstärke an wie ein Panzer. 1,5mm sollte aber auf jeden Fall reichen, worst case ist, dass ich mir meine Stufenbohrer ruiniere, was aber auch kein Drama ist, weil's ein 10 Euro Satz aus der bucht ist (jaja... wer billig kauft, kauft zweimal... schon klar). Problematischer wird da der rechteckige Ausschnitt für das / die Displays. Sollte mit ein paar guten neuen Blättern für die Stichsäge auber auch gehen.
--- Zitat von: Firebird am 12.09.2011 20:05 ---Wenn du dabei auf Probleme stößt kann ich dir gerne helfen.
--- Ende Zitat ---
Danke fürs Angebot. Wenn ich in Probleme laufe, sage ich Bescheid :bier: . Das ist ein paar Jahre her, dass ich in C/C++ programmiert habe, und halt auch nix großes. Ich sehe solche Projekte ja auch immer als Chance, was dazu zu lernen oder vergessenes wieder aufzufrischen. Mal schauen, wie' läuft :) .
Gruß, Nils
Nils H.:
Moin,
ich hol' das hier mal aus der Versenkung, damit von dem Thema nicht nur Geschwätz überbleibt ;D . Nachdem ich das Projekt vor gut eineinhalb Jahren wegen Verdachts auf umfassende Ahnungslosigkeit und der Gefahr mich zu übernehmen erst mal eingestampft hatte, habe ich diese Baustelle Ende letzten Jahres wieder aufgenommen. Die Grundidee ist dieselbe geblieben, mit ein paar Änderungen im Detail.
Ich habe viel gelesen und rumrecherchiert und mich letztlich gegen die Arduino-Lösung entschieden. Stattdessen habe ich die µC-Schaltung selbst aufgebaut (in der Tat nur Hühnerfutter, wie Sven immer sagt) und mich auch gegen die Arduino-Softwareumgebung entschieden. Ich programmiere den/die µC jetzt also in Standard-avr-C mithilfe der avr-gcc-Toolchain und Eclipse mit AVR-Plugin unter Linux. Bisher läuft's ganz gut, und vorletzte Woche habe ich einen kleinen Meilenstein erreicht, auf den ich auch ein klein wenig stolz bin, weil ich im Herbst letzten Jahres von dem ganzen Kram noch überhaupt keine Ahnung von dem Kram hatte und bisher alles ganz gut funktioniert.
Ich habe mich dazu entschieden, als erstes die (aus meiner Sicht) anspruchsvollere Baustelle in Angriff zu nehmen, nämlich die des passenden Midi-Fußschalters. In meinem Pflichtenheft für die Anlage sehe ich wesentlich mehr Verantwortlichkeit beim Controller als beim Looper/Switcher selbst und daher ein weit größeres Lernpotential. Die Hard- und Software für den Looper/Switcher sollte, wenn der Controller fertig ist, quasi als "Nebenprodukt" mit abfallen.
Der Controller ist jetzt fertig, zumindest was die Hardware und die Schnittstellen zwischen Hard- und Software angeht. Der Controller ist in einem Hammond 1441-32 Stahlblechgehäuse untergebracht. Das Gehäuse ist 432 mm breit, 305 mm tief und 51 mm hoch und beherbergt 20 Taster mit LED sowie ein großes 2x16 Zeichen LC-Display.
Der Microcontroller ist ein ATMEGA 328P und kann in der Schaltung per USB programmiert werden, Das Display, die Taster und die LEDs werden über insgesamt sechs I²C-Portexpander angesteuert. Weil es sich ja um eine Art Prototypen handelt, habe ich, wo es geht, auf feste Verbindungen verzichtet und alle Peripherie steck- oder schraubbar gemacht.
Die obere Platine beherbergt die Schaltung zur Ansteuerung des LCDs. Auf der mittleren Platine ist das 5V-Netzteil, der µC, das externe EEPROM und die USB- und MIDI-Schnittstellen (wobei ich bisher nur MIDI-Out aus dem Gehäuse führe, USB und MIDI-In nicht). Die untere Platine ist die I/O-Platine mit fünf Portexpandern und insgesamt 40 I/Os. Das geht auf PCB sicher alles platzsparender, andererseits ist hier ja Platz genug. Die Platinen sind Streifenrasterplatinen. Ich habe diese gegenüber Lochraster bevorzugt, weil sie für komplexere Sachen einfach übersichtlicher sind, da man bequem längere und vor allem mehrere Busleitungen über die Platine führen kann, der Preis dafür ist dann halt, dass man mehr Platz braucht.
Die Schnittstellen zwischen Software und Hardware (in erster Linie ist das ja der I²C-Bus) sind fertig, die MIDI-Out-Kommunikation ebenfalls, ich muss jetzt "nur" noch das Benutzerinterface schreiben, inklusive Presetverwaltung etc.
Für das Pflichtenheft des Controllers habe ich mich an den gängigen Top-Produkten, die auf dem Markt erhältlich sind, orientiert. In erster Linie waren das das Ground Control Pro von VoodooLab und die RS-T Controller von Custom Audio Electronics. Diese Controller vereinigen die Möglichkeiten eines klassischen Pedalboards mit den Komfortfunktionen eines programmierbaren Systems.
Der Controller wird in zwei Modi betrieben werden können. Im Preset Modus können pro Bank 16 Presets angewählt werden. Wieviele Bänke der Controller haben wird muss ich noch mal nachrechnen, ich habe den Speicherbedarf bisher nur ganz grob überflogen. Ich habe allerdings ein 64kB-EEPROM vorgesehen, da sollte einiges gehen. Pro Preset sollen bis zu acht Program Change Befehle gesendet werden können, außerdem wahrscheinlich auch der Status der 16 Taster (als CC). Welche Latenzen das erzeugt, muss ich noch mal nachrechnen und ggf. einfach ausprobieren. Ältere Looper wie das GCX von VoodooLab kommen ja komplett ohne Presets aus und hören ausschließlich auf CCs, also kann es so schlimm nicht sein.
Über den Taster "DIRECT" wird der Controller in den Stompbox-Modus geschaltet ("Direct Access"), in diesem Fall senden die Taster ausschließlich CC-Befehle, um per Midi einzelne Loops am Looper oder Effektblöcke am Multieffekt oder ähnliches zu schalten. Das ist der Modus, den ich persönlich am meisten benötige, da ich nur ab und zu Presets brauche, aber ganz oft spontan mal Effekte ein- oder ausschalte und so weiter. Über die Taster Up und Down kann innerhalb des Direktmodus' auf ein anderes "Basispreset" umgeschaltet werden. Beim CAE-Controller ist das ein getrennter Speicherbereich mit von den übrigen Presets unabhängigen Patches, ob ich das auch so mache oder einfach die "normalen" Presets damit "durchsteppe" habe ich noch nicht entschieden.
Was sonst an Komfortfunktionen untergebracht wird hängt wohl nur von meiner Kreativität und meiner Laune, die Funktion zu programmieren ab. Das steht mir jetzt bevor. Wann die Software fertig wird, vermag ich nicht zu sagen. Da ich immer nur kleine Zeitabschnitte dafür habe, werden es aber eher Monate als Wochen sein. Vielleicht im Sommer oder so. Parallel werde ich irgendwann anfangen den passenden Looper zu bauen.
Wenn die Software fertig ist, werde ich den Quelltext vermutlich auch veröffentlichen. Nicht weil er besonders gut ist (was er vermutlich nicht sein wird), sondern weil alles Know How dafür eh aus dem Zwischennetz kommt. Wenn alle alles für sich behielten, wäre ich gar nicht erst so weit gekommen.
Anbei noch zwei Bilder.
Gruß, Nils
rednerweb:
Hi Nils,
kannst du mir sagen warum du dich gegen Arduino entschieden hast, der bietet doch eigentlich alles was du brauchst inkl. MIDI Befehlssatz.
Gruß
Gunther
Nils H.:
--- Zitat von: guanre am 3.02.2013 13:03 ---Hi Nils,
kannst du mir sagen warum du dich gegen Arduino entschieden hast, der bietet doch eigentlich alles was du brauchst inkl. MIDI Befehlssatz.
Gruß
Gunther
--- Ende Zitat ---
Der Hauptgedanke war, dass ich so viel wie möglich selbst machen wollte. Der Grund für dieses Projekt war nur zu einem Teil, dass ich sowas "haben" wollte. Es geht mir zu einem ganz großen Teil auch immer darum, mein Wissen zu erweitern, solche Projekte sind für immer immer "nur" der Aufhänger. Ich wollte mich schon länger mit Mikrocontrollern beschäftigen, aber ich setze mich nicht hin und lese tonnenweise Literatur (naja...), um eine LED zum blinken zu bekommen.
Die Arduino-Umgebung mit ihren vielen, fertigen Bibliotheken sind gut, um schnell Erfolge zu erzielen und zum fertigen Produkt zu kommen; der Lerneffekt ist dabei aber möglicherweise bescheiden. Ich will nicht behaupten, ich könnte das selbst besser, ganz im Gegenteil, und es ist auch unökonomisch, das Rad selbst immer wieder neu zu erfinden; mir geht es aber, wie gesagt, auch um das Erwerben von Wissen und das Erweitern von Fähigkeiten. Die Arduino-Umgebung "verbirgt" mir zu viel vor dem Benutzer.
Ein anderer Punkt war, dass ich beim rumexperimentieren gemerkt habe, dass die Arduino-Umgebung seeeehr großzügig mit Speicherplatz umgeht - ein einfaches Blink-Hallo-Welt-Beispiel belegt mal eben eineinhalb Kilobytes im Flash. Ich habe mit dem 328P zwar Speicher genug (32 kB), aber trotzdem, muss ja nicht sein.
Gruß, Nils
kugelblitz:
Hallo Nils,
Hut ab, ich habs bis jetzt nur auf Arduino Basis gemacht und ohne den Luxus von LCD bzw dedizierten Leds bzw Programmierbarkeit durch Taster.
Für mich war es aber am schwierigsten nicht Code oder eine Schaltung zu finden sondern ein konsistentes Bedienkonzept (in meinem Fall für 5 Analoge Potis, 15 Taster und einen Schalter, PC Mode und CC Mode). Vielleicht können Dir meine Varianten ja etwas helfen.
Programmwahl: Ich hab einen eigenen PC Modus, da werden die Taster zu einer numerischen Tastatur, die Bank wird nachdem ich nur den gmaj2 damit steuer vorgewählt und wenn nicht geändert (oder max oder min limits überschritten) bleibt sie wie sie ist. Der patch wird wie eine Telefonnummer eingegeben.
Annahme patch ist am Beginn 0 und patch soll von 0-99 gehen (für die Eingabe von 0 - 127 oder 1 - 128 müsste man das if und den Modulo etwas abwandeln):
patch = patch*10+newInput;
if (patch>100)
{
patch=patch%100;
}
Weiters könnte man wenn man den aktuellen Patch speichert auch Modi vorsehen in denen man man 10 oder 1en Patch weiterschalten kann und bei erreichen der Höchstzahl eine Bank weiterschaltet...
Wenn dann send gedrückt wird, wird Bank und Patch versandt und als actualPatch gespeichert bzw patch auf 0 zurückgesetzt.
Du könntest vorallem nachdem Du ein LCD hast, ja auch die Programmierung über so eine Tastatur lösen.
BTW zum Taster auslesen. Ich machs soweit ich mich erinnere in etwa so:
* für jeden Pin/Taster gibt es einen state speicher (array mit Anzahl der Taster speicherplätzen
* zusätzlich gibt es zwei arrays changeRise changeFall (hier landen pin/taster nummern die sich geändert haben)
* ich gehe per for schleife über alle Taster (zuvor alle Counter auf 0)
* sollte sich ein state ändern , wird geprüft ob es rising oder falling edge ist und das der jeweilige Counter RiseCount bzw FallCount um 1 erhöht
* der geänderte pin im passenden change* array an der passenden Stelle (*Count) gespeichert
* und letztlich noch im state Array geupdated
Weiters liesse sich zB in holdState array zusätzlich die Anzahl der loops speichern in denen keine Änderung auftritt.
Nach der For schleife brauche ich nur noch durch die beiden change* arrays zu gehen (Anzahl der aktuellen änderungen in beiden ist ja auch gespeichert RiseCount und FallCount) und diese abarbeiten bzw mit dem holdArray bewerten.
Damit könntest Du bei kurzem Betätigen eine andere Aktion als bei langem Betätigen auslösen...
Auf jeden Fall noch viel Erfolg mit Deinem Projekt, von so einer Universallösung (bei mir aber sicher auf Arduino Basis, viellleicht mir mehreren MIDI Ausgängen und ein paar programmierbaren looper/switcher) träum ich auch schon länger, aber bis jetzt fehlt einfach die Zeit. BTW für Arduino muss man ja nicht die Arduino IDE verwenden ;)
Auf jedenfall landet der Thread jetzt einmal in den Lesezeichen ;)
Gruß,
Sepp
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln