mikrocontroller.net

Forum: Compiler & IDEs Einstellbare Pulsbreiten ausgeben


Autor: M. Engelhard (engelhard)
Datum:

Bewertung
0 lesenswert
nicht 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 :-(

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: M. Engelhard (engelhard)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.