![]() |
| Zum Vergrößern klicken |
| Als wir vor 3 Jahren die Idee entwickelten, den 82er VCS 2 wieder neu aufleben zu lassen, sollte
er eigentlich nur zusätzliche Segmentwave VCOs beinhalten, polyphon und speicherbar werden. Nun sind die Analogschaltungen fertig, die durch Versuchsplatinen überprüft und optimiert wurden. Das Ergebnis beinhaltet neben der Segmentwave Synthese eine neue, schon in der letzten Aktualisierung angedeutete Analogsynthese, die wir " 6-stage Polarity Waveshaping " nennen. Das Design ist, bis auf Kleinigkeiten, auch abgeschlossen, so das wir nun einen Prototyp aufbauen können. Da dieser Prototyp in allen Einzelheiten der Serie entsprechen soll, und eine Einzelanfertigung finanziell ohne weiteres nicht tragbar ist, entschlossen wir uns, die Filter des VCS 2 als 19 Zoll Rack anzubieten. Das Innenleben des VCS 2 ist extrem aufwendig, so das z.B. für ein Voiceboard 5 doppelseitig bestückte SMD Leiterplatten in der Größe des Processorboards notwendig sein werden - das macht insgesamt 40 Leiterplatten für eine 8-stimmige Tonerzeugung + 12 Leiterplatten für das Panel und den Prozessor Dazu kommen u.a. die Kosten für Echtholz, Herstellung und Siebdruck des Panels, Entwicklung eigener Potiknöpfe / Mod-Räder etc. Nun zu den Hardware-Besonderheiten des VCS 2, beginnend mit dem |
| Da für die Erzeugung von Obertönen die Pulswellenform sehr geeignet ist, kam mein Bruder
auf die Idee, eine Schaltung zu entwickeln, die es ermöglicht, sechs Pulsbreiten innerhalb einer Periode zu erzeugen. Diese Pulsbreiten bezeichnen wir als " Stages ", welche aus der Analyse von Extremwerten und Wendepunkten gewonnen werden. Jede Stage bietet die einstellbaren Parameter WIDTH, LEVEL und POLARITY, mit denen die Basisform der Wave gebildet wird. Benachbarte Stages können sich außerdem summieren. Der eigentliche Clou dabei ist, daß Stages getrennt durch ein Hoch- oder Tiefpass gefiltert werden können. Mit den zwei zusätzlichen Parametern CUTOFF und FILTERMODE wird die Gestaltung der Wave beendet. Dabei wird aber nicht etwa eines der VCFs geopfert, vielmehr verfügt jeder VCO über ein integriertes Filter, welches nur für die Bearbeitung der Polarity Waveshapes verwendet wird. Da alle Parameter durch den Prozessor steuerbar sind, können Wavetables angelegt, durch- fahren oder gemorpht werden. Grade letzeres ist interessant, da durch die Definition einer Start- und Endwave ein kompletter Wavetable errechnet werden kann. Die Animation berücksichtig weder das Filtern der Stages ( grün ) und der resultierenden Welle ( rot ), noch zeigt sie Summierungen, trägt aber zum näheren Verständnis dieser Synthese bei. |
|
| Desweiteren verfügt jeder VCO über die Standardwellenformen Dreieck, Polarity / Classic
Pulse und Sägezahn, wobei alle Wellenformen zugleich aktiviert werden können. Hervorzuheben ist, daß für jede dieser Wellenformen eine Suboktave zur Verfügung steht. Demnach kann jeder VCO zwei Oktaven zugleich erzeugen, wobei die Suboktave ohne Verfälschung aus der Basisoktave gewonnen wird ( keine Frequenzteilung ). Außerdem können die VCO's synchronisiert und frequenzmoduliert ( exponentiell oder linear ) werden, welches auch für Segmentwaves und Polarity Waveshapes gilt. |
| Von diesem VCF existieren im VCS 2 gleich 2 pro Voice, welche parallel oder seriell betrieben
werden können. Es handelt sich dabei um 12dB Filter, die über die Betriebsarten Tiefpass, Hochpass, Bandpass, Notch und dem, von meinem Bruder neu entwickelten, " Asymmetrical Bandpass " verfügen, welcher nur im VCS 2, aber nicht im RELIQUARY vorkommt. Die spannungssteuerbaren Parameter sind Cutoff Frequency, Emphasis und " Notch Structure ". Als " Notch Structure " bezeichnen wir das stufenlose Überblenden von Tief- und Hochpass. Da diese Filter über denselben temperaturkompensierten Expokonverter wie die VCO's verfügen, besteht die Möglichkeit, sie völlig oktavrein als Sinusoszillatoren zu verwenden. Näheres unter unserem 19 Zoll Filter RELIQUARY. |
| Dieses Kammfilter verfügt über 14 Stufen und kann beliebig ( Stage 1-14 ) abgegriffen werden.
Da selbst die Rückkopplungs-Stufe frei wählbar ist, kann dieses Filter über sanfte Phasingeffekte bis zu "röhrenden" Sounds alles produzieren. Selbstverständlich ist auch hier alles spannungssteuerbar. |
| Auf unseren Hüllkurven Generator sind wir besonders stolz, da er zwei Eigenschaften
besitzt, die völlig neuartig sind - wir nennen sie " Free Function Select " ( FFS ) und " Time Segment Control " ( TSC ). Viele Leute schwärmen z.B. vom Minimoog und sprechen in erster Linie von seinen VCO's / VCF und schnellen EG's, erkennen aber nicht, daß die Charakteristik einer Hüllkurve eine immense Bedeutung hat. Wären im Minimoog rein lineare Hüllkurven, so würden viele seiner Sounds nur noch langweilig klingen. Deshalb entwickelte mein Bruder einen ADSR Generator, der neben einer hohen Geschwindigkeit freie lineare, exponentielle und logarithmische Funktionen besitzt, die getrennt für Attack, Decay und Release einstellbar sind und überblendet werden können. Dabei handelt es sich aber nicht um "echte", sondern um angenäherte Funk- tionen, was in einem Hüllkurvengenerator kein Nachteil ist. Die Animation " Free Function Select " verdeutlicht ( grob ) die Einstellmöglichkeiten. |
|
| Als " Time Segment Control " bezeichnen wir die zweite Eigenschaft. Sie ermöglicht,
daß die Hüllkurve in jeder ihrer Phasen ( Attack, Decay, Sustain Level und Release ) ein Gate erzeugt, welches dazu verwendet wird, prozessorgenerierte oder von anderen Baugruppen erzeugte Steuerspannungen freizuschalten. Dafür stehen 32 Quellen zur Verfügung, von der eine mittels Multiplexer auf 32 Ziele geroutet werden kann. Ein Beispiel: Während der Attackphase wird VCF1 Cutoff von LFO1 Dreieck in einer beliebigen Intensität moduliert. Die nachfolgende Decayphase deaktiviert diese Ver- bindung und verändert die Tonhöhe von VCO1 mit einer DCDA - Steuerspannung. In der Sustainphase könnte man dann z.B. die Notch Structure so verändern, daß VCF1 und / oder VCF2 von Tief- zu Hochpass überblenden. Danach wäre es möglich, in der Releasephase VCO1 durch VCO2 zu modulieren. Diese Steuerspannungen sind unabhängig von der erzeugten ADSR CV, quasi eine Subhüllkurve mit einem Router, die synchron zur eigentlichen Hüllkurve erzeugt wird. Da die Hüllkurve retriggerbar ist, kann jede Phase z.B. Hüllkurven resetten oder starten. |
|
| Im VCS 2 werden pro Voice 3 analoge LFO's verwendet, die spannungssteuer- und synchronisierbar sind.
Sie erzeugen Sinus, Dreieck, ansteigenden und abfallenden Sägezahn, Polarity Pulse und Stages. Polarity Pulse entspricht derselben Wellenform des VCOs und sagt aus, daß getrennte Pulsbreiten für den negativen und positiven Bereich einer Periode definiert werden können. Stages sind Treppenwellen, bei denen die Stufenanzahl ohne Geschwindigkeits- und Pegeländerung ein- stellbar ist. Darüber hinaus kann jeder Wellenform ein Offset zugewiesen werden, so das sie entweder im positiven, negativen Bereich oder nullsymmetrisch arbeitet. |
| Einige Fotos unserer Versuchsleiterplatten |
![]() |
![]() |
![]() |
![]() |
| Ein "Minipanel" mit 12bit Pot ADC | VCO mit 6-stage Polarity Waveshaping | 2*VCF / 2*VCA | ADSR ( nur 1 von 3 bestückt ) |
| Da jedes Voiceboard weit über 128 Steuerspannungen erfordert, kommt für eine 8stimmige Tonerzeugung
eine reine Prozessorsteuerung nicht mehr in Frage, weshalb ich eine autonome Refresh - Matrix entwarf. Deshalb besitzt jedes Voiceboard einen eigenen 12bit Digital / Analogwandler, der seine Daten aus einem vom Prozessor unabhängigen RAM bezieht, der zyklisch von einem Counter ausgelesen wird. Trotzdem kann ( und muß ) der Z80 zu einem beliebigen Zeitpunkt Daten in diesen RAM schreiben können. Ansonsten funktioniert alles in alter Tradition mittels Multiplexern ( 4051 ) und Spannungsfolgern mit Halte- kondensatoren. Dieses Prinzip ermöglicht, daß der Prozessor nicht ständig mit dem Auffrischen der Steuerspannungen beschäftigt ist, sondern einen aktuellen Wert nur ein einziges Mal in den RAM schreibt. |
| Einige werden jetzt denken, daß 12bit Auflösung nicht ausreichend sind. Allerdings verfügt der VCS 2,
im Gegensatz zu anderen Synthesizern, für einige Parameter über mehrere CV IN, die summiert werden. So werden z.B. für die Tonhöhe eines VCOs drei Inputs verwendet ( Keyboard, Poti, Prozessor ). Da die Refresh - Matrix sowieso notwendig ist, da z.B. die Polarity Waveshapes allein 18, durch CV's gesteuerte, Parameter benötigen ( von den Segmentwaves gar nicht zu sprechen ), konnte ich die Prozessorsummierung und vor allen Dingen die Verwendung von teueren 16bit DACs vermeiden. Außerdem kommt ein 10bit Analog / Digitalwandler ( vorher 12bit ) zum Einsatz, der dafür sorgt, daß ein Poti mit 1024 Schritten gerastert wird und damit keine hörbaren Sprünge beim Drehen auftreten. Die Potiabfrage geschieht übrigens auch autonom in " Highspeed ", so das der Z80 nur bei dem Anliegen eines neuen Wertes benachrichtigt wird und nicht mehr ständig den alten mit einem eventuell neuen Wert vergleichen muß. Eine weitere Änderung besteht darin, daß nun zwei Z80 Prozessoren verwendet werden, wobei der Hauptprozessor in erster Linie für die Berechnung der DCDA - Algorithmen / MIDI / Keyboardmodes / Soundverwaltung verwendet wird, während der zweite für alle Panel - Elemente ( Potis, Taster, hauptsächlich Display ) verantwortlich ist. Soweit zur Prozessorsteuerung, nun zu den Matrizen. |
| Für die Flexibilität eines Synthesizers ist ja nicht nur die Anzahl der Baugruppen,
sondern auch deren Verbindungsmöglichkeiten ausschlaggebend. Deshalb verzichtete ich auf jegliche starre Verbindungen und überlegte, wie man aus dem VCS 2 ohne großen Hardwareaufwand einen Modulsynthesizer machen könnte, dessen Verbindungen durch den Prozessor aktiviert werden können. Die herkömmliche Methode mit 4066 Switches ( Schalt ICs ) kam nur begrenzt in Frage, da für jede Verbindung ein seperater Abschwächer vorhanden sein sollte. Damit wäre der Hardwareaufwand zu massiv. Die Lösung bestand im splitten und umleiten des Eingangssignals mit Multiplexern. Um einen Abschwächer pro Kanal zu realisieren, wird ein 8bit DAC als Digital Controlled Attenuator für je 16 Kanäle benutzt, der seine Daten aus einem eigenen RAM bezieht, auf den der Prozessor zugreifen kann. Da die Matrix zyklisch durchlaufen wird, liegen mit 50kHz gerasterte Signale mit seperater Abschwächung an den Ausgängen der Multiplexer an. Weil dieses System modular ist und mit jeweils 16 Kanälen erweitert werden kann, sind auch mehr als die bereits verhandenen 256 Kanäle machbar. Ein Nachteil dieser Matrix besteht darin, daß Transienten ( schnelle Einschwing- vorgänge ) durch die Rasterung verloren gehen, weshalb eine zweite Matrix existiert. |
|
| Diese Matrix wird direkt durch die Potis und Taster des Panels programmiert
und entspricht einem normalen Ein- und Ausschalten der Verbindungen mittels elektronischer Schalter ( 4066 ). Diese Verbindungen sind fest vorgegeben und können nicht geroutet werden. Sie entsprechen der herkömmlichen VCO - VCF - VCA Struktur, wurden aber auch um musikalisch relevante Verbindungen erweitert. Der Vorteil liegt in einer ungerasterten Signalführung, um Transienten zu schützen ( wie Kabelverbindungen ) und einer intuitiven Programmierung über Potis und Taster ( direkter Zugriff ). Nachteile liegen in der begrenzten Verbindungsanzahl und darin, daß jede Gruppe nur über einen einzigen Abschwächer ( in diesem Fall ein VCA ) verfügt. |
|
| Die Programmierung der DCDA Routinen mußte ich mehrmals überdenken,
da ich einige Punkte in der Erweiterbarkeit übersah und einzelne Module miteinander inkompatibel waren, was zum Absturz des Systems führte. Diese Probleme sind nun gelöst und die ersten Module funktionieren. - Die Module: WAVEFORMER - Erzeugung von digitalen Hüllkurven / LFOs ATTENUATOR - Abschwächer SAMPLE & HOLD - hält die zugeführte Steuerspannung mittels Takt vom DATA SEQUENCER - Erzeugung von Step CVs und / oder GATEs ARITHMETICAL - bildet die Summe, Differenz, Produkt, Quotient zweier CVs ROUTER - ermöglicht das Umleiten / Splitten von CVs und / oder GATEs - Die mögliche Maximalgeschwindigkeit / Auflösung einzelner Module wird noch getestet, jedoch tendiere ich zu einer Reduzierung zugunsten der Anzahl parallel aktivierbarer Module. Da die benötigte Rechenzeit für Module unterschiedlich hoch ist, können z.B. nur 2-3 Waveformer pro Voice aktiviert werden, während die Anzahl anderer Module, z.B. Data Sequencer, bei ca. 6-8 liegen kann. Die Graphik zeigt den ersten Entwurf einer Benutzeroberfläche. |
![]() |
| Noch einige Worte zum Betriebssystem ( eigentlich nur für Programmierer interessant ) |
| Als ich damals die ersten Routinen programmierte, mußte ich natürlich ein Hauptprogramm entwickeln, welches
zur Einbindung und Steuerung sämtlicher Unterprogramme nötig ist. Nachdem ich einige Wochen verschiedene Algorithmen entwarf, kam ich auf eine extrem einfache Lösung. Dieses Hauptprogramm nannte ich den " Task Scanner ", welcher nur 47 Bytes lang ist und die komplette Steuerung aller Unterprogramme übernimmt. Darüber hinaus bietet er eine Prioritätssteuerung. |
| Das Prinzip des Task Scanners beruht darauf, daß mehrere Bytes zyklisch nach gesetzten Bits durchsucht
werden. Diese Bits repräsentieren abzuarbeitende Aufgaben ( Tasks ) und können von allen Unterprogrammen gesetzt oder gelöscht werden. Die Haupttätigkeit des Prozessors liegt also im Erkennen einzelner Bits. Sobald ein Bit erkannt wurde, wird aus einer Tabelle die Sprungadresse ( einzelne 16bit Addition ) errechnet. Dieses Unterprogramm kann nun von sich aus für andere Subroutinen oder für sich selbst Bits setzen oder löschen. Falls z.B. eine Berechnung beendet wurde, schreibt das Unterprogramm das Ergebnis in einen Zwischenspeicher, aktiviert für die Auswertung das nächste Programm und deaktiviert sich selbst, bis es durch andere Unterprogramme wieder aufgerufen wird. Das gleiche gilt natürlich auch für Interrupts. Dieses Prinzip ermöglicht also auch preämtives Multitasking und eine völlig unproblematische Erweiterung. Bei der Prioritätssteuerung werden die Bytes nicht linear geprüft ( 1,2,3,4 etc. ) sondern Byte 1 wird immer wiederholt ( 1,2,1,3,1,4 etc. ). Die Bits des ersten Bytes sind für relativ zeitkritische Routinen reserviert. |
| Desweiteren kann das Betriebssystem jederzeit aktualisiert werden, da nur die Basis MIDI I/O Routinen
und die Daten für das Display im ROM gespeichert sind. Jede OS Version wird im RAM gespeichert und kann mit einem MIDI fähigen Computer als Sysex z.B. über das Internet aktualisiert werden. Außerdem habe ich vor, den VCS 2 mit einer USB Schnittstelle auszurüsten, da höchstwahrscheinlich MIDI bald durch USB ersetzt wird. Ein PC Editor mit einer Obertonanalyse von Samples, Konvertierung in Segmentwaves und 6-stage Polarity Waveshapes ist geplant, liegt allerdings in ferner Zukunft. |
| zu " Projekte " |