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)
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.
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.
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.
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.
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:
Erzeugen der Signale.
Erzeugen eines variablen Takts.
kann man genau wie im Leuchtturm Beispiel abfackeln
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).