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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren