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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.