Forum: Mikrocontroller und Digitale Elektronik Problem bei linearer Frequenzerzeugeung


von Alex (Gast)


Lesenswert?

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ß









von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?


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
Noch kein Account? Hier anmelden.