DDS Sinus( Direct Digital Synthesis ) Hallo zusammen. Brauche Eure Hilfe. Ich will mir in Bascom und mit einem Atmega einen Sinus Genarator bauen. Erzeugung des Signals über DDS. Ich habe viele Seiten dessenbezüglich durchstöbert, komm aber nicht so wirklich in die Gänge. 1. Ich mus einen Phase Accumulator programieren, also einen zähler der immer eins dazu addiert und bei einem bestimmten Wert wieder auf null springt. 2. Getaktet wird dieser mit einem Timer 0 oder 1. 3.Bei jedem Sprung in dem Phase Accumulator wird aus einer Tabelle eine Sin funktion / Wert ausgelesen und dieser macht irgendwas ? Hört sich eigentlich einfach an, find aber nicht den einstig. Habe zwar ne grobe vorstellung wie das Ding läuft aber an der Umsetzung häng ich. Die Durchsuchten Seiten geben mir leider kein Code Beispiel Das es mir verdeutlicht was für Rechenoperationen zum gewünschten ziel führen. ZB. welcher Wert/ Varieabele ändert die Frequenz. Würde mich freuen wenn von Euch jemand eine Seite Bzw. ein einfachstes Code beispiel in Bascom kennt das mir die sache veranschaulicht. Ok soweit zu meiner Verwirrung..... Grüße Flo
Zuerst einmal: Wenn der Phasenakku durch eine Additionsschleife im Kontrollerprogramm nachgebildet wird, muss sie in so wenigen Takten wie möglich ablaufen. Das erreicht man kontrolliert am besten in einer .asm-Schleife loop: add r28,r25 adc r29,r26 adc r30,r27 lpm r16 out portb,r18 rjmp loop Dabei ist r28..r30 der Phasenakku mit 24 bit r25....r27 die Konstante, die die Frequenz bestimmt lpm wandelt per lookup-Tabelle die Phase (in r30) in einen 8-bit Spannungswert um out portb gibt die 8-Bit aus der lookup-Tabelle auf den folgenden D/A-Wandler Alle anderen Aktionen des IC sollten in Interupts ausgelagert sein, sodass die DDS-Schleife möglichst ungestört abläuft. Beste Lösung wäre ein Kontroller als "I2C- IC" das außer der DDS-Synthese nur per I2C das 24-bit-Frequenzwort aufnimmt und es im I2C-interrupt dem Registersatz r25..r27 übergibt. Damit kann man bei 16MHz-Takt bis in die -zig kHz einen brauchbaren Sinus erzeugen Alles Andere: Bedienung des Display, Bedienung der Tasten, Eingabe per RS232... sollte man einem zweiten Kontroller überlassen, da kann man sich in Basic, C oder anderer Programmiersprache austoben. Übrigens: das "DDS-IC" lässt sich dann locker übertakten, das kann bis 32MHz reichen.
Danke für die ausführlich Antwort !! Das der Atmega nur den Phasenakku schnurren läst sehe ich genau so. Alles andere kann ein zweit Ic erledigen. Wenn du schreibst das der Pahsenakku mit 24 Bit läuft ist jeder teil doch 2pi/24 habe ich das richtig verstanden ? Daraus kann ich mir einen Sin Wert errechnen ( erst mal von Hand zu Fuß) Oder entnehme ich diesen Wert aus einer Lockup Tabelle. Das sende ich an den DA Wandler und erhalte meine Kurve. Versteh die ablaufe noch nicht richtig. Sorry mit den Register Bezeichnungen tu ich mir noch sehr schwer. Köntest du mir eine Beispielrechnung posten Danke Flo
Flo schrieb: > Ich will mir in Bascom und mit einem Atmega einen Sinus Genarator bauen. > Erzeugung des Signals über DDS. Ein Beispielgerät findest Du hier: http://www.elo-web.de/f-drabek Gruss Harald
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.