AD Konvertierung

Die analogen Messungen des Phototransistors muessen in digitale Signale umgewandelt werden, damit der Mikrocontroller sie weiterverarbeiten kann (zB um dem eine Frequenz der Piezos zuzuordnen)
Der ADWandler liefert optimale Ergebnisse bei einer Frequenz zwischen 50kHz und 200kHz(→Datenblatt 23.4).
Der Controller laeuft in unserer Schaltung bei 16MHz. Fuer den ADWandler wird diese Frequenz durch 128 geteilt (maximaler Teiler). Damit laeuft der ADWandler bei 16MHz/128=125kHz.
Eine Konvertierung dauert 13 Zyklen (→ Datenblatt), damit ergibt sich pro Messung eine Verarbeiungsdauer von 104µs.
Hierbei geht man von einer sofortigen Reaktion des Phototransistors aus.

Mittelung

Zum glaetten des Rauschens des ADWandlers.

PWM

Die Erzeugung der Töne erfolgt mittels eines PWM-Verfahrens. Es werden Rechtecke mit variabler Frequenz ausgegeben um damit eine dreieckige Wellenform zu erzeugen (siehe http://www.nerdkits.com/videos/theremin_with_ir_distance_sensor/).
Die Frequenz des Dreiecks lässt sich folgendermassen berechnen:

fDreieck := fBasis/nSchritte

Wobei nSchritte die Anzahl der Schritte ist, die gebraucht wird um ein Dreieck komplett abzubilden. Dazu teilen wir einfach 65535 durch die Schrittweite (welche durch die Position der linken Hand festgelegt wird) und multiplizieren das Ergebnis mit 2 (wir müssen von 0 bis 65535 und wieder zurück bis 0 zählen).

fBasis ist die Basisfrequenz der PWM-Rechtecke. Diese berechnet sich wie folgt:

fBasis := fclk/N*(1 + TOP) (→ Datenblatt 15.9.3 Fast PWM Mode)

Wir verwenden eine CPU-Frequenz (fclk) von 16MHz, einen Prescaler (N) von 1 und ein TOP-Value von 255. Damit ergibt sich eine Basisfrequenz von 62500Hz (16000000Hz/256).

Um z.B. den Ton a zu erzeugen (440Hz) brauchen wir also eine Schrittweite von 923:

  • 65535/923*2 = 142 Schritte
  • 62500Hz/142 = 440Hz
  • avrtheremin/innereien.txt
  • Last modified: 2021/04/18 12:35
  • (external edit)