fritzler-avr.de
Library Archiv
AD9833 Library History

AD9833 Beschreibung
Library Dokumentation
Library Download v1.0

AD9833 Beschreibung

Der AD9833 ist ein DDS Signalgenerator IC und unterstützt Sinus, Dreieck sowie Rechteck. Von 0 bis 12,5MHz, die Auflösung der Frequenz ist 28bit, das sind bei 25MHz Systemtakt 0,1Hz!

Der Systemtakt wird im Phase Accumulator durch den Inhalt eines der Frequenzregister geteilt. Danach kann die Phase noch verschoben werden durch das aufsummieren eines der Phase Register. Dieses Signal wird an den Sinus ROM weitergegeben oder auch nicht um dann im DAC zu einem Analogsignal umgewandelt zu werden. Der Phase Accumulator zählt hoch und runter, das ermöglicht einen kleineren ROM und die Erzeugung eines Dreiecksignals beim Umgehen des ROM. Der DAC kann abgeschalten werden um ein Rechtecksignal zu erzeugen, immer wenn das MSB 1 ist, wird ein HIGH Pegel ausgegeben. Der Takt kann auch durch 2 geteilt werden.

So sind die Statusbits mit der Hardware verknüpft, in der Tabelle steht wie diese für ein bestimmtes Ausgangssignal im Statusregister gesetzt werden müssen.

Es gibt 5 Register zum steuern des AD9833. Um das Control Register zu beschreiben müssen bit 15/14 vom 16 bit Datenwort 0 sein, danach folgt der Registerinhalt. Zum initialisieren muss der Phase Accumulator resetet werden, dazu das SLEEP1 und RESET bit kurz setzen. Der Inhalt der SELECT bits entscheidet welches der Register ausgelesen wird zum erzeugen des Signals.

Die Frequenzregister sind auf 2 unterschiedliche Arten zu beschreiben, die Adressierung ist jedoch gleich. Das Freqenzregister ist 28bit breit, daher müssen 2 Wörter inkl. Adresserung übertragen werden. In Variante 1 werden beide Wörter direkt hintereinander geschrieben, dazu muss im Controlregister B28 gesetzt sein. Dabei enthält das erste Wort die LSB des Frequenzregisters und das danach die MSB. In Variante 2 (B28 nicht gesetzt), können die LSB und MSB getrennt geschrieben werden. Damit der AD9833 weis welche Bits gesetzt werden, wird das HLB Bit im Controlregister benötigt (HLB = 1 -> MSB).
Der Inhalt des Registers wird berechnet mit:
FREQREGISTER = (Ausgangsfrequenz/DDSIC_Frequenz) * 2^28
Die DDSIC_Freqenz ist hierbei MCLK an Pin5 des AD9833.

Die Phasenregister sind weniger spektakulär, die Adressen stehen in der Tabelle.
Der Inhalt des Registers wird berechnet mit:
PHASEREGISTER = (Phasenverschiebung*2^12)/(2*pi)
Die Phasenverschiebung reicht von 0 bis 2*pi.

Die Registerinhalte werden über SPI übertragen, die Timings sind hierbei weniger kritisch. Der AD9833 verträgt eh mehr, als der AVR liefern kann. FSYNC ist hierbei der Chipselect und LOW aktiv. Das MSB muss zuerst gesendet werden, das Bit wird bei fallender Taktflanke übernommen. Dies entspricht dem SPI Modus 2.

Library Dokumentation

  1. /** \brief initialisiert SPI sowie AD9833 und ruft DDS_off auf
  2. */
  3. void DDS_init(void);
  4.  
  5. /** \brief resettet den Zähler des AD9833 und schaltet ihn ab, DAC getrennt
  6.  
  7.    Der AD9833 wird resetet, danach liegt kein Ausgangssignal mehr an, die Inhalte der Freq- und Phasenregister bleiben erhalten.
  8. */
  9. void DDS_off(void);
  10.  
  11. /** \brief schaltet die Signalform des AD9833 um
  12.  
  13.    \param signal Die gewünschte Signalform: AD_SINUS, AD_DREIECK, AD_RECHTECK, AD_RECHTECK2, AD_AUS
  14. */
  15. void DDS_signal (uint8_t signal);
  16.  
  17. /** \brief Auswahl des AD9833 Registers, welches für die Frequenz/Phase des Ausgangssignals zuständig ist
  18.  
  19.    \param reg Das gewünschte Register: AD_FREQ0, AD_FREQ1, AD_PHASE0, AD_PHASE1
  20. */
  21. void DDS_reg(uint8_t reg);
  22.  
  23. /** \brief stellt den AD9833 auf die gewünschte Freqenz in Hz ein
  24.  
  25.    der Wert wird in das angegebene Register geschrieben (AD_FREQ0, AD_FREQ1)
  26.  
  27.    \param frequenz Frequenz in Hz
  28.    \param reg     Das gewünschte Register: AD_FREQ0, AD_FREQ1
  29. */
  30. void DDS_freq(uint32_t frequenz, uint8_t reg);
  31.  
  32. /** \brief stellt den AD9833 auf die gewünschte Phase ein
  33.  
  34.    der Wert wird in das angegebene Register geschrieben (AD_PHASE0, AD_PHASE1)
  35.    
  36.    \param phase   Die gewünschte Phase von 0 bis 4096, entspricht 0 bis 2*PI
  37.    \param reg     Das gewünschte Register: AD_PHASE0, AD_PHASE1
  38. */
  39. void DDS_phase(uint16_t phase, uint8_t reg);
  40.  
  41.  

AD9833 Library Version 1.0

Eine von mir geschriebene Library zum ansteuern des AD9833 DDS IC. Behinhaltet Prozeduren zum Einstellen der Frequenz, Phase und dem Signal. Die Frequenz ist einstellbar von 1Hz bis 12,5MHz. Die Phase ist einstellbar von 0 bis 2pi. Ausgangssignale: Sinus, Dreieck, Rechteck. Es können alle Register des IC beschrieben und ausgewählt werden.

Die Library benutzt den Hardware SPI des AVR, eine Version mit freier Wahl der Pins und Software SPI wird nachgereicht. Es kann natürlich auch eine eigene SPI Schreibfunktion (zB. mit FIFO Puffer) verwendet werden, dazu ist nur eine Anpassung von DDS_write nötig.

Die Frequenz des AD9833 berechnet die Library mit der Formel:
FREQREGISTER = (Ausgangsfrequenz/DDSIC_Frequenz) * 2^28
Die DDSIC_Freqenz ist hierbei MCLK an Pin5 des AD9833.

Datenblatt vom AD9833
DOWNLOAD

AD9833 Library Version 1.1

Wie v1.0, jedoch mit nachgereichtem Software SPI.
Per define kann der AD9833 an jedem Port des AVR betrieben werden, jedoch müssen die SPI Pins am selben Port sein.

Datenblatt vom AD9833
DOWNLOAD

Ansonsten noch viel Spaß beim löten:

WebSVN lädt Loading confirmation image

Home - Librarys

Kontakt - Haftungsausschluss - Impressum