Formant Digitale Keyboard Erweiterung

Da mich der (alte) Gedanke an eine digitale Erweiterung meines Formants noch immer sehr interessierte, habe ich mit einer Erweiterung für das Keyboards begonnen. Diese Erweiterung "kann" (für sich allein) nicht so besonders viel: Sie sendet einfach nur eine digitale Information auf einem seriellen Bus, wenn eine Taste betätigt oder losgelassen wird. Außerdem besteht die (abschaltbare) Möglichkeit, die Keyboard-Spannung ("KBV") durch dieses Zusatzmodul erzeugen zu lassen, anstatt mit Hilfe des (ursprünglich vorgesehenen) Spannungteilers. Eine Modifikation des "Keyboard-Interface"s ist nicht notwendig, das Zusatz-Modul wird mit Hilfe eines DB25-Steckers am Keyboard angeschlossen, und die "originale Funtionalität" des Keyboards lässt sich mit Hilfe eines entsprechenden Kurzschlußsteckers jederzeit wieder herstellen.

Modifikation der Tastenkontakt-Schaltung

Modifizierte Keyboard-Schaltung
Da das Zusatz-Modul jegliche Betätigung von Tasten (auch mehrere gleichzeitig) erkennen soll, musste ich die "GATE"-Kontakte noch einmal neu verschalten, und eine Handvoll Dioden in den schmalen Platinenstreifen an den Tastaturkontakten einfügen. Damit ich den Formant auch noch immer im "Originalmodus" betreiben kann, habe ich alle Signale auf eine DB25-Buchse geführt, wo sich anstatt des Erweiterungs-Moduls auch ein entsprechender Stecker mit Drahtbrücken aufstecken lässt, der die originale Funktionsweise wieder herstellt. Die Beschaltung diese Kurzschußsteckers ist auf der linken Seite des Schaltplans durch blaue Linien dargestellt. Um auch die originale Beschaltung des Keyboard-Steckers (ohne das Kommunikations-Signal) wiederherzustellen, ist noch eine weitere Drahtbrücke zwischen den Pins 7 und 18 des DB25-Steckers hinzuzufügen.
Kurzschlußstecker

Die Schaltung des Zusatzmoduls

Die Schaltung basiert auf dem PIC12F863, einem meiner beliebten Mikrocontroller "für kleine Steuerungen". Um den aktuellen Zustand der Tasten zu ermitteln, wird ein 12Bit-Zähler (74HC4040), ein 3zu8-Decoder (74LS138), und ein 8Bit-Multiplexer (74LS151) verwendet. Von dem Zähler werden 3 Bit verwendet, um den Decoder anzusteuern, der eine der 8 Gruppen von Tastenkontakten zur Zustandsermittlung auswählt. Weitere 3 Bit des Zählers steuern den Multiplexer, der den Zustand jeweils einer der 4 oder 5 Tasten pro Gruppe auf einen Eingang des Mikrocontrollers legt. Somit kann der Zustand aller 37 Tasten des Keyboards durch 64 Schritte des Zählers ausgelesen werden. Die anscheinend überflüssigen 27 Schritte des Zählers dienen der Synchronisation des Zählerstandes mit den abgefragten Tasten, und sind mit Duplikaten von Tastenzuständen oder festen Zuständen belegt, denn ein Reset des Zählers ist aus Mangel an Portpins des Mikrocontrollers nicht vorgesehen/vorhanden. Außerdem ergibt sich durch diese Vorgehensweise die Möglichkeit, das Modul u.U. noch mit bis zu drei weiteren Tasten für Sonderfunktionen zu erweitern. Die restlichen drei Portpins des Mikrocontrollers, die nicht zum Auslesen des Tastaturzustandes verwendet werden, dienen der Erzeugung der "KBV"-Spannung mittels Pulsweitenmodulation, der Generierung des "GATE"-Signals, und der Kommunikation mit anderen Modulen. Die Erzeugung der "KBV" erfolgt mittels Pulsweitenmodulation mit einer Frequenz von ca.7.8kHz (→ 128µs) und 10Bit Auflösung (→ 1024 Schritte). Bei einer Betriebsspannung von 5V und 1V/Oktave ergibt sich damit eine Auflösung/Genauigkeit von ca. 5mV bzw. 16.67 Schritten pro Halbton (→ 6 Cent), was für ein "normales" Gehör noch ausreichen sollte, ein geübten Musiker könnte das jedoch heraushören...
Schaltplan des Moduls

Das Layout und der Aufbau

Layout des Moduls
Da die Schaltung nur recht wenige lokale Verbindungen besitzt, habe ich mir die Mühe erspart, eine Leiterplatte dafür herzustellen, und den Aufbau auf einer Lochrasterplatte vorgenommen. Die drei roten Leiterbahnen habe ich als als isolierte Drähte ausgeführt, die grünen als "mit Lötzinn verbundene Lötpunkte". Die meisten Leitungen führen sowieso zum DB25-Stecker oder dem Schalter und sind mittels Litze realisiert. Die gesamte Schaltung passt in ein zum Keyboard-Kasten passendes Gehäuse, wobei der DB25-Stecker auf einem Aluminium-Winkel montiert ist, was ein einfaches "Anstecken" des Moduls am Keyboard ermöglicht. Der Schalter auf der Oberseite erlaubt die Umschaltung der 1V/Oktave-Steuerspannung (KBV) von "original" (Spannungsteiler) auf "digital erzeugt".
Aufbau des Modulss

Modulss an Keyboard gesteckt

Die Firmware

Die Firmware liest den aktuellen Zustand sämtlicher Tasten mit Hilfe des Zählers, des "Gruppenselektors", und des Decoders innerhalb von <320µs in ein Bitarray von 8 Bytes (64Bits) ein. Da aufgrund der Beschaltung der Eingänge des Decoders einige Bitmuster doppelt vohanden sind, und einige Bits einen festen Wert haben, lässt sich recht schnell und einfach herausfinden, ob der Zähler synchon mit der Nummerierung der Tasten ist (→ Es existiert kein Reset des Zählers). Ist dieses nicht der Fall, werden die eingelesenen Bits verschoben, und der Zählerstand mit Taktimpulsen verändert, bis das Bitmuster "passt". Dieser Vorgang dauert maximal 800µs, und sollte nur beim Start des Programms auftreten. Im "Normalbetrieb" wird innerhalb von <15µs festgestellt, daß die eingelesenen Daten korrekt sind, und die "tastenrelevanten" Bits mit Hilfe dreier weiterer Bitarrays von je 5 Bytes (40Bits) "entprellt", und geänderten Tastenzustände ausgefiltert (ca. 90µs). Danach wird die tiefste gedrückte Taste ermittelt (max. 50µs). Ist mindestens eine Taste betätigt, wird das "GATE"-Signal gesetzt, und der zur Taste gehörige PWM- (PulsWeitenModulation) Wert berechnet und gesetzt (ca. 100µs). Aus den angegebenen Zeiten ist zu ersehen, daß die gesamte Behandlung des Keyboards in weniger als einer Millisekunde erledigt wird, und somit mehr als eintausend Mal pro Sekunde erfolgen kann, was für eine ausreichend geringe Reaktionszeit auf eine Tastenbetätigung genügen sollte. Wird eine Taste betätigt oder losgelassen, erkennt die Firmware diesen Umstand anhand der Bitarrays, und sendet ein einzelnes, entsprechend codiertes Byte auf dem angeschlossenen Kommunikationsbus. Die Codierung des Bytes ist aus der nebenstehenden Tabelle abzulesen.
BitFunktion
7Immer 1 (Kennzeichen)
61→ Taste betätigt
0→ Taste losgelassen
5:0Tastennummer (0→C, 36→c")

Der "Stimm-Modus"

Stimmen des Keyboards
Um die 1V/Oktave-Charakteristik zu erzeugen, verwendet die Firmware zwei "Stützwerte" für die PWM-Werte der Töne "C" und "g'#" (Abstand = 32 Halbtöne), und berechnet daraus die PWM-Werte für alle anderen Tasten. Diese Stützwerte sind im EEPROM des Controllers abgelegt, und können durch einen "Stimm-Modus" verändert werden. Damit dieser Modus nicht versehentlich aktiviert wird, müssen die Tasten "C" und "c''" (+ein oder zwei weitere Tasten) gleichzeitig betätigt werden, was bei "normaler" Nutzung sehr wahrscheinlich nicht vorkommt. Das nebenstehende Bild zeigt meine Methode, um das (ohne Einbeziehung von Füßen oder Nase) zu bewerkstelligen. Die "Stimmtasten" sind:

TasteFunktion
dUnteren Stützwert einen Schritt (ca. 1/23 Halbton → 4.3Cent) tiefer
eUnteren Stützwert einen Schritt höher
fOberen Stützwert einen Schritt tiefer
gOberen Stützwert einen Schritt höher
d# + f#Aktuelle Stützwerte im EEPROM speichern


Meine Methode zum Stimmen:
1.
KBV-Schalter (an diesem Zusatzmodul) auf "Original/Analog".
2.
Taste "C" betätigen, und einen VCO auf "C" (65.41Hz) einstellen.
3.
KBV-Schalter auf "Digital".
4.
Taste "c''" mit Gewicht belasten, Taste "C" gedrückt halten, und mit Hilfe der Tasten "d" und "e" den VCO möglichst genau auf "C" (65.41Hz) stimmen → Unteren Stützwert einstellen.
5.
Taste "C" loslassen, prüfen, ob der VCO nun auf "c''" (523.25Hz) schwingt. Falls nicht, Taste "C" wieder drücken und Taste "f" oder "g" kurz betätigen. Wiederholen, bis der VCO möglichst nahe bei "c''" schwingt → Oberen Stützwert einstellen.
6.
Soll die so eingestellte Stimmung auch nach dem Aussschalten des Formant erhalten bleiben, Taste "C" gedrückt halten, und kurz die Tasten "d#" und "f#" gleichzeitig betätigen → Stützwerte im EEPROM des Mikrocontroller speichern.
7.
Gewicht von Taste "c''" entfernen.

Das "Material"

Das hier angebotene Material unterliegt der Creative Commons Lizenz "CC BY-NC-SA".
fo_keyb_dec_V0.2_kicad.tgz Archiv mit allen benötigten KiCad-Dateien.
fo_keyb_dec_V0.1_src.tgz Archiv mit Quellcode und Hexcode für den Mikrocontroller.

Hinweise für Nachbauwillige

Wer diese Konstruktion nachbauen möchte, sollte über etwas Kenntnisse der Funktionsweise des Formant-Synthesizer, des Aufbaus elektronischer Schaltungen, und im Umgang mit PIC-Mikrocontrollern verfügen. Es handelt sich hierbei nicht um einen Bausatz, sondern eher um eine Anregung für eigene Konstruktionen. Alles, was ich dazu anbieten kann, befindet sich auf dieser Seite, d.h. Nachfragen nach fertigen Modulen, Bausätzen, oder bereits programmierten Microcontrollern sind zwecklos → Ich "produziere" ausschliesslich für den Eigenbedarf.

 


Für die Funktionalität und Nachbausicherheit dieser Konstruktion kann ich keinerlei Verantwortung übernehmen. Der Schaltplan, das Layout, und PIC-Quellcode unterliegen der Creative Commons Lizenz "CC BY-NC-SA" Eine kommerzielle Verwertung dieses Materials (oder auch von Teilen davon) ist nur mit meiner ausdrücklichen Genehmigung zulässig.


Startseite   Hardware   Formant   Rechtliches   Kontakt

HTML und Design: DK1RM erstellt: 9.9.2019 - letzte Änderung: 20.10.2019