Technik > Tech-Talk Design & Konzepte

Entwicklung eines Midi-Switching-Systems auf Arduino-Basis

<< < (2/30) > >>

kugelblitz:
Hallo Nils,

genau auf Arduino Basis hab ich eine light Variante in meinen Attenuator verbaut. Light, denn er kann nur senden und hat nur ein Led zur Statusanzeige.

Arduino NG rev. C mit 6 analogen Inputs und 14 digitalen Pins (IO)

digital IO:
7 x ON-OFF-ON Taster + 1 x ON-OFF-ON Taster/Schalter Kombi = 15 Taster und 1 Schalter, benötigen 8 digitale Pins (mit je 10k gegen GND verbunden) als Input und 2 als Output (Stromversorgung abwechselnd für obere und untere Taster/Schalterstellung)
1 x digitaler Pin für LED
1 x digitaler Pin für Send (TX) (5V -> 220k -> Din-Buchse (pin 2 glaub ich) , GND -> Din-Buchse (pin 3) , TX -> Din-Buchse (pin 4 glaub ich)

analog IO:
5 Potis (1M B) den Schleifer an analogen Pins (Stromversorgung über 5V Arduinoboardnetz)

Dazu noch ein, leider bei mir fast unterdimensioniertes, Netzteilmodul vom C, ein Resettaster nach außen geführt (NO, ATmega Pin 1 -> GND soweit ich mich erinnere), ein USB Kabel und einen Umschalter zwischen USB PS bzw externem PS.

Zur Funktion:
Er dient mir zur Steuerung eines G-Major 2 (nur begrenzt MIDI steuerbar) und hat 3 Modi:

Modus 1: Normalbetrieb beim Einschalten.
14 CC Nachrichten (0 oder 127 im Wechsel) auf 14 Tastern und 5 CC Nachrichten (0-127) auf Tastern bei einer Änderung >5. Led leuchtet alle ~5 Sekunden kurz auf.

Modus 2: Feinbetrieb.
wird durch betätigen des 15. Tasters aktiviert und erneutes Betätigen aktiviert, gleich wie Normalbetrieb nur werden Änderungen der Potistellung sofort weitergegeben und das LED leuchtet genau invers zu Modus 1.

Modus 3: Programmwechselbetrieb.
PC Nachrichten und CC für Bankwechsel.
10 Taster dienen als Eingabefeld für die Zahlen 0-9 (newPatchNumber=(newPatchNumber*10+inputNumber)%1000 bzw bei >128 %100). 2 Wechseln User und Factorybank, 2 dienen dem Wechsel zum nächsten oder vorherigen Patch. Aktiviert wird der Modus durch betätigen des Schalters 16, gesendet wird die PC Nachricht entweder bei Bankwechsel oder Release des Schalters 16.

Soweit funktioniert eigentlich alles, aber ein paar Mankos hat mein Controller. Keine einheitlichen Taster, somit aufwenigerer Code (Reaktion nicht nur auf Press sondern auch unter Umständen auf Release (PC)), bei Wechsel eines Patches kennt er nicht die Konfiguration der Schalter im G Major2 somit wird möglicherweise die gewünschte Aktion erst beim 2. Versuch aktiv. Beim Einschalten, oder direkter Interaktion am G Major2, kennt er noch nicht den aktuell aktiven Patch und wechselt so bei +1 /-1 nicht zum erwarteten Patch bzw funktionert ein Taster wieder erst beim 2. Mal wie erwartet. Weiters können sich Potis gegenseitig beeinflussen, vielleicht sollte ich sie noch mit Dioden isolieren.

Ebenso können unerwartete Komplikationen auftreten, zB steuert ein Poti bei mir die Input Lautstärke, ist diese beim Ausschalten auf 0 gedreht und verwendet den G Major2 das nächste Mal ohne Midicontroller sucht man das erste Mal ziemlich lange verzweifelt, bis man den Fehler findet warum kein Ton mehr aus dem Verstärker kommt ;)

Auf der Softwareseite habe ich die Arduino IDE und die Arduino MIDI Lib von sourceforge (so weit ich mich erinnere) verwendet. Funktioniert auch problemlos auf allen gängigen Betriebssystemen. Sollte ich ihn noch einmal neu bauen würde ich auch jedenfall keine gemischten Taster und Schalter verwenden und alle Funktion auch von einfacher Programmierbarkeit abhängig machen.

HTH als Anregung bzw hilft Dir meine Fehler zu vermeiden. BTW es ist zumindest für mich angenehm wenigstens die 4 Modifikatoren zB Reverbmix im G-Maj2 per echten Potis zu steuern, bzw eine Taptempofunktion zu haben oder das Gate direkt zu schalten ohne sich durch das Menü zu kämpfen. Die Plastikknöpfe des G-Maj2 werden ebenso geschont. Jetzt fehlt es nur noch einen Foot Controller parallel zu den vorhandenen Tastern zu verbauen, leider fehlt mir aber die Zeit.

Gruß,
Sepp

SvR:

--- Zitat von: Nils H. am 27.08.2011 00:08 ---Insgesamt werden also 44 I/O-Pins benötigt (20 Outputs und 24 Inputs).

Der ATmega168 und ATmega328 haben nur 14 digitale I/O, von denen zwei für MIDI In/Out abgezogen werden müssen. Allein durch die Anzahl an benötigten Outputs ergeben sich zwei Möglichkeiten:

-    Einsatz eines Boards mit ATmega1280 oder ATmega2560
-    Einsatz zweier / mehrerer Boards mit ATmega168 oder ATmega328

--- Ende Zitat ---
Die 20 Taster könntest du als 5x4-Matrix schalten. Anstatt 20Pins würden diese dann nur noch 9 Pins benötigen. Die Ausgänge für Loops und Schaltaufgaben (beides wahrscheinlich mit Relais) könntest du über I2C-Portexpander machen. Damit würdest du am µC nur noch die Pins für den I2C-Bus benötigen (also 2Pins).
Das wären dann also 11Pins +2Pins Midi-I/O = 13Pins.
mfg sven

Edit: Seh grad: Für den Footcontroler hast du die Taster als Matrix vorgesehen, warum nicht bei der Rackeinheit?

SvR:
Salü,

--- Zitat von: Nils H. am 27.08.2011 00:26 ---Der Microcontroller für den MIDI Foot Controller benötigt für die Direktanwahl von 12 Loops und 8 Schaltausgängen sowie das Schalten von 4 oder 5 Presets / Bank 26 bzw. 27 digitale Inputs sowie ebenso viele digitale Outputs für die zugehörigen LED. Dazu kommt noch je ein Pin für MIDI-Out und die Kommunikation mit dem LC-Display mit serieller Ansteuerung. Damit benötigt der Controller mehr als die 54 digitalen I/O-Pins, die der ATmega1280 oder ATmega2560 zur Verfügung stellen. Das Problem kann auf mehrere Arten umgangen werden, z.B.:

--- Ende Zitat ---
Die LEDs könntest du über Schiebregister und die serielle Schnittstelle des µCs ansteuern (oder wieder Portexpander+I2C). Das LC-Display lässt sich auch im 4Bit-Modus betreiben, um Pins zu sparen.
mfg sven

Edit: Warum sollen es eigentlich fertige Arduino-Boards sein? Wenn ich die Preise so les, hast du bei zwei Boards locker den Preis für ein USB-Programmiergerät+µC+Quarz+Hühnerfutter+Lochrasterplatine erreicht. Das Programmiergerät lässt sich dann später weiter verwenden, sodass für deinen nächstes µC-Projekt nur noch µC+Quarz+Hühnerfutter fällig wird.

Nils H.:
Moin Sven,

danke für die Hinweise!


--- Zitat von: SvR am 27.08.2011 09:57 ---Edit: Seh grad: Für den Footcontroler hast du die Taster als Matrix vorgesehen, warum nicht bei der Rackeinheit?

--- Ende Zitat ---

Beim Controller kommt man an der Matrix-Lösung nicht vorbei, weil er so viele I/Os benötigt. Bei der Rackeinheit ist das nicht so zwingend nötig, jedenfalls wenn ich zum "großen" ATmega greife. Das ist der einzige Grund, warum ich das bei der Rackeinheit nicht hingeschrieben habe. Ich hab aber auch noch gar keine Ahnung, welche Variante den größeren Programmieraufwand hat - u.U. ist das mit der Matrix-Bibliothek eh einfacher.



--- Zitat von: SvR am 27.08.2011 10:33 ---Salü,Die LEDs könntest du über Schiebregister und die serielle Schnittstelle des µCs ansteuern (oder wieder Portexpander+I2C). Das LC-Display lässt sich auch im 4Bit-Modus betreiben, um Pins zu sparen.

--- Ende Zitat ---

Als LCD hab ich eines mit serieller Ansteuerung (die gibt's fertig) vorgesehen, dann braucht's sogar nur einen Pin. Andererseits wird natürlich ein nacktes LCD deutlich billiger. Mal sehen, ob am Ende die vier Pins für die Ansteuerung über bleiben.



--- Zitat von: SvR am 27.08.2011 10:33 ---Edit: Warum sollen es eigentlich fertige Arduino-Boards sein? Wenn ich die Preise so les, hast du bei zwei Boards locker den Preis für ein USB-Programmiergerät+µC+Quarz+Hühnerfutter+Lochrasterplatine erreicht. Das Programmiergerät lässt sich dann später weiter verwenden, sodass für deinen nächstes µC-Projekt nur noch µC+Quarz+Hühnerfutter fällig wird.

--- Ende Zitat ---

Das Hauptproblem sehe ich dabei im Format des µC: So wie ich das sehe, werde ich einen ATmega1280 oder 2560 brauchen, und den gibt's nur als SMD oder BGA. Insofern ist ein Aufbau auf Lochraster o.ä. schon mal raus, und auf SMD-Löten hab ich auch keinen Bock, das überlasse ich gerne anderen  ;) . Als Grund sehe ich da weniger den Bedarf an I/O-Ports, das ließe sich ja anderweitig lösen, sondern vor allem den Speicherbedarf, vor allem beim EEPROM. Für den Controller hab ich das schon mal überschlagen, da fallen pro Preset ca. 25 Byte an. Damit sind die kleineren µC mit 512B oder 1kB raus - meiner - zugegeben, bisher oberflächlichen - Recherche zufolge ist es nicht so einfach möglich, das EEPROM zu erweitern. Bei der Rackeinheit hab ich das noch nicht überschlagen, da wäre es vermutlich noch nicht ganz so kritisch.

Dann soll der µC ja im Gerät programmierbar sein, es ist doch unpraktisch, für ein FW-Update jedes mal das Ding aufzuschrauben und den µC rauszunehmen, um ihn im Programmiergerät neu zu programmieren.

Oder siehst Du / sieht jemand da andere Lösungsansätze?

Gruß, Nils

SvR:
Salü,
Die meisten Programmiergeräte unterstützen auch das Programmieren in der Schaltung.
Wie zum Beispiel diese Gerät auf dem Foto für PICs von Microchip.

Ähnliche Geräte gibt es bestimmt auch für Atmel-µC. Wenn du die Steckerleiste auf der Platine unterbringst muss du das Gerät natürlich aufschrauben, aber ich persönlich finde das nicht so schlimm. Wenn die Schaltung erstmal entgültig läuft, wird man nicht mehr ständig neue Software aufspielen und in der Testphase hat man die Platine/die Schaltung eh offen aufem Tisch liegen.
Zur Erweiterung des EEPROMs gibt es auch externe EEPROM-IC (via I2C oder SPI). Wenn du aber eh einen entsprechend großen µC wegen der IO-Pins vorsiehst, kannst du dir das ja sparen.

--- Zitat ---Als LCD hab ich eines mit serieller Ansteuerung (die gibt's fertig) vorgesehen, dann braucht's sogar nur einen Pin. Andererseits wird natürlich ein nacktes LCD deutlich billiger. Mal sehen, ob am Ende die vier Pins für die Ansteuerung über bleiben.
--- Ende Zitat ---
Der 4Bit-Modus bezieht sich nur auf die Datenleitung. Zusammen mit den Steuerleitungen werden dann 7Pins benötigt.
Die Taster würde ich generell als Matrix schalten, vielleicht freust du dich irgendwann noch über die freien Pins wenn dir noch irgend ne tolle Erweiterung einfällt. ;)
mfg sven

Edit.: Das Argument SMD kann ich nachvollziehen. Gottseidank gibt es die meisten PICs auch als THT-Bauteile. Sogar in der dsPIC-Reihe werden einige im DIL-Gehäuse angeboten

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln