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.
So hab's ich nicht gedacht. Aus dem asm Listing geht hervor, wie ich es meine. LG Rudi
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
@rudi war nicht ironisch gemeint, hatte das schon richtig verstanden Gruß Thomas
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.