Forum: Mikrocontroller und Digitale Elektronik DDS-Chip mit einem AVR ansprechen


von MaKob (Gast)


Lesenswert?

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?

von Stephan (Gast)


Lesenswert?


von DDSFanatiker (Gast)


Lesenswert?

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 ....

von Michael K. (Gast)


Lesenswert?

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.

von Uwe S. (de0508)


Angehängte Dateien:

Lesenswert?

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.pdf
 http://www.wa1ffl.com/


Viel Erfolg.

: Bearbeitet durch User
von Christoph db1uq K. (christoph_kessler)


Lesenswert?

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.

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

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!

: Bearbeitet durch User
von Wilhelm S. (wilhelmdk4tj)


Lesenswert?

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

von W.S. (Gast)


Lesenswert?

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.

von MaKob (Gast)


Lesenswert?

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.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

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.

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.