Forum: Mikrocontroller und Digitale Elektronik 3-Kanal-PWM mit ATmega8


von Simon H. (sim_h)


Lesenswert?

Hallo Forengemeinde,
ich möchte mit einem ATmega8 ein 3-Kanal-PWM realisieren.
Hierzu nutze ich folgenden Initialisierungscode:
1
  DDRB = (1 << PB1 )|(1 << PB2)|(1 << PB3);
2
  TCCR1A = (1<<COM1A1) | (1 << COM1B1)| 
3
           (1<<WGM11) | (1<<WGM10);
4
  TCCR1B = (1 << CS10);
5
  TCCR2 |=  (1 << WGM20) | (1 << CS20) | (1 << COM21);
6
  TCCR2 |= (1 << CS20);

Und hinterher weise ich mit OCR1A, OCR1B und/oder OCR2 den entspr. Wert 
zwischen 0 und 1024 zu.

Das Problem: Nur die an OCR1A angeschlossene LED tut, was sie soll, die 
beiden anderen leuchten immer mit der maximalen Helligkeit.

Danke im Voraus.

simh

von Steffen (Gast)


Lesenswert?

Simon H. schrieb:
> Und hinterher weise ich mit OCR1A, OCR1B und/oder OCR2 den entspr. Wert
> zwischen 0 und 1024 zu.
>
> Das Problem: Nur die an OCR1A angeschlossene LED tut, was sie soll, die
> beiden anderen leuchten immer mit der maximalen Helligkeit.

Timer0 und 2 sind 8bit Timer, da wird das nix bis 1024

von Simon H. (sim_h)


Lesenswert?

Ich habe den entsprechenden Code jetzt bei OCR1B und OCR2 abgeändert, es 
gibt nur eine, sehr interessante Veränderung: Jetzt sind die Abstufungen 
bei der OCR1A-LED größer, die anderen beiden leuchten weiterhin mit 
voller Leuchtkraft.

Trotzdem Danke!

simh

von Manuel S. (steinerhippo)


Lesenswert?

Wie/Wo veränderst du die Compare Register? Einfach in der main Methode? 
Oder hast du hierfür auch noch Interrupts?

von Simon H. (sim_h)


Lesenswert?

Nein, im gesamten Programm gibt es keinen einzigen Interrupt.
Das findet alles in der main() statt.

simh

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.