Beispielprogramm AD9833 (DDS) mit atmega8

Gast #241067
Lesenswert?

Hi,
da ich fast eine halbe Ewigkeit gebraucht habe, den AD9833 ans laufen
zu bekommen. Möchte ich diesen Zeitaufwand den anderen ersparen.
Ich habe mal ein kleines Beispielprogramm geschrieben.
Dieses demonstiert wie man mit dem Ad9833 richtig kommuniziert.


Gruß,
Daniel
Angehängte Dateien:
Gast #241068
Lesenswert?

Hallo

ich arbeite auch mit einem DDS-Chip. Allerdings mit dem AD9835. Der
macht nur ne höhere Frequenz ansonsten is er gleich. Anbei mein
Kommunikationsbeispiel laut AN-621. Das Problem, welches ich habe ist
folgendes:
Die Ausgabefrequenz des DDS errechnet sich :
f_out = (32Bit Frequenzwort / 0xFFFFFFFF ) * DDS-Takt
Wie schaffe ich es f_out, also meine wirkliche Frequenz, auch auf dem
Display darzustellen. Hierzu ,muß ich die oben genannte Formel in
Assembler umsetzten. Leider kommen da Kommastellen vor wenn ich das
Frequenzwort umrechnen will. Die Routine um ein 32Bit Binärwort in
ASCII umrzuwandeln habe ich schon. Mir gent es ur darum, wie ich bei
einem DDS-Takt von 24MHz vom Frequenzwort auf den Takt_out komme. Hat
mir hierzu jemand eine Idee?

Gruß
Steffen
Angehängte Dateien:
Gast #241070
Lesenswert?

Danke Jens. Das mit dem 0xFFFFFFFF stand so in der App-Note AN621, zu
2^32 unterscheidet es sich nur in eriner Stelle. Richtig, DDS-Takt/2^32
ist eine Konstante. Aber leider ist auch die wieder mit Komma behaftet
und kleiner 1. Ich würde es ja gerne in C schreiben, aber leider kann
ich noch weniger C als Assembler. Wenn Du vielleicht diese Formel coden
könntest und den Assemblercode hier ins Forum stellen? Ich wäre dir sehr
dankbar.

Gruß
Steffen
Gast #241072
Lesenswert?

Hallo
Den AD9835 hab ich auch schon mal angesteuert, aber zu den krummen
Frequenzschritten gibt es nur die Lösung, eine krumme Quarzfrequenz zu
verwenden, die dann zu ganzzahligen Hertz-Stufen führt, oder die
Frequenzanzeige zu runden, was dann zu ungleichmäßigen Schritten in der
Anzeige führt, wenn man z.B. mit einem Drehgeber die Frequenz
einstellt.
73
Christoph
Gast #241073
Lesenswert?

Es ist immer auch die Frage, für welchen Zweck der DDS gedacht ist. Bei
vielen Anwendungen wird ein Oszillator verwendet, der bei weitem nicht
die Genauigkeit der DDS-Auflösung erreicht. Bei 28 Bit sind das
immerhin ca. 0,004 ppm....Ein sehr guter Oszillator ist einer, der 1ppm
Abweichung hat. Also sollte es z.B. reichen die Anzeige in dezimalen
Schritten einzustellen und daraus dann das Frequenzwort zu berechnen,
was sicherlich mit einer entsprechenden Arithmetik möglich sein sollte.
Wenn ein Compiler "echte" double Typen unterstützt...um so besser. Bei
"single" floats sind es immer noch 24 bit, was immer noch ca. 0.12 ppm
sind....

Gruß Thomas

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