DDS 24 Bit in C?

Gast #2018987
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
Gast #2019038
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
#2019130
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
Gast #2019169
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.
Gast #2019250
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren