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