![]() | Yeah, und hier ist es, mein erstes µController basiertes Modul, das einzigartige :-) Universal Control Voltage Module (UCVM). Es basiert auf einem Atmel AT90S8535. Die Hauptaufgabe dieses Moduls wird allerdings die MIDI2CV-Funktion sein, allerdings kann man damit noch mehr machen, und ich habe noch ein paar Extras eingebaut.
| Zusammenbau und Hinweise zum SchaltplanDie Schaltung weist eigentlich keine Besonderheiten auf. Da ich nicht gerade der weltgrößte Elektroniker bin, bin ich einfach nur glücklich, daß alles zu funktionieren scheint. Die meisten Schaltungsteile habe ich mir aus dem WEB zusammengesammelt; falls irgendjemand etwas als 'seine' oder 'ihre' Errungenschaft erkennt, danke ich 'ihm' oder 'ihr' und hoffe, daß ich die entsprechenden Teile in der Dokumentation weiter verwenden kann. Falls nicht, nehme ichs raus.Achtung: Schemas anklicken heißt: DISCLAIMER am Seitenende wird anerkannt!!! Control UnitIch habe natürlich mit dem ISP Interface angefangen, um alle neuen Funktionen testen zu können, ohne den Controller jesesmal auszubauen. Weiter ging es mit dem Display Interface, um Status-Werte oder Debugging-Infos von neuen Funktionen anzeigen zu können. Das Display Interface genügt dem HD44780 Lcd Display Standard incl. Backlight Funktion. Letzteres nutze ich allerdings derzeit nicht, da ein 4x20-Display mit Backlight zu teuer war (Ich habe es allerdings mit einem 2x16-Display getestet).Als nächstes kam der Test der Funktionstaster. Alles lief nach Plan. Dann habe ich den DAC aufgebaut. Ich habe den DAC08 verwendet, benutze ihn allerdings lediglich mit 6 Bit Auflösung. Später wurde mir klar, daß ich damit auf meine 5-Oktaven Umgebung mit einem Halbton / Bit festgelegt bin, aber für ein MIDI2CV-Modul ist das ok. Außerdem wollte ich nicht alles neu machen (und ich hatte implizit meinen Quantizer :-)) Für ein einfaches Routing habe ich die entsprechenden Port-Pins möglichst direkt an den DAC angeschlossen, was allerdings dazu führte, daß ich in der Software eine Bit-Konvertierung machen muß. Danach habe ich die beiden ADCs getestet. Dazu schrieb ich eine kleine Funktion, welche die anstehenden Analogspannungen über den DAC wieder ausgab, und ich hatte meinen Quantizer :-) Als ich die Ausgangspannungen dann allerdings auf die Formant-VCOs gab, stellte ich fest, daß mein Formant-Keyboard wohl ein kleines CV-Problem in der oberen Hälfte des Keyboards haben muß, was ich ursprünglich durch VCO-Justierung kompensiert hatte, was aber jetzt nicht mehr paßte. Also mußte ich die VCOs erstmal rekalibirieren, hmpf! Zum Schluß habe ich mir dann MIDI I/O vorgeknöpft. Das war anfangs ziemlich schwierig und frustrierend, da sich MIDI und ich zum ersten Mal die Hand reichten. Erstmal schrieb ich den MIDIMON, um überhaupt zu sehen, ob was ankommt und wie das in HEX aussieht. Dann stöpselte ich meinen guten alten Elka EK22 rein und wurde von einer Flut von $FE-Bytes überrascht, was ich erstmal nicht einordnen konnte und für einen Fehler in der MIDI Hardware des UCVM hielt. Mit dem Oszi sah ich jedoch, daß diese Bytes tatsächlich vom EK22 kamen, und dann schaute ich erstmal in meine MIDI-Spezifikation, und tatsächlich: Das Byte hat eine Bedeutung, nämlich 'Active Sensing', was etwa 'Aktives rumfühlen' heißt. Aha, super, und was sollte darauf geantwortet werden? Sollte der Formant mit einem 'Hi, hier bin ich' antworten oder wollte der Elka mir damit irgend etwas sagen? Auf jeden Fall hat mir das meinen MIDIMON zugeschrotet, also raus damit per Software-Filter. Dann sah ich tatsächlich so etwas wie MIDI Messages, drei Bytes in Folge, welche mit einem $90 begannen, dann allerdings kam nur noch Müll. Ich machte ein paar Tests, Taste drücken, drei Byte, Taste loslassen, drei Byte, aber es kam nichts, was man hätte auswerten können. Aber halt: Die MIDI -Empfängerseite sendet ja kein Acknoledge nach einer empfangenen Message, also sendet der Sender alles in einem Stream. Ich hatte also wahrscheinlich ein Geschwindigkeitsproblem bzw. Empfangsregisterüberlauf. Ich überarbeitete die Emfangsroutine, und alles lief dann zufriedenstellend. GATE und CV UnitBeides arbeitet mit Analogspeicherung der vom DAC erzeugten Spannungen. Da nur ein DAC drin ist, habe ich die Spannungen mit zwei 4051 gemultiplext.Der erste 4051 tranferiert die stimmenabhängige GATE-Spannung (0 oder 5V) zu einem Kondensator, der die GATE-Spannung zwischenspeichert und über einen Spannungsfolger (1/4 TL064) und einen invertierenden Schmitt Trigger (1/6 40106) ausgibt. Da der Schmitt Trigger invertierend arbeitet, generiert die Software 0V für GATE ON und 5V für GATE OFF. Der zweite 4051 überträgt die stimmenabhängige CV zu einem Kondensator, dem ein Spannungsfolger (1/4 TL064) und ein simpler Portamento-Schaltkreis aus einem Portamento-Poti und einem weiteren Kondensator nachgeschaltet ist. Der Portamento-Stufe ist (genau!) ein Spannungsfolger und eine Spannungsaddierer-Stufe für den Nullabgleich und das Halbton-Feintuning nachgeschaltet. Dieser Stufe ist (unglaublich) ein weiterer Spannungsfolger zur Ausgabe nachgeschaltet. Der 200k-Trimmer zwischen Stufe 2 und 3 dient dem V/Oct abgleich. Das war nötig, um Bauteiletoleranzen auszugleichen.
| Schemas und Software Bitte Disclaimer am Seitenende beachten!Erfahrungen bei der Arbeit mit dem ModulFalls ich nochmal ein solches oder ähnliches Modul designen sollte, würde ich doch das eine oder andere anders aufziehen. Aber das ist ja nun mal die Aufgabe eines Experimental-Moduls, zu lernen, wie man bestimmte Funktionen realisiert oder wie man sie verbessern oder vereinfachen könnte.Zuerst: Alle Funktionen arbeiten ordnungsgemäß, aber um das hinzukriegen, mußte ich doch die eine oder andere Hardware-Designschwäche durch Softwaretricks ausgleichen. Ein paar kleine Änderungen an der Hardware würden die Softwarentwicklung doch vereinfachen. Was sich nicht ausgleichen ließ war die 6-Bit-Auflösung des DACs. Das ist die minimale Auflösung, um die Ansprüche von 5 Oktaven befriedigen zu können, aber das heißt auch, daß man das Ding für nichts anderes verwenden kann (Skalierbarer Quantizer oder Feintuning). Ich habe halt mit Leiternahnen gegeizt, aber das nächste Mal würde ich doch eher eine 8 oder 10 Bit Auflösung anstreben, um flexibler sein zu können. Außerdem ist der ADC des AT90S8535 in der von mir gewählten Beschaltung nicht besonders präzise. Konstante Spannungen werden mit einer Abweichung von +/- 0x020 von Meßvorgang zu Meßvorgang digitalisiert. Ich vermute, daß das an der Verbindung von Vref+ an 5V Spannungsversorgung und RefGround an der allg. Masse liegt. Auch hier war ich zu faul, Gedanken in eine präzise Referenzspannung zu investieren. Die Präzision reicht allerdings für meine Zwecke (bisher). Noch zu erwähnen daß es nicht so günstig ist, die RXD und TXD Pins noch für andere Zwecke als serielles I/O zu verwenden. In meiner Schaltung dienen sie noch dem Display-Bus, was eine erhöhte Disziplin beim Programmieren des Gerätemanagements erforderlich machte (Ich hatte ein paar nette Unfälle auf dem Datenbus, he he...)
| Erstes Modul: Das Control Module mit 4x20 Character Display, Reset und Function Keys, die beiden Analogeingänge, ISP Interface, MIDI IN OUT THRU und die acht GATE Outputs. ![]() ![]() Zweites Modul: Das Voicemodul mit den acht analogen Ausgängen. Jede Stufe verfügt über einen Feintuning- und Portamento-Regler. Control Board mit µController, ISP und MIDI Interface, Funktionstasten, analoge Eingänge, Display Interface und DAC. ![]() ![]() GATE Board mit GATE Bank und vier der acht CV Output Stufen. Voice Board mit dem Rest der analogen Ausgänge. ![]() ![]() PCB - Printed Circuit Burger PCBurger und Pasta ![]() ![]() Abschlußtest... |