Forum: Mikrocontroller und Digitale Elektronik DDS Sinus( Direct Digital Synthesis )


von Flo (Gast)


Lesenswert?

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

von Peter R. (pnu)


Lesenswert?

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.

von Flo (Gast)


Lesenswert?

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

von Harald Wilhelms (Gast)


Lesenswert?

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

von Skua (Gast)


Lesenswert?

Flo schrieb:
> 2pi/24

2pi/2^24

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.