Forum: Mikrocontroller und Digitale Elektronik ATmega an AD9851


von Dieter Pilz (Gast)


Lesenswert?

Hallo!
Das Thema wurde zwar schon oft behandelt,trotzdem mal eine Frage
dazu.Ich betreibe einen Atmega 128 an einen DDS-IC AD9851.Dazu
programmiere ich alles in Assembler(mit C kenne ich mich nicht aus).
Laut Datenblatt AD9851 ergibt sich das FTW für den DDS zu:
FTW=Ausgangsfrequenz des DDS x 2 hoch 32/Clock des DDS.Ich betreibe den
AD9851 an 180MHz.2 hoch 32 ergibt 4294967296,das durch 180MHz ergibt
23,86092942.die "23"ergibt 17H.Der Rest von 23 (.86092942)wird
mit 2 hoch 24 multipliziert,ergibt DC65DE hex.(nach einer Anleitung für
einen PIC).Wenn ich nun eine Ausgangsfrequenz von z.B.10MHz =989680hex
haben möchte,wie muß ich diesen 32Bit Wert(17DC65DE)mit10MHz
multipliziern?Mit den Wert 17hex multipliziert ist der Wert zu
klein(23,8609xxx).Wie muß ich also mit den Rest(DC65DE)verfahren?
Der richtige Wert für das FTW ist 0E38E38Ehex.Das entnahm ich einer
Applikation von Analog Device.Und mit diesen Wert in den DDS
programmiert,zusammen mit Steps von 1MHz bis 1Hz,klappt auch alles
prima.Der umgekehrte Weg ist,ich lege 0E38E38E in eine Tabelle
ab,zusammen mit den Steps.Dann brauche ich nur add bzw. sub
auszuführen.Wie komme ich dann aber bei diesen Hexwert auf meine
LCD-Anzeige von 10,000 000 MHz?Es ist übrigens der Typ des DDS egal.
Das kann ich auch mit 48Bitern rechnen,ich denke aber,das 32Bit
ausreichen sind.Sind allemal weit weniger als 1Hz.
Dieter

von Christoph Kessler (Gast)


Lesenswert?

Den AD9851 hab ich auch angefangen, Platine ist bestückt, Software fehlt
noch. Ich habe ihn mit paralleler Ansteuerung am 8515 angeschlossen.
Ich fürchte, mit einer "glatten" Quarzfrequenz bekommt man immer
krumme Frequenzen. Die Anzeige muß also gerundet werden.

von Hans (Gast)


Lesenswert?

also du darfst 23,86092942 zerlegen, damit du das hablwegs genau
hinbekommst...

du nimmst am besten immer die genaue zahl, ziehst davon deinen
gerundeten wert ab und nimmst den integer-anteil davon als nächsten
näherungs-koeffizienten...

also 1/(23,8...-23)=1,1... => nächster koeffizient wäre 1
1/(23,8-(23+1/1))=-7,...

1/(23,8-(23+1-1/7))=264
1/(23,8-(23+1-1/7+1/264))=-761203

23,86092942 kann also durch 23+1-1/7+1/264 angenächert werden...
koeffizienten bis 1/7     :23.85714285714285710741922041933094078558
koeffizienten bis 1/264   :23.86093073593073590754620738607627572492
koeffizienten bis 1/761203:23.86092942222072690872103351011901395395
genaue berechnung         :23.86092942222222222301009075806632608874

wenn du also dein tuningword mit tuningword=24*fq-fq/7+fq/264-fq/761203
berechnest bist du ziemlich genau :) wenn du nicht gerade aufs Hz genau
sein musst kannst du den letzten koeffizienten ja auch weglassen....

73

von Dieter Pilz (Gast)


Lesenswert?

Hallo Christoph!
Ich habe ein Assemblerprogramm mit Studio4 von Atmel sowohl für den
AD9851 als auch AD9852 geschrieben.Für den AD9852 habe ich parallel
für den AD9851 parallel und seriell vorgesehen.Klappt alles.Ich habe
halt die Werte von Analog Device Tool eingeschrieben und die Steps
ausgerechnet zusammen mit Frequenzgrenzen.Klappt bis auf 1Hz genau.Mein
Zähler und Clockgenerator lassen diese Messung zu.Probleme
habe ich im Moment nur mit der Umrechnung für die LCD.Die Hex-Werte
stehen ja in keinen Verhältnis mit den dez.Werten für die LCD.
Programme für ADD und SUB 32+32Bit,MUL32x32Bit,32Bit-Umwandlung
in10Digit für LCD.Klappt alles.Vielleicht füge ich
in der Routine für die Steps eine entsprechende Konstante im RAM ein,
die ich in der LCD-Routine einfach add oder sub.Dann braucht man die
gesamte Geschichte mit MUL und Umrechnen von BCD auf HEX nicht mehr.
Danke auch Dir,Hans!
Die Steps beziehen sich auf 10er Potenzen von 23,8609xx.Bei 1Hz ist es
nur noch ein Byte.Bei Interesse gebe ich gerne die ASM-Files
weiter.Vielleicht kann man sich da ergänzen.Brauche blos die E-Mail
Adresse.
Dieter

von Hans (Gast)


Lesenswert?

asm hab ich mir schon vor längerer zeit abgewöhnt.. aber trotzdem danke
:) ich hab das so gebraucht weil mein network-analyzer auch sweepen
kann/konnte...
und so geht die berechnung am einfachsten schneller als mit doubles :)

73

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.