NCO steht für numerically controlled oscillator; die Modi lassen sich als single-ended und differential aufrufen. Im single-ended NCO-Modus wird an einen Ausgangspin eine Rechteckspannung gelegt. Bleibt clkfreq konstant, dann wird diese Rechteckspannung „nummerisch gesteuert“ über einen im FRQ-Register eines Kerns abgelegten Zahlenwert.
1 - NCO Modus single-ended
Im single-ended NCO-Modus wird das Zählermodul
Ist Bit 31 des PHS-Registers identisch 1, liegt an dem von ihm gesteuerten I/O Pin ein HIGH-Signal, bei 0 entsprechend ein LOW-Signal.
Bleibt clkfreq unverändert konstant, bestimmt die Addition vom FRQ- zum PHS-Registerwert die Schwingungsrate. Die wiederum bestimmt die Frequenz der Rechteckschwingung am Ausgangspin.
Bei vorgegebener Takt- und gewünschter NCO-Frequenz, lässt sich der FRQ-Wert über die folgende Gleichung berechnen:
Auflösen der Gleichung nco_01 nach PHS_Bit31_Frequenz ergibt
Über Gleichung nco_01 lässt sich jetzt der Zahlenwert für das FRQ-Register berechnen, wenn man zum Beispiel eine Frequenz
am Ausgangspin abnehmen möchte. Einsetzen der Werte ergibt
Umgekehrt kann über Gleichung nco_02 auch aus dem im FRQ-Register abgelegten Wert auf die Frequenz am Ausgangspin geschlossen werden.
Übung 1 - Schwingungsfrequenz erzeugen im NCO-single-ended Modus
Mit dem folgenden kleinen Programm NCO_Modus_singleEnded.spin wird Berechnung (1) überprüft. FRQA = 53687 sollte am festgelegten Ausgangspin des Propeller Chips eine Schwingung mit einer Frequenz von
erzeugen.
Das Programm NCO_Modus_singleEnded.spin
Das Ausgangssignal wurde mit einem USB-Oszilloskop aufgenommen und ist in Abb. 1 dargestellt.
Wird der Modus auf % 00101 (NCO-differential) geändert, ergibt sich Abb. 2b. Die blaue Kurve ist das APIN-, die rote das BPIN-Ausgangssignal. Das entsprechende SPIN-Programm zeigt Abb. 2a.
Hinweis: Anwendungen, die schnelle Änderungen an FRQA erfordern, wie z. B. bei der Audioerstellung, sollten in Assembler geschrieben werden, da Spin die Inhalte des FRQA-Register nicht schnell genug für sich schnell ändernde Frequenzen vornehmen kann.
2 - Konfigurieren eines Zählermoduls für den NCO-Modus
Der CTRMODE für den NCO Modus ist Abb. 3 zu entnehmen. Wie bereits erwähnt, verfügt der NCO-Modus über die Optionen Single-Ended- und Differential.
Bei den DUTY-Modi hat das Übertragsflag des Phasenaddierers (Bit
32 des PHS-Registers) den Zustand des I / O-Pins bestimmt. Das führt zu
einem Tastverhältnis, das mit dem vom FRQ-Register gespeicherten Wert variiert.
Bei den NCO-Modi steuert Bit 31 des PHS-Registers den I/ O-Pin. Dies führt zu einer Rechteckschwingung, deren Frequenz durch den im FRQ-Register gespeicherten Wert bestimmt wird.
Die Schritte zum Konfigurieren des Zählermoduls für die NCO-Modi ähneln den Schritten für die DUTY-Modi.
Die Bitfelder CTRMODE, APIN (und
BPIN im Differentialmodus) des CTR-Registers müssen gesetzt
werden. Der im FRQ-Register abgelegte Wert legt die NCO-Frequenz fest. Die vom Zählermodul
verwendeten I/ O-Pins müssen auf Ausgabe gesetzt werden.
Die drei Schritte zum Konfigurieren eines Zählermoduls für den NCO-Modus:
Zu Schritt 1
Ein Beispiel, das Zähler A in den Modus NCO Single-Ended setzt, wobei das Signal an P27 übertragen wird.
Zu Schritt 2
Weise dem FRQA / B-Register einen Wert zu, so dass sich eine
Rechteckschwingung ergibt, die der Frequenz der Note C7 entspricht.:
Zu Schritt 3
Stelle I/ O-Pin P27 auf Ausgang:
Übung 2 - Der Ton C7 als Rechteckschwingung
Mit dem bereits erworbenen Wissen sollte es jetzt möglich sein, den Ton C7 (7. Oktave über dem Grundton C) als Rechteckschwingung über einen Piezo-Lautsprecher auszugeben.
Übung 2 - Der Ton C7 als Rechteckschwingung | |
Material |
|
Aufgaben |
|
Schaltungsaufbau
Das Programm Rechteckschwingung.spin
3 - Signalübertragung stoppen und fortzusetzen
1) Die Richtung des I/O-Pins auf Eingang ändern. In Rechteckschwingung.spin kann dies entweder mit
erfolgen. Neu gestartet wird das Signal entweder mit
2) Das Zählermodul stoppen, indem die CTR-Bits 30..26 gelöscht werden. In Rechteckschwingung.spin kann dies mit
erreicht werden. Eine andere Möglichkeit besteht darin, alle Bits im CTRMODE-Bitfeld des ctra-Registers mit
auf Null zu setzen. In beiden Fällen ist der I/O-Pin immer noch Ausgang, und sein Ausgangszustand kann LOW oder HIGH sein.
3) FRQ auf Null setzen und damit die Addition zum PHS-Register neutralisieren. In Rechteckschwingung.spin kann dies entweder mit
erfolgen . Der Zähler würde in diesem Fall weiterlaufen, aber da er mit jedem Takt den Wert zu phsa um Null erhöht, würde sich Bit 31 von phsa nicht ändern, sodass auch der I/O-Pin nicht mehr umschaltet.
Wie beim Stoppen eines Zählers würde der I/O-Pin den Ausgangszustand halten, den er zum Zeitpunkt des Löschens von frqa hatte.
Übung 3 - Ein Staccato-Signal erzeugen
Das folgende Staccato-Objekt schaltet den I/O-Pin P8 zwischen Ausgang und Eingang um, damit der 2,093-kHz-Ton 1 s lang immer wieder gestartet und gestoppt wird. Es verwendet Ansatz (1) zum Stoppen und Neustarten des Signals.
Übung 3 - Ein Staccato-Signal erzeugen | |
Material |
|
Aufgaben |
|
Das Programm Staccato.spin
Die Überprüfung der Ausgabewerte Frequenz und Pausenzeit mit Hilfe eines USB-Oszilloskops zeigen die beiden folgenden Oszillogramme.
Übung 4 - Spielen nach Noten
In dieser Übung wird der Schaltungsaufbau aus Übung 2 und 3 verwendet.
KenntJiAllDatNijeLeid.spin ist ein Übungsbeispiel, in dem das Zählermodul zum Spielen einer Reihe von Noten verwendet wird. Da es in der Zwischenzeit für nichts anderes benötigt wird, wird der I/O-Pin P8, der das Rechtecksignal an den Piezospeaker sendet, während der ¼-Stopps zwischen den Noten auf Eingang gesetzt. Bit 31 des phsa-Registers schaltet während des Viertelstopps immer noch mit einer bestimmten Frequenz um, aber die Pseudo-Note wird nicht abgespielt.
Die tonfrequenzkompatiblen FRQA-Registerwerte (umgerechnete
Notenwerte für eine Taktfrequenz von 80 MHz) werden in einem DAT-Block abgelegt.
Das Programm KenntJiAllDatNijeLeid.spin
Wie arbeitet das Programm?
Die Variable index in der ersten REPEAT-Schleife durchläuft die Werte 0 bis 5 und ruft damit die ersten sechs Noten aus dem DAT-Block ab, kopiert sie in das FRQA-Register und erzeugt am Ausgangspin P8 einen Ton.
Die nachfolgende A6-Note hat den Längenwert 0,5. In der zweiten REPEAT-Schleife wird deshalb die Pausenzeit verdoppelt.
Die dritte Schleife arbeitet wie die erste Schleife mit den Indexwerten von 7 bis 8. Alle gespielten Noten haben hier den gleichen Längenwert. Die letzte gespielte Note mit dem Indexwert 9 hat wiederum den doppelten Längenwert wie die vorher gespielten Noten, deshalb wird hier die Pausenzeit verdoppelt.
Ein Beispiel für den Zähler-NCO-Modus mit Betrachtung von Bit 3 anstelle von Bit 31
Im NCO-Modus wird der Ausgangszustand des I/O-Pins durch Bit 31 des
PHS-Registers gesteuert. Die Ein / Aus-Frequenz für jedes Bit in einer Variablen oder einem Register kann unter Verwendung von nco_03 berechnet werden, unter der Annahme, dass ein konstanter Wert wiederholt mit einer bestimmten Rate hinzugefügt wird:
Bit 3 Beispiel
Lösung
Gegeben sind die Größen: Wert := 4, Rate := 8 Hz, Bit := 3
Gesucht ist die Frequenz fAusgang.
Einsetzen der gegebenen Größen in Gleichung (2) ergibt eine Frequenz von