MCV876 Controller Update
ATMEGA88 CPU für MCV876 Midi Interface
WARNUNG: Dieser Artikel ist in Arbeit und kann sich jederzeit deutlich ändern.
Das Projekt ist zwar schon recht weit fortgeschritten (sprich: die Software tut, was sie soll), die Dokumentation ist aber derzeit Baustelle und unvollständig.
Worum geht’s?
Das Midi-Interface MCV876 von Marc Bareille hat im Original einen PIC-Controller. Der muss aus Rechenleistungs- und Speichergründen in Assembler programmiert werden, was Wartung und Pflege erschwert.
Hier wird ein alternativer Controller für die gleiche Hardware beschrieben. Mit dem Atmel ATMEGA 88 steht ein halbwegs Pinkompatibler Controller zur Verfügung, der komfortabel in C programmiert werden kann. Um diesen Controller auf der für den PIC gedachten Platine verwenden zu können, ist ein Adapter-Sockel nötig. Die Software für den ATMEGA ist einiger Hinsicht kompatibel zum Original-Controller. Allerdings ist es kein 100% Clone, einige Funktionen der PIC-Software sind mir auch verborgen geblieben.
Deshalb kann es sehr gut sein, dass die Funktionen abweichen. Diese Beschreibung bezieht sich ausschließlich auf die Software für den ATMEL Controller. Der Controller wurde mit Blick auf dem Einsatz im Semtex XL (und vergleichbare Mono-Synths) entwickelt, für andere Einsatzfälle mögen Systementscheidungen daher nicht optimal sein. Die Software ist unter der GPL veröffentlicht. Als Entwicklungsumgebung kommt das (kostenlos verfügbare) ATMEL AVR Studio 4 zum Einsatz. Ist der Controller einmal mit einem Bootlader versehen worden, ist ein Software-Update über Midi im Gerät möglich. Damit kann man mit komplett kostenlos verfügbarer ToolChain und ohne (Programmier-) Hardware eigene Codeänderungen einpflegen.
Ausstattungsmerkmale
Die Beschreibung ist für das komplette Interface, d.h. MCV876 Platine (bzw. der entsprechende Teil auf der SEMTEX-XL Platine) mit dem ATMEGA88 Controller.
Hardware
4 Spannungsausgänge (CV) von 0-10V
6 Gate Ausgänge 0 auf 5V schaltend.
1 LED „Universalanzeige“
1 Taster.
Midi-Eingang
Midi-Thru Ausgang
(Es gibt keinen Midi-Ausgang, das Interface kann also nicht ausgelesen werden. )
Funktionsübersicht – Standardbelegung
Das Interface kann zwar (über Midi und Sys-Ex Befehle) durchaus unterschiedlich konfiguriert werden. Zunächst aber die Standardbelegung. Die ist einkanalig und monophon.
CV 1 | Tonhöhe (Noten) | Gate 1 | Note-ON |
CV 2 | Velocity | Gate 2 | CC 18 |
CV 3 | Mod Wheel | Gate 3 | CC 19 |
CV 4 | Pitch Bend | Gate 4 | CC 20 |
Gate 5 | Midi Start/Stop | ||
Gate 6 | Midi Clock /6 (entsprechend 16-tel) |
CV 1 und Gate 1 sind die Standardausgänge für den Tonhöhen- und Gate-Eingang des Synths. Die CV ist für 1V/Oktave ausgelegt.
CV2 ist die Anschlagstärke und geht von 0-5V.
CV3 ist der Pitchbender, in Mittelstellung liegen hier 5V an, es geht von 0...10V.
CV4 ist das Modulationsrad, von 0 (Ruhestellung) bis 5V.
Bedienung
Im „Normalbetrieb“ gibt es gar nichts zu Bedienen, das Interface setzt eben Midi auf CV & Gate um.
Die Leuchtdiode
Leuchtet, solange eine Note (=ein Gate) eingeschaltet ist. Nach dem Einschalten blinkt sie zweimal, um anzuzeigen, dass der Controller lebt. Sollte sie vier mal blinken, hat der Controller die permanent gespeicherte Konfiguration nicht geladen und nutzt statt dessen (wieder) die Standardeinstellung.
Midi-Kanalwahl
Um den Midi Kanal neu Einzustellen die Taste vom Interface drücken, bis die LED leuchtet. Dann eine Note mit dem gewünschten Kanal am Keyboard spielen. Das Interface stellt sich auf diesen Kanal ein. Die LED blinkt drei mal, um das permanente Abspeichern des Kanals anzuzeigen.
Grund-Note einstellen
Die „tiefste Note“, also die Note, bei der das Interface 0 V ausgibt, wird ganz ähnlich wie der Kanal eingestellt. Taste drücken, bis die LED angeht, dann gewünschte tiefste Note spielen. Die LED blinkt drei mal, um das permanente Abspeichern der Note anzuzeigen.
Controller für CV3 einstellen
Taste drücken, bis die LED angeht, dann einen Controller bewegen. Dieser Controller wird dem dritten Steuerspannungsausgang zugewiesen. Die LED blinkt drei mal, um das permanente Abspeichern des Controllers anzuzeigen.
Alle Noten aus
Taste kurz drücken. Dann werden alle Noten auf „aus“ gesetzt und die Controller auf 0 zurückgestellt. Da Midi immer nur Datenänderungen überträgt, kann es schon mal zu hängenden Noten und schief stehenden Controllern kommen. Dann hilft ein kurzer Druck auf die Taste. Das Interface selber sollte das bei korrektem Midi-Datenstrom allerdings niemals alleine fertigbringen. Nur ist nicht jeder Midi-Datenstrom immer korrekt.
Active Sense
Das Interface wertet Active-Sense Nachrichten aus. Erzeugt der Controller (bzw. das sendende Midi-Interface) Active-Sense und zieht man dann das Midi-Kabel ab, werden (nach 330ms) alle Noten ausgeschaltet. Roland und Edirol senden das eher mal, die andern eher nicht.
Service Funktionen
Wird die Taste beim Einschalten festgehalten, kann man zwei Service-Funktionen wählen:
Bootlader
Wird die Taste beim Einschalten festgehalten und gleich (ähm ... Reaktionszeit eines Dinosauriers ist auch ok... ) losgelassen, wenn die Leuchtdiode zu blinken anfängt, dann kommt man direkt in den "Bootlader", das ist ein spezielles Programm, mit dem man ein Software-Update über Midi einspielen kann. Das braucht man nur, wenn etwas schief gegangen ist (mehr dazu im Abschnitt über Software bauen und eintwickeln). Normalerweise kann man ein Update einfach aufspielen. Im Bootlader blinkt die Leuchtdiode zwei mal kurz, dann etwas Pause. Das kann durch erneuten Tastendruck, oder Aus- und Einschalten abgebrochen werden.
Einstellungen zurücksetzen
Wird die Taste beim Einschalten sehr lange festgehalten (knapp 10 Sekunden, bis das Geblinke aufhört), dann werden die Einstellungen des Interfaces gelöscht und auf den Standard zurückgestellt. (Monophon, Midi-Kanal 1)
Erweiterte Einstellungen
Der Controller ist Sys-Ex-Kompatibel zum PIC-Controller des MCV876 (3er Version), er lässt sich daher mit dem gleichen PC-Programm einstellen.
Bei der Programmierung wird der Midi-Kanal ignoriert, man kann also nur ein Interface diesen Typs zur Zeit (oder mehrere genau gleich) konfigurieren. Damit die Konfiguration permanent bleibt, muss sie gespeichert werden (Chip-Symbol drücken, LED am Interface blinkt 3 mal. )
Interface Betriebsart
Es werden 3 grundsätzliche Betriebsarten (Mode) unterschieden:
- Mono (default): 1 Kanal monophon
- Multi2: 2 Kanal Monophon
- Multi4: 4 Kanal Monophon
- Poly2 und Poly4: nicht unterstützt
Weitere Kanäle werden über den nächsten oder die drei nächsten Midi-Kanäle angesteuert. (Sollte man dabei Kanäle „über 16“ bekommen, kann man diese nicht ansteuern. )
Kanal-Betriebsart
Bei den vier Ausgangs-Kanälen gehören immer ein Steuerspannungs(=CV)-Ausgang und ein Gate zusammen. Das erste Feld "CC" entscheidet hier (grundlegend), ob der Kanal Tonhöhe und Gate (=Note-An) erzeugt, oder ob er ein Controller Kanal ist. Die "Resteinstellung" ist dann jeweils ziemlich unterschiedlich.
Betriebsart Tonhöhe
Ist das CC-Feld aus (nicht grün), dann wird eine Tonhöhenspannung erzeugt. Im „Mono“ Mode ist das ggfls. 4 mal die gleiche, in Multi2 gehören DAC 1 und 2 zum ersten und DAC 3 und 4 zum 2. Midi-Kanal. In Multi 4 gehört jeder DAC zu einem Midi-Kanal. Im Tonhöhen-Modus wird das jeweilige Gate automatisch für Note-An vereinnahmt.
Ist das PB-Feld aktiv, wird der Pitch-Bend Wert (bipolar) auf die Ausgangsspannung addiert. (Die Ausgangsspannung ist von der Hardware auf Werte über 0 festgelegt, das wird ggfls. passend begrenzt)
Ist das VL-Feld aktiv, wird die Anschlagstärke (Velocity) auf die Ausgangsspannung addiert.
Das 5V-Feld schaltet die Ausgabe so um, das ein auf 5V Full-Scale skalierter Wandler 1V/Oktave macht. Das sind dann nur 5 Oktaven, aber doppelt so viele Bits, d.h. die Töne treffen besser.
Das "Trig" Feld hinter dem Gate gibt (im Tonhöhen-Modus) an, ob das Gate bei neuen Midi-Noten Retriggert oder nicht. Zum Retrigger wird das Gate kurz ausgeschaltet. Der Retrigger erfolgt nur, wenn man neue Noten drückt, nicht, wenn man Noten loslässt und die Notenpriorisierung auf eine gehaltene Note zurückfällt.
Betriebsart Controller
Ist das CC-Feld aktiv, wird der eingestellte Controller als Grundwert genommen, und nicht die Tonhöhe. Wählt man bei Controller "none", wird 0 als Grundwert genommen. (Sonderregel für Pitch-Bend: ist der Controller "None" und Pitch-Bend gewählt, dann wird 5V als Grundwert genommen, weil der Pitch-Bender nach links sonst keine Funktion hätte. So hat er dann ganz links 0V und ganz rechts 10V.)
Ist das PB-Feld aktiv, wird der Pitch-Bend Wert (bipolar) auf die Ausgangsspannung addiert. (Auch hier geht "unter Null" seitens der Hardware nicht.)
Ist das VL-Feld aktiv, wird die Anschlagstärke (Velocity) auf die Ausgangsspannung addiert.
Im CC-Modus hat das 5V Feld keine Funktion. Die Midi-Werte (von 0...127) werden immer auf 5V skaliert, nicht auf 10V. Da sie nur 7bittig sind, ist das ausreichend, oft sinnvoller skaliert, und dadurch das es einige „Additionen“ gibt generell eher sinnvoll.
Den Gate-Ausgängen kann ein Controller zugewiesen werden. Das Gate ist dann an, wenn der Controller über den Wert gestellt wird, der bei Tresh.(hold) eingestellt ist.
Wird das Trig-Feld aktiviert, dann wird der DAC-Ausgang(sic!) ge-gated. Das heißt, der CV-Ausgang wird auf Null geklemmt, wenn keine Note an ist. Damit lässt sich z.B. ein Gate bauen, dass eine analoge, velocity-abhängige Höhe hat.
Beispiele: Drei einfache und häufige Fälle für Steuerspannungen:
- Modwheel: CC auf Modwheel (Coarse), alles andere aus.
- PitchBend: CC auf "none", nur Pitch-Bend ausgewählt.
- Velocity: CC auf "none", nur Velocity angewählt.
Clock-Einstellung
Duration und Gate 5 im „Triggers“-Feld haben keine Funktion. (Wenn mir dazu was sinnvolles einfällt, dann ändert sich das noch..)
Unter Midi-Clock wird eingestellt, was Gate 6 erzeugt. Midi-Clock sind 24 Ticks pro Viertel-Note (d.h.: Teiler 6=16tel, 12=8tel, 24=1/4). Die Midi Clock wird zum Midi-Start und dem Midi Song Position Pointer synchron gehalten. Wenn man also einen geraden Teiler einstellt, dann hat man den Clock immer synchron zur 1. Bei Midi-Start oder Midi-Continue 'springt' der Clockpuls daher ggfls. um wieder synchron zu werden. Der Clock-Ausgang ist immer die halbe Clock-Dauer an. Er lässt sich damit direkt als Midi-synchroner Rechteck-LFO verwenden.
Gate 5 ist immer Midi-Start/Stop. Das wird direkt durchgereicht, 5V wenn es läuft, 0V im Stopp. Wenn der Master das korrekt erzeugt, nämlich etwas vor dem nächsten Clock, der die erste 1 markiert, dann lassen sich damit analoge Sequencer synchron starten. Wenn der Sequencer allerdings sofort auf Start losrattert, dann wird er etwas zu früh sein. (Start "gleichzeitig" mit der Clock ist Mist, da dann unklar ist, ob der erste Clock-Puls erwischt wird oder nicht. )
Hardware
Verwendet wird ein ATMEGA 88. Der ist gut erhältlich, nicht all zu teuer (um 3.60€) und für die Anwendung ausreichend. Er hat einen getrennten und schütztbaren Bootlader-Bereich und kann (Bootlader-)Code ausführen, während er den Anwenndungs-Programmspeicher ändert. Das ist sehr hilfreich, um beim Update über Midi eine unproblematische Handhabung zu erzielen.
Der Atmel Controller ist nicht völlig pinkompatibel programmierbar, daher ist ein Adaptersockel nötig.
So kann der Sockel aussehen
Oben ist ein normaler 28-poliger DIL-Sockel, unten sind zwei 14 polige Stecksockel von Fischer. ( Conrad 187607 ) (Die drei extra-Pins zur Seite braucht man nicht, die sind nur Anschluss für meinen Debugger.)
Der Verdrahtungplan:
Die Pins mit den grünen = werden 1:1 aneinander gelötet, bei den roten X werden die Pins am Sockel weg gekniffen und die Verbindung wird mit einem Draht hergestellt.
Software
Der Quelltext für die Controller-Software findet sich hier MCV876_Controller_Update:_Source_Code.
Der Bootlader ist hier: MCV876_Controller_Update:_Bootloader.
Fertige Files zum runterladen und selber brennen gibt es, wenn die Software fertig getestet ist, "Beta-Tester" werden über das Forum bzw. per Mail versorgt.
Der Datei-Konverter, der eine mit der Entwicklungsumgebung erzeugte Binär-Datei (Intel .hex Format) in ein Sys-Ex File für ein Software-Update über Midi umwandelt, findet sich hier: MCV876_Controller_Update:_File_Converter