Forum: Projekte & Code Beispielprogramm AD9833 (DDS) mit atmega8


von Daniel Nöthen (Gast)


Angehängte Dateien:

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

von Steffen Finger (Gast)


Angehängte Dateien:

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

von Jens (Gast)


Lesenswert?

Programmier das ganze doch in C und baue den erzeugten Assemblercode in
dein Programm ein.

Übrigens stimmt deine Formel nicht ganz, denn 2^32 ist nicht
0xFFFFFFFF. Also richtig lautet es: f_out = Frequenzwort / 2^32 *
DDS-Takt. Wobei DDS-Takt / 2^32 immer konstant ist und somit nicht
ständig berechnet werden muß.

von Steffen Finger (Gast)


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

von Rage-Empire (Gast)


Lesenswert?

Sind die 9833 und 9835 von der Ansteuerung wirklich gleich? Der 9835 und
9832, sind nahe zu indentisch. Aber der 9833 hat doch nur 28Bit, wärend
der 9832, bzw. 9835 32Bits hat. Oder irre ich mich jetzt?
Zu dem kann der 9833 glaub ich auch noch Dreieckspannung ertzeugen.

von Christoph Kessler (Gast)


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

von Thomas (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.