Dieser Artikel behandelt ein Modul meines beendeten Analog Synthesizer Projekts.
Das Modul MIDI-CV ist ein Schlüsselelement eines analogen Synthesizers. Es wandelt MIDI-Daten, die von einem Sequenzer oder MIDI-Eingabegerät (z.B. Keyboard) erzeugt werden, in Steuerspannungen um. Minimal benötigen wir eine 0-5V Steuerspannung für die Tonhöhe (1V pro Oktave oder 83mV pro Halbton) sowie ein Gatesignal mit den Pegeln 0V und 5V, das stets dann 5V ist, wenn ein Ton erklingen soll.
- Eine Steuerspannung für den jeweils letzten Ton liegt immer an und wird vom angeschlossenen VCO in eine Wellform entsprechender Frequenz und fester Spannung umgesetzt: die CV moduliert die Frequenz gemäß der gespielten MIDI-Note.
- Das Gate triggert den ADSR und der erzeugt eine Steuerspannung für die Hüllkurve, die den VCA öffnet: der ADSR moduliert die Lautstärke gemäß seiner Einstellungen.
Weitere sinnvolle Steuerspannungen als Modulationsquellen sind die absolute Lautstärke der Note (Anschlagstärke auf einem Keyboard), Pitchbend- und Modulationsrad, Volumenpedal, Aftertouch und allgemein MIDI-Controller, die zur dynamischen Beeinflussung des Tons eingesetzt werden sollen. Das Modul MIDI-CV liefert neben der Noten-CV (kurz CV) und dem Gate-Trigger drei weitere Steuerspannungen, die frei konfigurierbar aus MIDI-Events ableitbar sind sowie einen MIDI-Clock-Trigger, der zum Beispiel für die Synchronisation eines LFO oder ADSR mit dem aktuellen Taktmass eingesetzt werden kann. Als Besonderheit können MIDI-Controller entweder als Switch, 7- oder 14-bittig empfangen werden.
Die Einstellungen dieser Parameter erfolgen über einen Drehregler und eine Modus-Wahltaste. Ein zweistelliges Display zeigt entweder die aktuelle Konfigurationsseite (linker Dezimalpunkt blinkt) oder den aktuellen Wert der eingestellten Seite (rechter Dezimalpunkt blinkt) an. Mit der Wahltaste wird zwischen Seite und Wert umgeschaltet. Die aktuellen Seiten und mögliche Werte sind derzeit
- Modus von CV2: 0=Pitchbend, 1=Velocity, 2=Aftertouch, 3=Switch Controller, 4=7-bit Controller, 5=14-bit Controller LSB/MSB, 6=14-bit Controller MSB/LSB
- Controllernummer CV2: 0-99, egal bei Modus 0-3, bei Modus 5 und 6 werden Controllernummer und Controllernummer+32 empfangen
- Ditto CV3
- …
- Ditto CV4
- …
- MIDI-Kanal: 0=OMNI, 1-16
- MIDI-Clock Unterteilung: typischerweise 24 weil MIDI-Clock 24 Events pro notierte Viertelnote erzeugt. Damit triggern wir die Clock bei jeder Viertelnote.
Weitere Features wie Portamento und Legato sind möglich aber derzeit nicht geplant.
Hinweis: das Display schaltet sich nach 60 Sekunden ab, um eventuelle Störungen des Synthesizers zu minimieren, und wird mit einem Druck auf den Modus-Taster wieder aktiviert.
Aufbau
Da ich mit vertretbarem Aufwand nur einseitige Platinen herstellen kann und ich auf eine besonders gute Trennung zwischen Analog- und Digitalteil der Schaltung Wert lege, habe ich die Schaltung in einem Konverter- und Bedienteil zweigeteilt. Der Bedienteil selber wurde dann nochmal auf zwei kleine Platinen verteilt, um die Breite des Moduls so gering wie möglich zu halten.



Die Konverter-Platine wird mit der Frontplatte über die sechs Buchsen verschraubt und die Displayplatine wird direkt daneben an die Frontplatte geschraubt. Eine Verbindung zwischen beiden Teilen erfolgt über ein 5-poliges Kabel und ein asynchrones serielles Protokol.
Schaltung(en)
Der Digitalteil wird von einem Atmel AVR Mega8 und einem AT90S2313 gesteuert. Der Mega8 übernimmt den Empfang der MIDI-Events und ihre Umsetzung in Spannungswerte, die dann seriell an einen der vier DACs geleitet werden. Alle vier DACs werden parallel mit dem Spannungswert geladen aber nur der richtige DAC konvertiert die Eingabe, indem sein LOAD auf low gezogen wird. Die anderen DACs halten derweil ihren letzten Wert. Die darauf folgenden Puffer dienen nur zur Anpassung der Steuersignale an die restlichen Module sowie zum Schutz der sündhaft teuren DACs. Sie kosten immerhin rund 9EUR/Stück und sind auch noch in CMOS-Bauweise hergestellt. Zwei habe ich bereits per Latchup gegrillt.
Das zur Warnung: die verwendeten LTC1257 vertragen maximal 15V und wir betreiben sie mit 12V schon gefährlich nahe an diesem Maxium. Wenn nun ein Spike auf der Versorgung erscheint, brennen die per Latchup in Sekundenbruchteilen durch. Dazu genügt bereits, die Versorgungsspannung schlagartig, z.B. zu Testzwecken per Krokoklemme, anzulegen. Merke: niemals die Siebelkos C1 und C8 weglassen!
Die TTL-Pegel für die Clock- und Gate-Trigger werden einfach mittels T1 und T2 auf 5V gebracht.
Die 5V-Referenz wird per LM336-5 erzeugt. Mit dem Trimmer kann die Spannung nach Bedarf abgeglichen werden.
Der Empfang von akzeptierten MIDI-Events und das Triggern von Clock wird über zwei LEDs angezeigt. Um die Programmierung zu vereinfachen, werden die Leuchtzeiten der LEDs über einen 555er-Timer gesteuert und der Mega8 muss nur noch die entsprechenden Portleitungen kurz triggern. R14 und R15 können nach Geschmack die Leuchtzeiten einstellen. Die aktuellen Werte funktionieren selbst bei dichtestem Beschuss mit MIDI-Clock sehr gut. [Edit 2009: im Nachhinein war das eine Schnapsidee. Die Timer erzeugen Störungen auf den Versorgungsleitungen und eine Programmierung wäre viel flexibler gewesen.]
Das Layout der Schaltung ist recht kritisch, um den analogen Teil vor dem digitalen Teil zu schützen. Ein Übersprechen der Taktsignale auf die DACs oder Puffer ist bei 83mV pro Halbton ein erst zu nehmendes Problem. Ferner kann die Timer-Komponente Lastschwankungen auf der Masse hervorrufen, welche das Bezugspotential zwischen DAC und Puffer verschieben können. Es käme dann zu Einbrüchen der Steuerspannungen im Takt der LEDs. Eine gute Entkopplung, grosszügige Massewege und eine geschickte Orientierung und Verteilung der DACs (links Analog, rechts Digital und keine Kreuzungen) sorgen für sehr stabile und genaue Steuerspannungen.
Die Display-Schaltung ist wie bereits geschrieben zweigeteilt. Eine kleine Logikschaltung mit einem 2313 regelt die Kommunikation mit dem Konverterboard und steuert das Display und die Eingabeelemente. Die beiden 7-Segment-Anzeigen werden gemultiplexed und teilen sich einen BCD-7Segement-Decoder. So konnte die Platine schön klein gehalten werden. Die Eingabe erfolgt über einen sogenannten Digitalpoti (auch bekannt als Winkelencoder oder Incrementalgeber). Er muss einen 2-bit Gray-Code liefern, über den man die Drehrichtung und Winkel bestimmen kann dse-FAQ F.29. Quadraturdecoder für Inkrementaldrehgeber.
Programmierung
Beide AVR µC wurden mit dem ICC-AVR C-Compiler programmiert. Es ist in beiden noch reichlich Luft für eigene Erweiterungen.




