Forum: Mikrocontroller und Digitale Elektronik PWM und Timer gleichzeitig?


von Kay H. (kayh)


Lesenswert?

Hallo,

Ich stelle mir schon seit zwei Tagen die Frage, ob es möglich wäre, den 
Timer1 eines Mega16 sowohl als Timer/Counter als auch dessen Pwm-Kanäle 
(wenigstens Fast Pwm) gleichzeitig zu benutzen?
Das Wälzen von Büchern und Google brachte mir keine Erkenntnisse...
Habt ihr eine Antwort?

Danke, Kay

von cppler (Gast)


Lesenswert?

Lies das Datenblatt und verstehe was die OCR Register tun.
Wenn Du genau Dein Problem erläuterst kann Dir sicherlich direkt 
geholfen werden.
Also entweder genau beschreiben was Du erreichen willst oder den Code 
der nicht geht hier einstellen ...

von c-hater (Gast)


Lesenswert?

Kay H. schrieb:

> Ich stelle mir schon seit zwei Tagen die Frage, ob es möglich wäre, den
> Timer1 eines Mega16 sowohl als Timer/Counter als auch dessen Pwm-Kanäle
> (wenigstens Fast Pwm) gleichzeitig zu benutzen?

> Habt ihr eine Antwort?

Natürlich, die Antwort ist ein eindeutiges jain.

Es hängt schlicht von den Randbedingungen der geplanten Nutzung ab, über 
die du ja in deiner unermeßlichen Weisheit komplett den Schleier des 
Schweigens gebreitet hast.

von batman (Gast)


Lesenswert?

Prinzipiell kann man einen Timer/Counter immer als Timer/Counter 
benutzen. ;)

von Kay H. (kayh)


Lesenswert?

Ich benötige wenigstens 2 Timer als Timer. Timer 0 soll eine 
Ablaufsteuerung übernehmen. Alle 2ms einen Überlauf, damit möchte ich 
ein Quasi-Multitasking realisieren. Timer 1 soll im Capture-mode laufen 
und Pulslängen messen. Zusätzlich möchte ich ein LCD über Pwm im 
Kontrast steuern als auch dessen Helligkeit. Und einen dritten Pwm- 
Kanal möchte ich haben, um noch eine weitere Led unabhängig davon in der 
Helligkeit zu steuern. Der Code steht noch nicht, deswegen kann ich 
keinen veröffentlichten...

von Peter D. (peda)


Lesenswert?

Man kann z.B. auch die UART oder den ADC als Timer nehmen, also in einem 
konstanten Intervall einen Interrupt erzeugen.

Oder den pinkompatiben ATmega1284 nehmen, der hat 4 Timer.

von Carsten R. (kaffeetante)


Lesenswert?

Du kannst mit einem Timer/Counter ein PWM-Signal ausgeben. Die Hardware 
toggelt den Pin selbstständig und vollautomatisch. Zusätzlich kannst du 
die Interrupts aktivieren und synchon! zur PWM Software ausführen 
lassen.

Beispielsweise kannst du deine "Systemuhr" fürs Multitasking bei jedem 
Overflow-Interrupt des LCD-Timers einen "Klick" machen lassen, 
zuzätzlich zum Pin-toggle der Hardware.

von Amateur (Gast)


Lesenswert?

Was immer wieder vergessen wird ist, man kann einen Timer auch sehr 
einfach, für verschiedenen Zeiten, und zwar gleichzeitig, verwenden.

Das Schema dafür ist recht einfach:

Begin ISR (alle 1 ms aufgerufen)
if (PrellZeit) --PrellZeit;   // Genutzt zur Tastenentprellung
if (BlinkZeit) --BlinkZeit;   // Blinkzeitgeber
if (BeepZeit)  --BeepZeit;    // Für einen Piepser
Ende ISR

In der Hauptschleife können die Variablen jederzeit gesetzt werden z.B. 
eine Tastaturentprellung und ein Blinker durch:
...
// Taste betätigt
If (...) {
PrellZeit = 300;    // 300 ms
}
// Taster immer noch betätigt und Prellzeit abgelaufen?
If (... && !PrellZeit) {
}
...
// Blinker
If (...) {
BlinkZeit = 2000;  // 2 s
}
// Blinkzeit abgelaufen?
If ( ... && !BlinkZeit ) {
}
...
// weiter in der Hauptschleife

von cppler (Gast)


Lesenswert?

Eine weitere Methode ist Soft-PWM die reicht mehr als aus für LED und 
LCD.
Schau Dir den Artikel hier darüber an.

von Bernie (Gast)


Lesenswert?

Die Kontraststeuerung über PWM ist Quatsch, den Kontrast
optimiert man mit einem Poti, oder einem Trimmer.
Was hat man davon, den LCD-Kontrast abzuschwächen?

Ansonsten sehe ich kein Hindernis, den Timer1 frei
laufen zu lassen (NORMAL-Mode):

- Kommt ein Capture-Event, liest du im Capture-IRQ den
Zählerstand aus.

- Nebenbei schalten sich die Ports OC1A und OC1B ein und
aus, je nachdem wie du nach Table 44 die COM1A1/COM1B1
und COM1A0/COM1B0 Bits setzt - wobei du die Ein-, oder
Ausschaltdauer mit den Registern OCR1AH/OCR1AL und
OCR1BH/OCR1BL vorgibst.

Wenn die Zykluszeit von Timer1 kleiner, als 10 ms ist,
gibt das zwei brauchbare Helligkeitssteuerungen. :-)

von Kay H. (kayh)


Lesenswert?

Danke für die vielen konstruktiven Beiträge. Dem Hinweis mit dem OCR bin 
ich nachgegangen um herauszufinden, dass der Timer im FastPWM-Mode bei 
einem Überlauf auch das TOV-Flag setzt.
@Peter: Den Ansatz mit der UART finde ich interessant. Wie funktioniert 
das?

von Kay H. (kayh)


Lesenswert?

Die Soft-Pwm aus dem Tutorial möchte ich in dieser Form nicht anwenden. 
Es macht für mich keinen wirklichen Sinn, IN einer ISR einen weiteren 
Timer laufen zu lassen.
Allerdings hat es mich auf eine andere Idee gebracht. Ich denke, es 
dürfte für die Steuerung der Helligkeit eines Displays ausreichend sein, 
wenn man diese 10%-weise einstellen kann. Also pro Überlauf des Timer 1 
(alle 2 ms) eine Variable von 0-9 und wieder von 0 beginnend hochzählen 
zu lassen und abhängig von den Zählerständen dieser Variablen die 
Beleuchtungs-LED ein- und auszuschalten.
Und ja- möglicherweise ist die Kontraststeuerung des Displays über 
Software recht sinnfrei. Ich hatte mir allerdings davon versprochen, 
evtl. automatisch auf die Umgebungstemperatur reagieren zu können.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Bernie schrieb:

> Die Kontraststeuerung über PWM ist Quatsch

Ist es nicht.

> den Kontrast
> optimiert man mit einem Poti, oder einem Trimmer.

Ja. Das klappt für genau eine Umgebungstemperatur. Dann trägst du das 
Gerät an einem kalten Wintertag nach draußen und siehst nach zwei, drei 
Minuten garnix mehr auf dem Display. Dann schraubst du wieder an deinem 
blöden Poti rum, ggf. nach Zerlegung des Gehäuses...


Wie praktisch wäre es doch, einfach mit einem Sensor die 
Umgebungstemperatur zu erfassen und die Kontrastspannung abhängig davon 
auf den optimalen Wert für diese Temperatur zu bringen. Oops... Jetzt 
wäre PWM doch ganz praktisch...

von c-hater (Gast)


Lesenswert?

Kay H. schrieb:

> Ich benötige wenigstens 2 Timer als Timer. Timer 0 soll eine
> Ablaufsteuerung übernehmen. Alle 2ms einen Überlauf, damit möchte ich
> ein Quasi-Multitasking realisieren. Timer 1 soll im Capture-mode laufen
> und Pulslängen messen.

OK. Damit eignet sich Timer1 schonmal prinzipiell dazu, nebenbei den 
dritten PWM-Kanal auf OC1B zu liefern.

Von den drei geplante PWM-Nutzungen wäre am besten die 
Konstraststeuerung geeignet, an diesem PWM-Kanal zu laufen, denn die muß 
sich mit Sicherheit nur vergleichsweise langsam ändern, da stört also 
die lange Zykluszeit durch den für die Capture-Funktion idealerweise 
anzustrebenden vollen Zählumfang des Timers nicht weiter.

von Kay H. (kayh)


Lesenswert?

So, kleiner Zwischenstand- es funktioniert prinzipiell, ich bin aber 
dennoch davon abgekommen, OC1A/B zu benutzen.
Dadurch, dass ich die Capturefunktion noch brauche und die benötigte 
maximale Periodenlänge im Mehrere-100-ms-Bereich liegen wird, ist eine 
Dimmung mit Timer1 ungeeignet.
Die Kontraststeuerung habe ich vorerst über Soft-PWM realisiert, 
fraglich ist aber, ob ich sie wirklich brauche: Der Kontrast hat beim 
Test im Kühlfach keine für mich merkliche Verschlechterung ergeben. Das 
Display wurde lediglich sehr träge.

Danke an alle...

: Bearbeitet durch User
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.