Timer/PWM für kurze Impulslänge auf lange Periodendauer

Gast #462284
Lesenswert?
• ▲
▼
Hallo zusammen,

sorry für den etwas langen Betreff, wußte aber nicht,wie ich's besser 
umschreiben könnte. MeinProblem ist folgendes:
Ich möchte bei einem ATTiny26 die beiden PWM Ausgänge nutzen. Das zu 
erzeugende Signal soll eine Periodendauer von 20ms haben und von 0,8ms 
bis 2,2ms high Pegel liefern.
Ich wollte nun mit möglichst hoher Präzision (Auflösung ca. 0,02ms) die 
Pulsdauer variieren. Bisher habe ich das Problem, dass die integrierten 
Timer nur 8bitter sind, ich also bei 20ms Gesamtlänge eine Auflösung von 
bestenfalls ~0,08ms erreichen kann. Gibt es eine Möglichkeit, die 
Hardware PWM etwas aufzubohren oder hilft da nur die Lösung per 
Software?
Frohes Fest

Thomas
Gast #462294
Lesenswert?
• ▲
▼
Und was soll nach den 20 ms passieren? Das von Dir beschriebene Signal 
ist ja nicht periodisch...

H     -------------
      |           |
      |           |
      |           |
      |           |
L ---0,8 
2,2----------------------------------------------------20

...und dann? Wenn das selbe Signal dann direkt wiederholt werden soll, 
dann kannst Du den H-Impuls auch nach links bis auf Null schieben...

H -------------
  |           |
  |           |
  |           |
  |           |
L 0 
1,4--------------------------------------------------------20

...weil da sonst eh keine Flanke ist und einfach einen 1,4 ms langen 
Impuls erzeugen. Das ganze dann nach 20 ms wiederholen. Aber ich vermute 
mal, Du willst was anderes...
Gast #462296
Lesenswert?
• ▲
▼
Upps, da hats die Zeilen umgebrochen...

Sollte eigentlich so aussehen:
H     -------------
      |           |
      |           |
      |           |
      |           |
L ---0,8         2,2---------------------------------------------20

bzw.

H -------------
  |           |
  |           |
  |           |
  |           |
L 0          1,4-------------------------------------------------20
Gast #462323
Lesenswert?
• ▲
▼
>Und was soll nach den 20 ms passieren? Das von Dir beschriebene Signal
>ist ja nicht periodisch...

Er will eine PWM mit folgenden Eigenschaften:

● Alle 20 ms soll der Pegel für eine kurze Zeit t auf High gehen
  --> Periodendauer = 20 ms

● t ist variabel und soll Werte zwischen 0.8 ms und 2.2 ms annehmen 
können
  --> 0.8 ms <= Pulsdauer <= 2.2 ms

● die Wahl von t soll in Schritten von 0.02 ms erfolgen können
  --> Pulsdauer-Auflösung = 0.02 ms

Wegen der 8-Bittigkeit der Hardware-Timer wird er um eine 
Software-Lösung wohl nicht herumkommen.  Aber da ein mit 8 MHz 
getakteter AVR während 0.02 ms immerhin noch ca. 100 Instruktionen 
abarbeiten kann, sollte das machbar sein.  Zeitverschwendender Code ist 
da (= im Interrupthandler) dann allerdings fehl am Platz.
#462327
Lesenswert?
• ▲
▼
Vegiß die PMW, nimm die set or clear Pin on compare Funktion.

Alles, was über 256 ist, zählst Du dann im Interrupt runter, bis dann 
der Pin im nächsten Compare gesetzt werden darf.


Etwas tricky wirds, wenn das Compare knapp nach dem vorherigen Interrupt 
kommen soll, da muß man dann schon vorher den Comparewert verkürzen, so 
daß noch Zeit für den Interrupthandler übrig bleibt, um die Pinrichtung 
fürs nächste Compare umzusschalten.

Z.B. 257 = 256 + 1 wäre zu knapp, also dann einfach auf 129 + 128 
aufteilen.


Peter
Gast #462529
Lesenswert?
• ▲
▼
Hallo zusammen,

danke erstmal für die zahlreichen Antworten. Die Fragestellung war wohl 
ein bischen konfus. So wie's der AVRFan erkannt hat stimmt's. Und ja, 
das Signal ist im Prinzip genau wie das für Servos, soll aber einem 
anderen Zweck dienen.
Naja, und so wie's aussieht werde ich dann wohl doch ein paar Zeilen 
Code mehr schreiben.
Euch allen ein frohes Fest

Thomas

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.