AD9850 Steuerwort,Berechnung richtig?

OP #3421750
Lesenswert?

Leider habe ich kein Beispiel gefunden,in dem ich den meine Berechnung 
überprüfen kann. Ich möchte die Berechnung des Steuerwortes an einem 
Beispiel testen, bevor ich den Schaltkreis anschließe .
Ist bei einen Quarz von 125 MHz das Steuerwort:
LSB: 1010 0001 1101 1100 1100 1100 1100 1100 MSB

Anders herum in HEX
0x3333 3b85
für 25,000062 MHz richtig?
#3423955
Lesenswert?

Hallo zusammen.

@ Lutz:

Warum nutzt du nicht den DDS-Rechner von AD?

http://designtools.analog.com/dtDDSWeb/dtDDSMain.aspx

Der erzeugt dir das Steuerwort in Hex, Bin und Dez; je nachdem,
wie es dir am Liebsten ist.

0x3333 3b85 ist richtig bis auf die letzte Stelle:
ADISimDDS erzeugt ...86.


Bei der Programmierung hat mir die Seite von DJ7OO sehr geholfen.

http://www.kh-gps.de/simple-dds.htm

Da gibt es auch einen Bascom-Code, der auf einem Code von
JA9TTT beruht. Der Link ist in der Linkliste angegeben.

Bestechend einfach und - zumindest für mich - endlich mal verständlich.
Wenn man es dann erst mal begriffen hat, ist es gar nicht so
schwierig.

73
Wilhelm
OP #3426089
Lesenswert?

Ich bin gerade dabei mich in die COOCOx Umgebung mit dem stm32F429I 
DISCO
einzuarbeiten. Als Opfer habe ich mit den AD9850 ausgesucht.
Noch ist das Projekt nicht im lauffähigen Zustand, das heißt, der 
AD9850 gibt noch keine Frequenz von sich.

Ich kann auf den Bildschirm eine Frequenz eingeben, die Werte werden 
richtig berechnet und an den Port ausgegeben und kommen auf der 
Leiterplatte des AD9850 an.
in der Funktion TD_Test wird die Frequenz eingegeben,   Frequenz_LC
in AD9850_ticksCalculate wird das Steuerwort berechnet. w_AD9850[]
in AD985_enable  die Ports initialisiert.
in S_AD9850init wird die Bitfolge zum Programmieren in 
S_AD9850[][]abgelegt.

void  AD9850_ticksSend_D(int AD9850_ticks) ist für eine Debugausgabe an 
LEDs vorgesehen

Und mit
void  AD9850_ticksSend_R(int AD9850_ticks) soll die richtige Ausgabe 
erfolgen.
Mit Beginn eines jeden Taktes werden die neuen Daten ausgegeben.
in der Hälfte der Zeit der Daten kommt eine 0-1 Flanke des Taktes.


Deshalb werde  ich als nächstes etwas anderes versuchen:
Im Beitrag
www.mikrocontroller.net/attachment/6642/Programmcode_DDS.doc
//* Funktion zur Übertragung einer Frequenz in den DDS-Chip */

wurde ein Kompletter Taktimpuls während eines gültigen Datenwertes 
gesendet.

Dafür werde ich aber jetzt die System Ticks nutzen, mit Warteschleifen 
war es nur eine Behelfslösung.
Ist also nichts geheimnissvolles dabei.
Angehängte Dateien:
Persönliche Seite #3435364
Lesenswert?

Hallo Lutz,
hast Du Dein Problem gelöst?
Falls nicht, hier mein (getesteter) Code für einen ARM3- Controller 
PSoC3 bzw. PSoC5.

Mit AD9850_Init() wird der AD9850 initialisiert,
mit SetFrequency(double frequenz) wird die Frequenz eingestellt, 
Phase=0;.
Die Zeitschleife muss angepasst werden...
Angehängte Dateien:
OP #3435779
Lesenswert?

Wolfgang, danke für den Code,

leider geht dieser Code bei mir auch nicht. Ich glaube, ich habe  den 
AD9850 zuschossen.
Die Ausgangspegel des AD9850 ändern sich nie, obwohl  die 
Programmiersignale anliegen. Wenigstens die analogen Ausgänge müssten 
sich bemerkbar ändern, auch wenn die Frequenz sehr klein ist. Ich habe 
mir jetzt einen neuen Schaltkreis bestellt, und hoffe mit dem geht es 
dann.

Gruß Lutz

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren