Frequenzgenerator Sinus

Guten Tag zusammen

Ich habe einen Frequenzgenerator bis 5000Hz mit Sinus. Die Frequenz kann ich anhand von einem Pushbutton in vier verschiedenen Stufen wechseln. Und da kommt mein Problem. Umso grösser mein Code wird umso kleiner werden die Frequenzen. Zuerst wollte ich es mit einem InterruptTimer lösen, die Library des TimerOne funktioniert bei mir leider nicht wegen des <avvr/io.h> etc. Meine Frage ist nun, wie kann ich das Problem lösen, egal wie gross mein Source-Code ist, dass der “Frequenzgenerator” nicht “verändert” wird? Ich danke schonmal im voraus für die Antworten :slight_smile:

Freundliche Grüsse

Weshalb machst du zu einem Problem 2 Threads auf ?

das mach es nicht gerade übersichtlicher.

Und zeige uns deinen Sketch. Ich vermute es liegt an deinen delays.

Der erste Thread hat sich erledigt und funktioniert, an denn delays kann es nicht liegen, hab nur eines vorhanden und ohne dieses würde der ganze Frequenzgenerator nicht funktionieren. Das Problem bezieht sich auf den InterruptTimer den ich einbauen möchte, vielleicht habe ich meine Frage ein bisschen Falsch gestellt, sorry. Den Sketch würde ich gerne geben, dass Problem ist dass er sehr "unordentlich" ist, da ich immer noch am "experimentieren" bin.

Wie soll dir dann geholfen werden, wenn wir den Sketch nicht kennen ?

Das Problem liegt bestimmt in der falschen Konvertierung eines Zeigers auf ein was weiss ich in Zeile 86 :slight_smile:

Also berichtigt mich wenn ich mich irre- aber da ist doch ein Fehler in der Verdrahtung... das grüne Kabel auf PIN5 gehört doch eigentlich auf PIN7. wo das blaue hin geht kann ich nicht sicher sagen. Generell habe ich mit Kabel dieser Art schlechte Erfahrungen- die Steckkontakte sitzen nicht besonders fest... Da würde ich erstmal ansetzen... Der Sketch sieht so weit ganz gut aus... wobei mir Zeile 86 auch spanisch vorkommt.... man könnte die ja mal auskommentieren... aber dann bitte die } in die nächste Zeile setzen...

Ich vermute, ihr irrt euch beide.

Es liegt wohl an der falsch gewählten Farbe des Frequenz-Tasters (Pushbutton).
Der muss unbedingt gelb sein.

Schreib mir mal, hab einen Frequenzgenerator der über 5000Hz geht und unabhängig zu void Loop() funktioniert. Ich verstehe das mit dem Sketch, ich hab selber auch eine Unordnung in meinen :smiley:

mfG aus der Schweiz
swarley_swarley

Ich habe gestern testhalber einen 8 Bit R-2R D/A Wandler gebastelt, mein erster Versuch mit SMD Widerständen auf einer Punktraster-Platine. Hat erstaunlich gut funktioniert, leider nur mit 6 Bit, da der Uno keinen Port mit mehr freien Pins hat. Ein Sägezahn kam jedenfalls schön gleichmäßig raus. Ich hätte ja gerne ein Bild des Widerstandsgrabs gepostet, habe aber leider keine Kamera, die so kleine Dinge (4*9 Lochrasterpunkte) aufnehmen kann.

Damit bin ich auf dem Uno im Leerlauf (ohne sonstigen Code, ohne delay) mit 36 Stützstellen (10°) auf ca. 11 kHz gekommen. Es hat einige Zeit gedauert, bis ich die Tabelle halbwegs ordentlich ausgerechnet bekommen habe, seltsamerweise liefert die sin() Funktion zu große Werte für die negative Halbwelle? Am positiven Maximum bekomme ich 61-62-61 ausgerechnet, am Minimum aber 0-0-0. Da wäre noch Verbesserungspotiential drin, wenn man die positive Halbwelle spiegelt.

Nach meinen bisherigen Erfahrungen mit Interrupts kommt man damit (bei 16MHz Takt) maximal auf 100kHz, für 5kHz Sinus könnten dann höchstens 20 Stützstellen verwendet werden, vermutlich eher nur 16. Auf schnelleren Prozessoren (vermutlich) entsprechend mehr. Die restliche Glättung des Sinus müßte man dann mit einem Tiefpass-Filter vornehmen, sonst sieht man am Oszi die Stufen noch sehr deutlich. Ein DAC mit höherer Auflösung hilft da nicht, wenn man den nicht schneller ansteuern kann.