Forum: Mikrocontroller und Digitale Elektronik AD9833 DSS Basics-Fragen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Fabian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen
Ich würde mir gerne einen eigenen  kleinen Funktionengenerator basteln, 
mit dem AD9833 von Analog devices und einem RN Control. Da ich noch 
nicht so erfahren bin, hätte ich aber noch die eine oder andere wichtige 
Frage.

Ich hab mir mal das Datasheet hier durchgeschaut:
http://www.analog.com/en/rfif-components/direct-digital-synthesis-dds/ad9833/products/product.html

von der theorie hab ich schonmal verstanden wie das gehen soll, nun zur 
praxis.

1. Der IC hat einen Pin MCLK, welcher als Digitaler Clock input 
beschrieben wird. Heisst das nun, das ich hier einen externen quarz 
anschliessen muss? Oder hat der IC sowas wie nen internen Taktgeber? 
Wenn ein externer gebraucht wird: Welche frequenz brauche ich? Mein AVR 
hat einen 16MHz quarz. Ich gehe davon aus, dass die Frequenz des DSS 
mindestens genausohoch sein muss wie jene des AVRs? Da der DSS sonst mit 
dem empfang der daten nicht zurechtkommt... Stimmt das?

2. Zur signalübertragung zwischen AVR und DSS: Im pdf hats das diagramm 
welches ich oben angehängt habe. Ich würde jetzt einfach 3 Digitale Pins 
meines AVRs mit SCLK, FSYNC und SDATA des DSS verbinden. Um daten zu 
übertragen würde ich nun: FSYNC auf low, dann SDATA setzen und 
schliesslich SCLK auf low pulsen, wodurch ein datenbit übertragen würde. 
Dann das nächste bit. Kann man das so machen? Oder gibt es da 
andere/bessere wege wie man sowas normalerweise macht. Hab schon von SLI 
gelesen, aber blick da nicht ganz durch.

wäre auf jeden fall dankbar für tipps aller art :)

beste grüsse
Fabian

von fabian (Gast)


Lesenswert?

Anyone?

von Ralf (Gast)


Lesenswert?

> 1. Der IC hat einen Pin MCLK, welcher als Digitaler Clock input
> beschrieben wird. Heisst das nun, das ich hier einen externen quarz
> anschliessen muss?
Nein, weil a) ein (reiner) Quarz nicht digital ist und b) für einen 
Quarz zwei Anschlüsse oder eine (externe) Oszillatorschaltung gebraucht 
wird.
Was du hier brauchst ist entweder ein separater (Quarz-)Oszillator oder 
eben einfach ein Takt aus deinem Controller. fMax steht im Datenblatt, 
und es steht auch drin, wie die MClk-Frequenz deine minimale 
Ausgabefrequenz beeinflusst (kleiner Tipp: steht bereits auf der ersten 
DB-Seite).

> Oder hat der IC sowas wie nen internen Taktgeber?
Siehst du einen im Blockschaltbild? :)
Er braucht den MCLK.

> Wenn ein externer gebraucht wird: Welche frequenz brauche ich?
Eine, die weder fMax überschreitet und gleichzeitig erlaubt, die minimal 
gewünschte (und von dir nicht näher genannte) Ausgangsfrequenz zu 
bedienen.

> Mein AVR hat einen 16MHz quarz. Ich gehe davon aus, dass die Frequenz
> des DSS mindestens genausohoch sein muss wie jene des AVRs? Da der DSS
> sonst mit dem empfang der daten nicht zurechtkommt... Stimmt das?
Nö. Kann höher oder niedriger sein. Auch die maximale Frequenz des 
SCLK-Signals ist angegeben. Mehr darfste nicht, weniger schon. Hat nur 
Auswirkungen darauf, wie schnell du mit dem IC kommunizieren kannst, und 
das ist soweit ich sehen kann nicht mal abhängig vom MCLK.

> Zur signalübertragung zwischen AVR und DSS: Im pdf hats das diagramm
> welches ich oben angehängt habe. Ich würde jetzt einfach 3 Digitale Pins
> meines AVRs mit SCLK, FSYNC und SDATA des DSS verbinden. Um daten zu
> übertragen würde ich nun: FSYNC auf low, dann SDATA setzen und
> schliesslich SCLK auf low pulsen, wodurch ein datenbit übertragen würde.
> Dann das nächste bit. Kann man das so machen? Oder gibt es da
> andere/bessere wege wie man sowas normalerweise macht. Hab schon von SLI
> gelesen, aber blick da nicht ganz durch.
Das wäre BitBanging. Sehr schlecht, weil langsam. Beschäftige dich mit 
dem SPI-Kapitel des Datenblatts deines Controllers. Das 
Hardware-SPI-Interface macht das meiste von dem was du da brauchst fast 
automatisch und du musst dich nicht um die einzelnen Bits kümmern.

Ralf

von Oha Tatsaechlich (Gast)


Lesenswert?

>Das wäre BitBanging. Sehr schlecht, weil langsam. Beschäftige dich mit
dem SPI-Kapitel des Datenblatts deines Controllers.

Das SPI Hardware interface ist nicht wirklich der Hammer, da alle 8 bit 
ein Interupt kommt. Nicht wirklich sehr effizient. Waehrend dieser Zeit 
kann die CP auch fast nichts Sinnvolles machen.

von Ralf (Gast)


Lesenswert?

> Das SPI Hardware interface ist nicht wirklich der Hammer, da alle 8 bit
> ein Interupt kommt. Nicht wirklich sehr effizient. Waehrend dieser Zeit
> kann die CP auch fast nichts Sinnvolles machen.
Ich behaupte aber mal, dass es die 8-Bit trotzdem schneller rauspustet 
als eine BitBang-Software-Lösung :)

Ralf

von spess53 (Gast)


Lesenswert?

Hi

>Das SPI Hardware interface ist nicht wirklich der Hammer, da alle 8 bit
>ein Interupt kommt. Nicht wirklich sehr effizient. Waehrend dieser Zeit
>kann die CP auch fast nichts Sinnvolles machen.

Bei neueren AVRs kann die USART im SPI-Mode betrieben werden. Dann 
können es alle 16  Bit sein.

MfG Spess

von Fabian (Gast)


Lesenswert?

Hallo
Danke erstmal fuer die antworten, bin schon etwas schlauer geworden

Ralf schrieb:
> Was du hier brauchst ist entweder ein separater (Quarz-)Oszillator oder
> eben einfach ein Takt aus deinem Controller. fMax steht im Datenblatt,
> und es steht auch drin, wie die MClk-Frequenz deine minimale
> Ausgabefrequenz beeinflusst (kleiner Tipp: steht bereits auf der ersten
> DB-Seite).

Ok, sagen wir ich nehme den takt aus dem controller. Gibt es da eine 
Spezielle funktion hierfuer, oder wie bekomme ich eine konstante 
frequenz aus meinem uC heraus?

Und noch was: Wenn ich statt eines mega32 ein mega 16 verwende, kann ich 
dann trotzdem das SPI verwenden wie es hier vorgeschlagen wurde?

gruesse fabian

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?


von Oha Tatsaechlich (Gast)


Lesenswert?

Den clock kann man ab dem Quarz abzapfen. Ein 74SZ04 an den XTAL2. Und 
die ClockOption auf hohe Amplitude stellen. Das ist moeglicherweise 
schon gemacht bei 16MHz.

von Fabian (Gast)


Lesenswert?

Martin Wende schrieb:
> guggsu da:
> http://www.fritzler-avr.de/HP/Librarys/AD9833_his.php
> und danach hier:
> http://www.fritzler-avr.de/HP/sig1.php

super, besten dank für diese links, helfen mir insbesondere für den 
schaltplan sehr weiter. Da es mir beim projekt mehr ums verständnis 
geht, würde ich auch gerne selber programmieren. Gibt es irgend eine 
gute seite, wo man hardware sowie auch softwaretechnisch an SPI 
herangeführt wird?



>Den clock kann man ab dem Quarz abzapfen. Ein 74SZ04 an den XTAL2. Und
>die ClockOption auf hohe Amplitude stellen. Das ist moeglicherweise
>schon gemacht bei 16MHz.

ok subba. 1 Frage, da ich den 74SZ04 grad nirgends so recht finde: Kann 
ich auch den 74HC1G14 nehmen?

liebe grüsse
Fabian

von W.S. (Gast)


Lesenswert?

Also, soweit ich mich erinnere, verträgt der AD9833 bis zu 30 oder 33 
MHz Mastertakt. Merke: je höher, desto besser. Also guck, ob du irgendwo 
einen Quarzoszillator mit ca. 30..32 MHz bekommst. Ideal wäre ein 
kleiner SMD-Generator in 3.4 x 2.5 mm Größe. Der paßt rein größenmäßig 
gut zum DDS-IC. Aber es geht im Prinzip natürlich auch ein uralter 
Blechtopf im DIL-Gehäuse.

Aber merke: Die Ausgangsfrequenz hängt vom Mastertakt ab. Für Rechteck 
und Dreieck kannst du kaum was filten, aber beim Sinus bringt 
ausgangsseitiges Filtern mit ner Grenzfrequenz von Mastertakt/2 durchaus 
was: die Kurve wird glatter und schöner, insbesondere bei höheren 
Frequenzen.

W.S.

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.