www.mikrocontroller.net

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


Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter R. (pnu)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Harald Wilhelms (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Skua (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Flo schrieb:
> 2pi/24

2pi/2^24

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.