Hallo Leute,
folgendes Problem: ich habe einen Sinus mit DDS erstellt und je nach
Veränderung des IR1-Wertes ändert sich die Frequenz.
Leider ist bei 400 HZ Schluss - Wenn ich den IR1 noch kleiner setze,
ändert sich der Sinus nicht mehr, habe es mit einem Oszilloskop
nachgemessen.
Hat jemand eine Idee, woran das liegt?
Gruß, Martin
Martin schrieb:> Hat jemand eine Idee, woran das liegt?
Klar: du mußt den Increment in Zeile 42 ändern.
Auf Deutsch: woher soll denn irgendwer irgendwas wissen?
Keiner kennt deine Hardware oder dein Programm.
Hi
>Leider ist bei 400 HZ Schluss - Wenn ich den IR1 noch kleiner setze,>ändert sich der Sinus nicht mehr, habe es mit einem Oszilloskop>nachgemessen.
Dann hast du etwas falsch gemacht.
MfG Spess
Ich habe dieses Problem auch. Bei mir war allerdings schon bei ~110Hz
Schluss. Ich hatte damals ~ 190 Werte in meiner Tabelle. Ich habe um
höhere Frequenzen zu erreichen einfach weniger Werte genommen. Wenn man
mal überlegt, liegt die Interrptfrequenz bei 100 Werten mal 200Hz schon
bei 20kHz(!). Das is ne Menge. Ich habe einen Mega128 @ 16MHz verwendet.
Heute würde ich einen XMega vorziehen, der dürfte dank DMA schneller
sein.
Es liegt also daran, dass der AVR zu langsam ist, bzw. du nicht mehr
Werte in dieser Zeit ausgeben kannst. Ist also ein Problem mit der
Rechenleistung!
Sollte ich mit meiner Vermutung falsch liegen, wäre ich auch an einer
Lösung interessiert.
Gruß
Knut
Also ich versteh den Code zwar nicht ohne stundenlanges Nachdenken,
aber ich rate mal dass Du die Tabelle Wert für Wert ausliest mit
unterschiedlichen Geschwindigkeiten.
Das sagt mir dass Du noch nie vom Abtasttheorem gehört hast.
Du kannst in der Tabelle Werte überspringen, das gibt dann immer noch
einen Sinus. Nach oben Schluss ist dann wenn Du pro Sinusperiode nur
noch 2 Stützpunkte hast.
Andererseits: was Du da machst ist zwar ein digital erzeugter Sinus,
aber nicht DDS.
DDS nimmt einen schnellen Sinus, haut den auf nen schnellen DAC,
dann wird das ganze noch etwas tiefpassgefiltert, und fertig.
Eine PWM im Signalpfad zu haben (als Ersatz für einen schnellen
DAC) bremst alles um den Faktor 100 runter. Macht irgendwie keinen
Sinn.
Meine Empfehlung: Bau Dir einen 2. Ordnung digitalen Delta Sigma
Modulator, füttere ihn mit einem 8bit Sinus, der Delta Sigma macht
daraus 4bit, und mit den 4bit gehst Du auf einen externen R2R DAC
plus Tiefpassfilter. Der DAC arbeitet dann mit 2MHz, und DU kommst
locker mit Deinem Sinus auf 100-200kHz.
Noch Fragen?
Martin1 schrieb:> DDS nimmt einen schnellen Sinus
Was unterscheidet denn einen schnellen Sinus von einem langsamen
Sinus???
Doch eigentlich nur die Periodendauer. Die ist abhängig, wie schnell die
Werte ausgelesen werden.
> Eine PWM im Signalpfad zu haben (als Ersatz für einen schnellen> DAC) bremst alles um den Faktor 100 runter.
Kannst du das näher Erleutern?
Gruß
Knut
@Martin
DDS geht so:
Du definierst einen Phasenakkumulator mit z. B. 16bit.
Du setzt die Interruptrate mittels Timer auf z. B. 65536Hz.
Es ginge natürlich auch jede andere Frequenz, aber damit
bekommst du so schön 1Hz Auflösung. Die oberen 8bit deines
Akkumulators nimmst du zum Adressieren der Sinustabelle.
Auflösung:
65536Hz/65536 = 1Hz
Die 65536 ist deine Akkumulatorgröße.
Wenn du jetzt 10Hz haben willst, dann addierst du jedesmal 10 zum
Akkumulator.
freq=10
phase=0
ISR:
phase = phase+freq
Mit den oberen 8 bits vom Accu addressierst du deine Sinustabelle.
ISR Ende
Wenn du 100Hz haben willst, dann einfach
freq=100
Am Ausgang der DDS brauchst du in Hardware ein Filter höheren Grades.
@Knut
Ein langsamer Sinus ist einer dessen sämtliche Oberwellen durch das
nachgeschaltete Tiefpassfilter rutschen.
Bei einem 4bit R2R DAC generierten Sinus sollte man die Oberwellen
wohl besser wegfiltern, das klappt schlecht wenn der Sinus zu
niederfrequent ist.
Hallo,
Ich habe folgenden DDS Generator nach gebaut.Habe mir ein 25khz sinus
generiert. http://www.scienceprog.com/avr-dds-signal-generator-v20/
kann mir einer erklären was genau das Widerstandsnetzwerk am Ausgang
macht.
Ich weiss zwar das eine Digital analog wandlung ist, aber wie genau
funktioniert das.
Martin1 schrieb:> Ein langsamer Sinus ist einer dessen sämtliche Oberwellen durch das> nachgeschaltete Tiefpassfilter rutschen.
Ein Sinus hat keine Oberwellen. Du mußt nur alles oberhalb fs/2
wegfiltern.
Die Störungen, die Du aufgrund fehlender Spannungsauflösung hast, sind
keine Oberwellen. Wenn Du die beseitigen möchtest, solltest Du über ein
16-Bit-System nachdenken.
Mit einem ATmega168 schafft man im übrigen bis zu 500kHz Signalfrequenz
bei 8 Bit Auflösung.
Ach ja: Du solltest unbedingt dafür sorgen, das alle Bits gleichzeitig
am DA-Wandler ankommen.
Gruß
Jobst
Die D/A-Wandler ICs sind natürlich viel genauer als sowas selbst
gebautest. Allerdings kosten schnelle D/A-Wandler dann auch etwas mehr
als dein Mikroprozessor.
peter schrieb:> Ja meine Ich ja einen DA - Wandler.> Anstatt das Widerstandsnetzwerk zu benutzen, kann doch bestimmt> DA-Wandler ICs benutzen oder ?
Hallo Peter,
Das ist eine Frage des Typs des DA-Wandlers;
Die Auflöung ist wohl weniger bedeutend als die Geschwindigkeit,
wenn es ein Funktionsgenerator werden soll.
Geschwindikeit:
Insbesondere die, in welcher die Digital-Daten an den Wandler kommen.
Ein 8 Bit R2R-DAC dierekt am µc ist einfach und sehr schnell
anzusteuern:
Ein Byte 1:1 an den Port und der neue Analogwert pendelt sich sogleich
ein.
Mit SPI oder TWI (I2C) musst Du ersteinmal serielle Kommunokation
vorbereiten und ablaufen lassen,
ehe die Daten zu analog umgesetzt werden.
TWI ist im übrigen meist noch langsamer als SPI.
Wenn Du allerdings nur NF-Audio erzeugen möchtest,
so kann ich mir vorstellen,
dass Du sogar mit einem TWI-Typ noch zu einem Ergebniss kommst.
MFG:MBP
Markus.
peter schrieb:> Anstatt das Widerstandsnetzwerk zu benutzen, kann doch bestimmt> DA-Wandler ICs benutzen oder ?
Wenn du hohe Frequenze erzeugen willst, verringserst du durch zusätzlich
Zeit, die du brauchst, um die Daten zum DAC zu übertragen, deine obere
Grenzfrequenz.
Probier mal den miniDDS von Jesper mit 8-Bit R2R DA-Wandler (bis
200..300 kHz je nach Quarz, Zykluszeit 9 Take auf ATmega8)
http://www.myplace.nu/avr/minidds/index.htm
Michael schrieb:> peter schrieb:>> Anstatt das Widerstandsnetzwerk zu benutzen, kann doch bestimmt>> DA-Wandler ICs benutzen oder ?>> Wenn du hohe Frequenze erzeugen willst, verringserst du durch zusätzlich> Zeit, die du brauchst, um die Daten zum DAC zu übertragen, deine obere> Grenzfrequenz.>> Probier mal den miniDDS von Jesper mit 8-Bit R2R DA-Wandler (bis> 200..300 kHz je nach Quarz, Zykluszeit 9 Take auf ATmega8)> http://www.myplace.nu/avr/minidds/index.htm
Hab mit Hilfe von Jesper das folgende gebaut:
http://www.elo-web.de/f-drabek
Habe absichtlich eine höhere Zykluszeit gewählt. Warum steht im Artikel.
Rudi D. schrieb:> http://www.elo-web.de/f-drabek
'Die modernste Art von RC-Generatoren ist zweifellos die Synthese mit
einem digitalen Signalprozessor.'
... ist dann nur kein RC-Generator mehr ...
Rudi D. schrieb:> Warum steht im Artikel.
Und Du erwartest nun, daß die Leute Deinen Artikel kaufen?
Gruß
Jobst
Jobst M. schrieb:> Rudi D. schrieb:>> http://www.elo-web.de/f-drabek>> 'Die modernste Art von RC-Generatoren ist zweifellos die Synthese mit> einem digitalen Signalprozessor.'>> ... ist dann nur kein RC-Generator mehr ...>>> Rudi D. schrieb:>> Warum steht im Artikel.>> Und Du erwartest nun, daß die Leute Deinen Artikel kaufen?>>> Gruß>> Jobst
Der Artikel kostet natürlich nichts.
Er ist auch noch bei elektronik-labor.de gelistet.
Rudi D. schrieb:> Der Artikel kostet natürlich nichts.> Er ist auch noch bei elektronik-labor.de gelistet.
aber dort gut versteckt...
--> Alle Artikel im Überblick.
--> 17.11.10: AVR-Controller: DDS-Generator
MFG:MBP
mbp schrieb:
> Ein 8 Bit R2R-DAC dierekt am µc ist einfach und sehr schnell
anzusteuern:
Ein Byte 1:1 an den Port und der neue Analogwert pendelt sich sogleich
ein
Kann jemand den Typ eines solchen R2R-DAC sagen?
Simon K. schrieb:> peter schrieb:>> Kann jemand den Typ eines solchen R2R-DAC sagen?>> Meinst du das jetzt ernst?
Vielleicht ist ja auch Google kaputt?
Edit: nein, habs grad probiert. Google geht noch.
peter schrieb:> R2R-DAC habe ich natürlich schon gefunden. aber ich hätte gerne einen> den man wie erwähnt 1:1 an das Port anschließen kann.
Warum schaust du dir nicht die Lösung von mir an ?
Du brauchst nur eng tolerierte Widerstände und sonst nichts.
peter schrieb:> Kann jemand den Typ eines solchen R2R-DAC sagen?
Ich weiß zwar nicht, ob es nun ein R2R oder ein DAC mit gewichteten
Widerständen ist, für die Anwendung ist das aber auch egal. Auf jeden
Fall habe ich viel weiter oben schon einen genannt - sogar mit Link ...
Wozu antwortet man eigentlich?
spess53 schrieb:>> CSD hat auch reine R2R-Widerstandsnetzwerke.
Das 1k Netzwerk ist zwar billig aber nicht so gut geeignet für direkte
Anschaltung an Ports.
Die 10k Variante kann man IMHO mit genauen Widerständen aus der
Schatzkiste billiger herstellen. Wenn man die nicht hat, dann das 10k
Netzwerk kaufen, denke ich. Oder Widerstände ausmessen, was ja immer
geht.
Hallo,
ich habe mir jetzt eien DAC 0808LCN besorgt.
http://www.datasheetcatalog.org/datasheet2/8/0iff6chuycj3uriy0x2ls8p5cwfy.pdf
nur weiss ich jetzt genau wie ich den anschließen muss. Digital in
Inputs müsste ich ja 1:1 an mein PORTA anschließen können(PA0 -> A1,PA1
-> A2, usw.).
Nur was ist mit VCC,Vref+,Vref- und VEE ich weis, dass es schon mehrere
Beiträge zu diesem Thema gibt. Aber eine Antwort konnte ich daraus nicht
gewinnen.
Wäre nett wenn ihr mir nochmal weiterhelfen könntet.
Gruß Peter
habe jetzt die schaltung nach figure 9 aufgebaut. nur das ich Vs
weglassen habe.
ich will ja ein 22khz sinussignal erzeugen, nur ausgang ausgang bekomme
jetzt 3MHZ sinussignal. habe ich irgendwie ein Frequenzbeschleuniger
gebaut? weiß jemand woran das liegen könnte?