Forum: Mikrocontroller und Digitale Elektronik Timer/PWM für kurze Impulslänge auf lange Periodendauer


von Thomas (Gast)


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

von johnny.m (Gast)


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...

von johnny.m (Gast)


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

von Karl heinz B. (kbucheg)


Lesenswert?

Das gewünschte Timing stinkt schon sehr verdächtig
nach einem Servo-Timing :-)

Durchsuche mal das Forum. Servo Ansteuerungen sind
ein Dauerbrenner.

von Stefan G. (steg13)


Lesenswert?

> Ich möchte bei einem ATTiny26 die beiden PWM Ausgänge nutzen.

ist damit gemeint
A. Ausgang OC1A und OC1A\
B. Ausgang OC1A,OC1A\,OC1B,OC1B\

Im Fall A hätte man ja einen Timer übrig.
Lässt sich eigentlich der Ausgang Timer1 als externer Takt Timer0 
zuführen?

von AVRFan (Gast)


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.

von johnny.m (Gast)


Lesenswert?

Ach so...

von Peter D. (peda)


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

von Thomas (Gast)


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

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.