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
> 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
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
>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.
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