Frequenzgenerator Programmieren

Hallo
Ich würde gerne einen Frequenzgenerator Programmieren. Sprich ich will auf Knopfdruck verscheidene frequenzen erzeugen.

und das am besten auch auf verschiednenen Pins.

Und als I Tüpfelchen auch nicht nur mit 5V pegel, sondern mit 12V pegeln

jemand nen Tipp

An welchen Frequenzbereich hast Du gedacht.
Grüße Uwe

Bis 1 kHz guckst Du hier: http://blog.blinkenlight.net/experiments/measurements/flexible-sweep/. Falls Du einen "alten" Arduino hast ist die Zeitbasis leidlich OK mit einem Uno einfach nur schlecht.

neop13:
Und als I Tüpfelchen auch nicht nur mit 5V pegel, sondern mit 12V pegeln

Das sollte schaltungstechnisch keine besonders hohe Hürde sein, eine Schaltung mit Operationsverstärker als nichtinvertierender Verstärker käme mir da in den Sinn. (Wiki-Artikel Operationsverstärker)

1 Like

Hi
mit1kHz reicht mir das. sind in der regel sogar nur ein paar hundert herz die ich brauche.

Allerdings ist eine neue Aufgabe dazu gekommen:

Es muss ein Muster erstellt werden könnne. Sprich 3xhigh - 3xlow - 5xhigh usw.

und sagen wir mal ich arbeite mit 1Hz Frequenz macht er dann halt 3 sekunden high,3sekunden low, 5 sekunden high.

Also so ein Muster als feste vorgabe, welche dann unverändert bleibt. und dann die Frequenz einstellbar. Am Ende z.B. über ein poti..

Hoffe ich konnte es verständlich erklären

Das hört sich doch nach dem Leuchtturm-Projekt an. ( nur ein bisschen schneller, vielleicht )

Auch da hat Udo eine ganz abgefahrene Lösung :

Aber es geht natürlich auch mit "normaler" Programmierung, vor allem wenn es kein Dutzend, sondern nur ein Ausgabe-Pin ist.

Und ob die Frequenz auf 0,1% genau ist, scheint es nicht so ganz anzukommen, wenn du sie über ein Poti einstellst.

12V macht übrigens kein Arduino, aber jeder Transistor (wenn du sonst keine Anforderung, ausser 12V Pegel hast).

neop13:
und sagen wir mal ich arbeite mit 1Hz Frequenz macht er dann halt 3 sekunden high,3sekunden low, 5 sekunden high.

Also so ein Muster als feste vorgabe, welche dann unverändert bleibt. und dann die Frequenz einstellbar. Am Ende z.B. über ein poti..

Hoffe ich konnte es verständlich erklären

Nein war nicht verständlich. Willst du die Frequenz amplitudenmodulieren bzw codieren?

Grüße Uwe

Hi
Ich versuche es mal mit einem Bild zu verdeutlichen.
Die Trägerfrequenz an sich soll über poti oder schalter einstellbar sein. das ist auch nicht so das probelm denk ich.

Aber ich wie im Bsp mchte ich jeden schritt halt seperat beeinflussen können und das dann am ende als Schleife ablaufen lassen.

Man könnte das sicher auch mit warte Zeiten realisieren, finde ich aber etwas unsauber.

unklar ist mir nur, wie lang der Gesamtzyklus ist. In deinem Bild also, wann der nächste kurze Puls kommt, der dem ersten entspricht.
1 sec offensichtlich nicht. 1,1 sec ???

Bis 1 kHz ( 1000 µs ) Schrittlänge solltest du das mit "normaler" loop - Programmierung a la BlinkWithoutDelay auf micros()-Basis
hinbekommen.

Alternativ, mit Timer, könntest du eine kleine ISR bauen, die für jeden Schritt geweckt wird.
Die zählt den Schritt hoch und stellt den dazugehörigen Ausgang.

loop() liest dann nur das Poti und verändert bei Bedarf die Timer-Frequenz.

naja wenn man das Bild anschaut ist das eine folge die 1,2 Sec dauer und sich dann halt immer wieder wiederholt.

Dieses Muster möchte ich halt gerne vorgeben. und die Ei nstellbare frequenz bestimmt halt nur wie schnell von einem Schritt zum nächsten gegangen wird.

hallo
Kann denn keiner hier weiter helfen?
Danke

neop13:
Kann denn keiner hier weiter helfen?

Was ist denn das Problem: Das Blinken oder das Einstellen der Blinkzeiten?

Für Dein Problem der Blinksteuerung in einem bestimmten Ein-Aus-Rhythmus habe ich hier mal Code gepostet:
http://forum.arduino.cc/index.php?topic=146086.msg1099068#msg1099068

Da ging es darum, nicht nur einen einzigen Ausgang in einem bestimmten Ein/Aus Rhythmus blinken zu lassen, sondern sogar mehrere gleichzeitig. Dein Problem ist quasi die Leuchtturm-Karte mit nur einem einzigen blinkenden Leuchtturm und kürzeren Blinkzeiten.

Schau's Dir mal an!

Mein Frequenzgenerator und der Leuchtturmsketch die schon genannt wurden sind ausreichend dokumentiert und sollten sich leicht anpassen lassen. Ich glaube aber, Du hast das XY Problem What is the XY problem? - Meta Stack Exchange. D.h. sag uns doch erst einmal was Du vorhast bevor Du uns nach Lösungen fragst.

ahhh ok, ich schaue es mir mal an. danke

also ich will halt am ausgang ein bestimmtes frequenzmuster ausgeben. Idealerweise sollte dieses durch eine frequenz am eingang getaktet werden..

Hinterrund ist ein Freuenzgenerator für einen Motor. genauer sogar die Simulation eines Nockenwellen / kurbelwellen Signals.
diese sind oft unterschiedlch. und wenn man ins Auto shaut gibt es da auch noch andere Signalformen. Stichwort: Schnellstart geberrad usw.)

evtl. wird es jetzt etwas deutlicher.

P.S.: Von daher ist die Leuchtturmgeshcicht schon nicht schlecht, da ich natürlich auch mehrere Signale gleichzeitig ausgeben muss. z.B. Wenn ich eiN signal eines Fahrzeuges simulieren will, welches Mehrere Nockenwellen hat

Wenn Du unter 1000Hz bleiben kannst, warum teilst Du dann die verschiedenen Frequenzen nicht in ein multidimensionales Array auf und speicherst darin, zu welcher Millisekunde ein Ausgang an bzw. wieder ausgeschaltet werden soll... Du könntest dann auch noch mehrere Frequenzen hinterlegen.

freq[0][0] = 50;
freq[0][1] = 20;
^Start-/Endmillisekunde
^ 1 = on, 0 = off
^ Frequenznummer / Pin

In Deinem Programm könntest Du bei jedem Durchlauf des Loops mit zwei ineinandergeschachtelte For-Schleifen dann die jeweilien Vergleiche ziehen. Wenn also millis() == freq[0]81], dann schalte den entsprechend gemappten Pin an. und so weiter.

LG Tim

Aha, wenn ich das mit meinem Laienverständnis von Autos richtig verstehe, dann sind die Signale alle phasenverriegelt und die Frequenz ist die einzige freie Variable. D.h. das Problem besteht aus 2 Teilen:

  1. Erzeugen der Signale.

  2. Erzeugen eines variablen Takts.

  3. kann man genau wie im Leuchtturm Beispiel abfackeln

  4. kann man wie im flexible Sweep Beispiel abfackeln.

Du musst nur anstelle der mstimer2 library den ISR aus dem flexible Sweep Beispiel verwenden. Die Konstruktion funktioniert prinzipiell auch oberhalb von 1 kHz. Ich hatte nur den Parser nicht für höhere Werte ausgelegt. Auch halte ich es nur für bedingt sinnvoll jenseits von 1 kHz noch Nachkommastellen mitzuführen (denn der Quarz ist ja nur so ~20 ppm genau, vom Resonator beim Uno wollen wir gar nicht erst anfangen).

ok, muss ich mir jetzt nochmal genau ansehen. hab ic so gerade noch nicht 100% verstanden. Aber dank dir schonmal

Irgendwie hab ich kein Leuchtturm beispiel...

neop13:
Irgendwie hab ich kein Leuchtturm beispiel...

Zeigt Dein Browser in diesem Thread Reply #11 nicht an?

ahh doch stimmt schon. übersheen. habe in den standard beispielen gesucht
Danke