Hallo zusammen,
Ich möchte mit einem DDS-Chip (AD9951) eine Frequenz erzeugen. Die
Frequenz soll dabei von einem Mikrocontroller an den DDS übergeben
werden.
Nun bin ich mir nicht sicher, wie ich den DDS-Chip mit meinem AVR
richtig anspreche. Ich benutze einen XMega256A3 den ich in C
programmiere.
Der DDS ist an PORT A wie folgt angeschlossen:
PA0: Reset
PA1: I/O_Update
PA2: SCLK
PA3: SDIO
Laut Datenblatt ist das FTW, das ich übertragen muss bei fs = 400MHz und
einer zu erzeugenden Frequenz f0 = 55MHz -> 0x23333333. Aber wie
übertrage ich dieses FTW über den SDIO richtig? Und wie muss ich die
anderen Pins beschalten?
Hat jemand einen Beispiel-Code für mich, oder kann mir anderweitig
helfen?
MaKob schrieb:> Aber wie übertrage ich dieses FTW über den SDIO richtig?
Das FTW hast du ja schon herausgefunden. Dazu musstest du
das Datenblatt lesen (und verstehen), nicht wahr? Oder war
das Eingebung?
Und wie ist es mit der seriellen Ausgabe? Hat man das im
Datenblatt vergessen zu erwähnen? Ich sag's ja, diese
Datenblattschreiber .... unterscxhlagen einfach die
wichtigsten Sachen ....
Aus dem Datenblatt:
...
The serial I/O port
is compatible with most synchronous transfer formats, including
both the Motorola 6905/11 SPI and Intel 8051 SSR protocols.|
...
The AD9951 serial interface port can be configured as a single pin
I/O (SDIO), which allows a 2-wire interface or two unidirectional
pins for in/out (SDIO/SDO), which in turn enables a 3-wire
interface. Two optional pins, IOSYNC and CS, enable greater
flexibility for system design in the AD9951.
Verwende den 3pin SPI und es ist ein ganz normaler SPI dessen
implementierung Du in unzähligen Applikationsschriften finden kannst.
Du kannst den SPI in Software bauen oder die SPI Hardware dafür
verwenden, wie es Dir beliebt.
Guten Morgen,
hier ist ein benutzter Programmcode aus einem AD9951 Projekt.
Die gesamte Ansteuerung, Ausgaben und der Kommandointerpreter wurden
weggelassen.
AD9951 Clock ist auf 150MHz gesetzt, kann geändert werden.
Als Hardware wird dieses Board mit einem ATmega162 erweitert genutzt.
http://www.wa1ffl.com/Hagerty_QEX.pdfhttp://www.wa1ffl.com/
Viel Erfolg.
Ich habe neulich den AD9952 am Arduino zum Laufen gebracht. Ein Problem
war eine missverständliche Darstellung im Datenblatt. Ohne Änderung
(durch einen Befehl "LSB first") müssen sowohl Bits als auch Bytes in
der Reihenfolge "MSB first" gesendet werden. In der Tabelle ist aber das
niederwertigste Byte zuerst aufgelistet. Bei einem anderen Typ steht es
dagegen in der richtigen Reihenfolge.
Das ChipSelect darf während der Übertragung nicht abgestellt werden, die
Datenübernahme erfolgt erst mit einem IO-Update Impuls, alle
Konfigurationsbytes werden in einem lange Schieberegister
zwischengespeichert.
Hier das Assemblerprogramm für Arduino, zusammen mit einer
Drehencoder-Auswertung und Ansteuerung eines 2*16-Textdisplays nach
"Industriestandard".
DDS-Takt ist 200 MHz.
Pegelwandler nicht vergessen, Arduino 5V, DDS 3,3V!
Hallo zusammen, hallo Makop.
Schlabbere mal über die Seiten von Klaus Hirschelmann, DJ7OO
http://www.kh-gps.de/
Da wirst du sicher in BASCOM, ARDUINO, und C fündig.
> XMega256A3
Viel zu gross. Je nach dem was du machen möchtest, reicht ein Tiny 85.
Die Pins müssen natürlich reichen.
Zur Hilfe gibt es auf der Seite von AD ein Online-Programm
'AD Sim DDS', mit dem du dir - je nach deinen Gegebenheiten - das
Steuerwort ausrechnen lassen kannst.
73
Wilhelm
MaKob schrieb:> Nun bin ich mir nicht sicher, wie ich den DDS-Chip mit meinem AVR> richtig anspreche.
Der konkrete µC-Typ ist doch völlig unwichtig!
Guck dir im Datenblatt die Diagramme zur Übertragung an und wackele mit
deinen µC-Pins entsprechend.
Das war's.
Kann ja wirklich nicht so schwer sein. Ich hab sowas vor Jahren mit dem
PIC16Firgendwas gemacht, der im FA-NWT drinsteckt - und zwar in
Assembler. Aber das nützt dir ja nix, oder?
W.S.
Vielen Dank für die vielen Posts.
Muss ich erstmal durchschauen. Aber ein Tiny 85 langt mir nicht. Ich
möchte ja noch mehr mit dem Mikrocontroller tun, aber der Rest
funktioniert schon.
Ich bin mir eher bei der Auswahl des DDS-Chips unsicher. Schließlich
brauche ich den DDS nur um eine feste Frequenz (je nach angeschlossenem
Verbraucher verschieden) zu erzeugen. Dafür ist der AD9951 eigentlich
viel zu komplex. Allerdings gibt es sehr hohe Anforderungen an die
Frequenz speziell in Sachen Dämpfung.
Der AD9952 unterscheidet sich vom AD9951 nur durch einen zusätzlichen
schnellen Komparator, mit dem man aus dem Sinus ein Rechteck machen
kann. Die Software ist völlig gleich.
Irgendwo steckt ein ID-Code in einem Register, der sich unterscheiden
soll. Allerdings stehen in den Datenblättern andere Werte als in der
Beispielsoftware von Analog Devices. Dort soll aus dieser Codierung der
tatsächlich angeschlossene Typ erkannt werden, das Eval-Board ist
unterschiedlich bestückt lieferbar mit derselben Software.
Nachdem es mit dem Arduino geklappt hatte, wird mein AD9952 jetzt mit
dem GPIO-Anschluß eines Raspbery Pi3 angesteuert. Software mit Python
und pigpio.