Ich möchte an einem Portpin einen Puls ausgeben der genau eine 32-Bit Zahl mal der Taktzyklenbreite breit ist. Sprich, es sollte wenn in einer uint32_t eine 1 steht bei 10MHz Takt ein Puls von 100ns rauskommen, bei 2 einer mit 200ns und bei 12345 einer mit 1,2345 ms Breite und so weiter. Ich habe jetzt schon so viel rumprobiert mit Timern, diversen Schleifen die man logischerweise nicht unterbrechen dürfte, was aber kein Problem darstellen würde. Aber irgendwie krieg ich das nicht hin weil allein die Schleifen schon einige Takte benötigen. Hat vielleicht jemand nen Lösungsvorschlag? So langsam glaub ich echt das ist mit C einfach nicht lösbar, oder mit einem 8-Bitter überhaupt nicht. Ich habe auch schon überlegt vorschiedene Arten von Schleifen zu machen wo ich wüsste dass die eine eben 3 Takte pro Durchlauf braucht und die andere 4, teilweise könnte man auch mit NOPs auffüllen. Aber allein die Abfrage kostet mich schon wieder einige Zyklen... Notfalls wäre mir auch schon die Funktion mit einer 16-Bit Zahl eine Hilfe, da bei größeren Zahlen die Genauigkeit nicht mehr sooo wichtig ist, aber nichtmal das hab ich hinbekommen :-(
Muss es wirklich bereits ab einen Takt Breite sein, oder ist das nur die Auflösung, liegt die minimale Impulsbreite aber größer? Bei der geforderten Dynamik kann man es die Timerhardware nicht komplett allein vornehmen lassen, man muss den Timer also zwischenzeitlich neu programmieren. Das wiederum braucht aber ein paar Takte Zeit. Ist das ein 1-shot-timer, oder soll der das dann irgendwie wiederholt ausgeben?
Was ich noch vergessen habe zu erwähnen: Es soll nicht nur ein einziger Puls ausgegeben werden, sondern 2 Pulse nacheinander die beide auf die erwähnte Weise einstellbar sein sollen. Die Pausenzeit zwischen den beiden Pulsen soll ebenfalls so einstellbar sein, also fällt ein einfaches PWM Signal wohl aus. 1-Shot würde reichen. Ein Repeat Modus wäre nicht schlecht, aber wann die Sequenz wiederholt wird wäre nicht so kritisch. Der erste Puls ist nicht so kritisch, da wäre eine Mindestpulslänge von 20 Zyklen ok, aber beim Einschalten wäre es wahrscheinlich eh kein Problem. Problematischer sehe ich das beim erwähnten neu laden. Und gerade da sollten es höchstens 5-10 Zyklen sein.
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.