Hallo Habe ein Problem bei der Erzeugung eines Sinus und hoffe ihr könnt mir helfen. Zuerst zur Aufgabenstellung was das Programm machen soll: Erzeugung eines Siuns von 3-150Hz mittels DA-Wandler und einstellen der Frequenz über Poti. Dabei sollte die Frequenz linear einstellbar sein. Das ist sie aber bei mir nicht. Kurz meine Vorgehensweise: Lese den AD-Wert des Potis ein und schreibe ihn in das Compare-Registers des Timers. Der Timer läuft im CTC-Modus und beim Capture Interrupt wird der Wert aus einer Sinustabelle (mit 256 Werten) über SPI dem DA-Wandler übergeben. D.h. die Frequenz ändere ich durch die Zugriffszeit auf die Tabelle. Nun ändert sich aber dadurch die Frequenz nich linear. Bei kleinen Frequenzen kannn man die Frequenz sehr fein einstellen, wobei bei höheren diese sprunghaft ansteigt. Das Problem ist, dass ich einen 8-Bit Timer mit CLK/128 benutze und somit dessen Auflösung 8 ns ist (16MHz Quarz). Das bedeutet bei niedrigen Comparewerten n=5 (hohen Frequenzen) das Übertragen einer Periode 256 x n x 8ns = 10ms = 100Hz dauert. Wird der comparewert nur um 1 erhöht so dauert die Übertragung 256 x n+1 x 8ns =12ms = 83Hz Benutzt habe ich ein Mega8. wenn ich den Timer schneller laufen lasse wird es zwar besser aber ich komme nicht mehr in die niedrigen Frequenzen. Wie würdet ihr so etwas realisieren bin für jeden Tip dankbar Gruß
Das Stichwort heißt DDS, siehe http://www.mikrocontroller.net/articles/Digitale_Signalverarbeitung#Signalerzeugung.
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.