Hallo zusammen,

ich bin ein blutiger Anfänger in diesem Bereich, deshalb entschuldigt bitte, falls ich doof frage und seid geduldig mit euren Erklärungen
Nachdem ich in einem anderem Forum keine Hilfe mehr bekam (Die letzte Antwort war "Nimm dir das Datenblatt und werd flügge"), habe ich mir zwar das Datenblatt angeguckt (hatte ich auch schon davor :-D), doch so richtig schlau werde ich da leider immer noch nicht draus....

Nach einigen Googlen habe ich dann dieses Forum hier gefunden und einige Beiträge durchgelesen und ich denke, hier sind viele nette und kompetente Köpfe

So, nun zu meinem Problem, bei dem ihr mir hoffentlich helfen könnt

Ich habe eine kleine Schaltung mit einem ATMega8 entworfen, mit der ich die Gartenbeleuchtung meiner Mutter etwas "Pepp" verleihen will (also nicht nur doof leuchten, sondern bisschen dimmen, lauflicht, etc...).
Dazu benutze ich derzeit 2 Timer. Timer1 wechselt durch die verschiedenen Programme durch (Timer1, weil 16bit-Timer und jedes Beleuchtungs-Programm ja schon etwas andauern sollte...) und Timer0 z.B. für einige Beleuchtungsprogramme selber: Aufsteigende oder Absteigende Reihenfolge des Anschaltens der LEDs.

Diese 2 Timer sind also schonmal weg und nun wollte ich die LEDs mittels PWM dimmen und im zweiten Schritt die Helligkeit mittels Timer0 variieren lassen.
Die LEDs benutzen übrigens komplett PORTB und D.

Ich denke ich muss hier erstmal keinen Code posten, da ich ja die Hardware-PWM benutzen will, falls ich mich irre, sagt Bescheid.

So, ich hab mir also das Datenblatt durchgelesen und da steht drin, dass Timer2 über eine phasenkorrekte PWM verfügt und die wollte ich dann also benutzen. Ist das allgemeine Vorgehen dafür so?
  1. Im TIMSK die entsprechenden Interrupts "erlauben". Ich denke ich werde die brauchen, siehe (*)
  2. LSB von WGM21 auf 1 setzen, um die phasenkorrekte PWM zu benutzen
  3. Im OC2 die Helligkeit einstellen oder eben wie hoch der Timer zählen soll
  4. (Über eine COM21 kann man eine (nicht)invertierte PWM benutzen)
  5. Nun wird hoffentlich die entsprechende Waveform am OC2-Pin (muss auf output geschaltet sein) erzeugt. Da hier ja nur eine Waveform am OC2-Pin erzeugt wird und ich jedoch PORTB und D brauche, werde ich wohl um die Interrupts nicht herum kommen, oder? (siehe (*))


Nun einige Fragen, die mir auf der Seele brennen
  1. Ist das Vorgehen oben überhaupt korrekt?
  2. Wird die Waveform am OC2-Pin ohnen irgendwelchen Code im InterruptHandler erzeugt (Vermutung Ja, da ja Hardware PWM)?
  3. Wie kann ich damit meine Ports pulsweitenmodellieren, was ja mein eigentlich Ziel ist. Eine Waveform nur an einem Pin bringt mir nicht sooo viel...


Ihr würdet mir einen riesigen Gefallen tun, wenn ich ihr euch mal einige Momente Zeit für mich nehmen könntet

Vielen Dank im Voraus,
Eroli