MCV876 Controller Update

Aus Synthesizer Wiki
Wechseln zu: Navigation, Suche

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. (Zur Bauanleitung hier lang: MCV876_Controller_Update:_Hardware_bauen.)

Der neue Controller wird ansonsten einfach nur in den Sockel des Alten gesteckt. Alten Controller rausziehen, Atmel mit Adapter reinstecken, fertig.

AdapterEingebaut.jpg

So sieht der "neue" in einem Semtex aus

Software

Der Quelltext für die Controller-Software findet sich hier: MCV876_Controller_Update:_Source_Code. Da steht dann auch, wie das mit der Entwicklungsumgebung geht. Das ist der spannende Teil, nämlich das eigentliche Betriebssystem. Um den Teil zu ändern - sprich: seinen Wünschen anzupassen - und das neue Programm in den Controller zu bekommen, braucht man a)nichts kaufen, b)keine Hardware und kann das c)einfach per Midi an den Controller schicken (das Geräte kann also zu bleiben). (Der doofe Teil ist, dass ich nur beschreiben kann, wie das unter Windows geht. Der Atmel-Compiler sollte sich, da GCC, allerdings auch auf anderen Systemen einfinden, den Konverter kann man problemlos auf jedem System übersetzen ... )

Aus der Entwicklungsumgebung kommt eine Binärdatei, die man mit einem kleinen Programm in ein Midi-Sys-Ex Format konvertieren muss. Diese Sys-Ex Datei überträgt man dann mit einem Tool der Wahl (unter Windows z.B. Midi-OX, aber jedes normale DAW-Programm sollte das können) per Midi auf den Controller. Der verfrachtet das flugs (bei aktueller Programmlänge 1,4 Sekunden) in seinen Flash-Programmspeicher. Dieser Datei-Konverter findet sich hier: MCV876_Controller_Update:_File_Converter.

Der Bootlader des Controllers, der sich auf Controller-Seite um das Update kümmert, ist hier: MCV876_Controller_Update:_Bootloader. Der wird einmalig in den Controller "gebrannt", und dient dazu, die Software jederzeit updaten zu können, auch wenn man in der eigentlichen Controller-Software gerade mal völligen Murks gemacht hat. Den Code braucht man normalerweise nicht anfassen. (Typischerweise ändert sich der alle paar Jahre mal, es ist aber auch nicht weiter schlimm, wenn man nicht die neueste Version hat... )