Forum: Compiler & IDEs Einstellbare Pulsbreiten ausgeben


von M. E. (engelhard)


Lesenswert?

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 :-(

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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?

von M. E. (engelhard)


Lesenswert?

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