Ein simpler 12-Bit Quantisierer

Wer kennt das nicht (noch Jemand ausser mir vielleicht…?): DIY-Sequenzer, 8 – 16 Potis. Die richtige Spannung einstellen um den richtigen Ton zu treffen gerät zum Geduldsspiel – es klingt immer irgendwie schief. Da lobe ich mir doch meinen KORG SQ-1, bei dem ich einfach eine Quantisierung einschalten kann (ich wähle in der Regel “Chromatic”) und die Welt ist wieder schön. Wäre klasse, wenn ich meine DIY-Sequenzer damit nachrüsten könnte. Eine kleine Machbarkeitstudie.

Ich hatte noch einen 12Bit-DAC (MCP4921) und einen 12Bit-ADC (MCP3201) in der Schublade. Dazu ein wenig Code in einen Arduino geladen (bei mir -> UNO), eine Referenzspannungsquelle LM4040 und fertig ist ein kleiner Quantisierer. Der Code ist ‘quick&dirty’: Eine Spannung am Eingang wird mit 12 Bit digitalisiert und so lange mit Werten aus einem Array verglichen, bis die kleinste Abweichung gefunden ist. Der gefundene Wert wird in den DAC geschrieben und steht am Ausgang als analoge Spannung zur Verfügung, um damit einen VCO zu steuern. Die Werte in der Tabelle entsprechen den genormten Spannungen der chromatische Skala von 12 Halbtonschritten, wobei 83 Millivolt einem Halbtonschitt entspricht. Durch entsprechende Anpassungen der Werte in der Tabelle sind natürlich auch andere Skalen denkbar: Dur, Moll, e.t.c.

Die Referenzspannungsquelle ist optional. Beide Vref-Eingänge können auch direkt mit der Versorgungsspannung (5 Volt) verbunden werden. Die Spannungsquelle LM4040 enthält zwei Ausgänge, die als Referenz sowohl für beide Konverter als auch für die Potis im Sequenzer dienen können. Ich verwende gern die 2.048 Volt-Variante, bei der die Tonhöhe zum Drehwinkel des Potis eine bessere Auflösung bietet, aber natürlich um den Preis von nur zwei Oktaven Tonumfang.

Ich habe im Test keine Fehler feststellen können und auch der Arduino UNO scheint ausreichend Timing-Reserven zu besitzen, um auch schnellen Spannungswechseln folgen zu können. Durch Optimierung des SPI-Timings konnte ich am ChipSelect-Pin eine Taktfrequenz größer 20 KHz messen. Der Code ist bewusst simpel gehalten. So sollte der “Fangbereich” eines jeden Tons eigentlich 42 Millivolt ober- und unterhalb der gemessenen Eingangsspannung liegen, was aber weitere Taktzyklen Umrechnungen zur Folge gehabt hätte. Bei mir wird einfach der nächstkleinere Wert aus der Tabelle gewählt. Letztlich nur eine Korrektur am VCO, damit die generelle Tonhöhe wieder stimmt.

Die hier abgebildete Schaltung ist nur zum Testen. Die Ein- und Ausgänge enthalten keinerlei Schutzfunktion gegen Überlastung oder Kurzschluss. Wer sie einsetzen will, sollte darauf achten, dass die Eingangsspannung die Referenzspannung nicht überschreitet und der Ausgang einen Schutzwiderstand erhält, die den DAC gegen versehentliches kurzschließen schützt.

Hinterlasse einen Kommentar

Du kannst diese HTML tags benutzen

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>