mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DDS 24 Bit in C?


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte mit DDS ein Sinussignal zwischen 63,00 und 65,00  in 0,01 
Auflösung erzeugen.

Fosc 3.686400 MHz

alle 500 - 2000 ms kommt per ICP eine Messung rein, die ich dann in die 
gewünschte Frequenz im oben genannten Bereich umrechne.

Nachdem ich die Threads zum Thema gelesen habe, habe ich mit einem 16 
Bit Phasenakku zu wenig Auflösung, mit 24 wäre es optimal, 32 Bit fürs 
Ergebniss unnötig.

In C kann ich aber wohl kaum einen 24 Bit Phasenakku 
(uint_24)definieren, ,oder?

Ich weiß, dass man solche Dinge in asm macht, habe aber von asm 0 Plan.

Da das FCW aber nur alle 500 - 2000 ms neu berechnet werden muss, dachte 
ich, dass es auch in langsamen C ginge.

Wenns nicht anders geht, nehme ich halt einen uint_32 breiten 
Phasenakku.

Über einen Tipp würde ich  mich freuen..

Gruß

Thomas

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ich möchte mit DDS ein Sinussignal zwischen 63,00 und 65,00  in 0,01
> Auflösung erzeugen.

Ich weiss nicht wie das heute ist, aber mein Prof haette mich tierisch 
runtergemacht wenn ich keine Einheiten angebe.  .-)

> Da das FCW aber nur alle 500 - 2000 ms neu berechnet werden muss,
> dachte ich, dass es auch in langsamen C ginge.

Wenn ich mal davon ausgehe das du da oben Herz meinst, so wuesste ich 
keinen Grund warum du das nicht in C machen kannst. Du hast in C nur 
keine genau definierte Zeit fuer einen Zyklusdurchlauf. Daher musst du 
dir was mit einem Timer schaffen. Aber sagen wir mal einen 
Timerinterrupt mit 1ms sollte deine uns unbekannte CPU schon schaffen.

> Wenns nicht anders geht, nehme ich halt einen uint_32 breiten
> Phasenakku.

Dann nimm den halt. Wieso nicht? Wir wissen ja nicht welchen Controller 
du verwendest. Fuer einen modernen 32Bit Controller ist das kein Problem 
und auch fuer einen alten abgeschlafften und unmodernen AVR mit 
vollkommen oeden deprimierenden 8Bit sollte das bei deinen geringen 
Anspruechen noch zu schaffen sein. :)

Olaf

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> dass es auch in langsamen C ginge.

Dann nimm doch schnelles C.

mfg.

Autor: Rudi D. (rulixa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:

> ich möchte mit DDS ein Sinussignal zwischen 63,00 und 65,00  in 0,01
> Auflösung erzeugen.
>
> Fosc 3.686400 MHz
>
>
> Nachdem ich die Threads zum Thema gelesen habe, habe ich mit einem 16
> Bit Phasenakku zu wenig Auflösung, mit 24 wäre es optimal, 32 Bit fürs
> Ergebniss unnötig.
>
> Ich weiß, dass man solche Dinge in asm macht, habe aber von asm 0 Plan.
>
> Da das FCW aber nur alle 500 - 2000 ms neu berechnet werden muss, dachte
> ich, dass es auch in langsamen C ginge.
>


Schau mal nach: http://elektronik-labor.de/AVR/DDSGenerator.htm
Mit anderer Quarzfrequenz kann man auch exakt 0,01 Hz Auflösung 
realisieren
LG Rudi

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Mit anderer Quarzfrequenz kann man auch exakt 0,01 Hz Auflösung

Genau. Wenn man bei 16Bit Zähler einfach erstmal auf 1Hz
Auflösung geht und dann nur jeden 100ten Timertick nimmt,
hat man sowas wie einen 23 Bit Zähler.

Autor: Rudi D. (rulixa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So hab's ich nicht gedacht.
Aus dem asm Listing geht hervor, wie ich es meine.
LG Rudi

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen Dank für Eure Antworten!

ich habe einen Atmega 162 mit einem ext. 3,686400MHz Quarz. Timer 1 
verwende ich mit prescale 256 fürs ICP. Es sollte für Batteriebetrieb 
geeignet sein, weswegen ich nicht auf 16MHz gehen wollte.

@Thomas Eckmann
super Idee, wäre ich jetzt nicht drauf gekommen...

@Olaf
Sorry, hatte schon diverse Fragen zu meinem Projekt gepostet, wobei 
meist diesselben Leute geantwortet hatten. Deswegen hatte ich die 
Details in dieser Frage unterschlagen....

@rudi
sehr schönes Link, Danke

Gruß

Thomas

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@rudi

war nicht ironisch gemeint, hatte das schon richtig verstanden

Gruß

Thomas

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.