Forum: HF, Funk und Felder AD9850 Steuerwort,Berechnung richtig?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Lutz H. (luhe)


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?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Habe deine Zahlen mal in die Formeln meines Beispielcodes eingetragen,
und komme auch auf 0x33333b85.

Wenn du willst, kann ich dir den Quellcode auch schicken, ist aber
nicht gerade so druckreif, dass ich ihn irgendwo veröffentlichen
würde.

von Lutz H. (luhe)


Lesenswert?

Vielen Dank, ich werde in den nächsten Tagen das Board anschließen.
wenn alles spielt, stelle ich das Projekt hier ein.
Ich habe meinen Code auch mehr zum Lernen geschrieben.

von Wilhelm S. (wilhelmdk4tj)


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

von Lutz H. (luhe)


Lesenswert?

Danke für die Links, hatte übersehen das das Reset vom AD9850 auf Low 
muss.
Ist jetzt wichtig, da ich die Platinen zusammenstecken will.

von Wilhelm S. (wilhelmdk4tj)


Lesenswert?

@ Lutz,

was werkelst du da so geheimnisvolles..?

73
Wilhelm

von Lutz H. (luhe)


Angehängte Dateien:

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.

von DH1AKF W. (wolfgang_kiefer) Benutzerseite


Angehängte Dateien:

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...

von Lutz H. (luhe)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

lutz h. schrieb:
> Ich glaube, ich habe  den AD9850 zuschossen.

Bist du dir denn sicher, dass die Schaltung OK ist?  Insbesondere,
hast du eine brauchbare Last dran?  Die Analogausgänge treiben ja
einen Strom gegen Masse, da muss ein Widerstand in den Gleichstrompfad,
an dem die Ausgangsspannung abfällt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.