Guten Abend,
kann mir (blutiger Anfänger) jemand kurz den Unterschied zwischen den 
beiden PWM-modes 1 und 5 erklären?
Ich steig' gerade nicht mehr durch.
Laut Tabelle 11-5 und der Erläuterung auf Seite 77 im Datenblatt zählt 
der Timer bei Phase Correct PWM entweder von BOTTOM bis 0xFF oder von 
BOTTOM bis OCRA0, je nach Zusand der WGM-Bits in TCCR0.
Was für einen Sinn hat es überhaupt, den Timer bis OCRA0 zählen zu 
lassen? Ich dachte, der entsprechende Pin wird bei jedem compare match 
umgeschalten. Würde der Timer jetzt bei OCRA0 "umkehren", könnte man 
doch das Verhältnis der Pulsweiten zueinander gar nicht ändern, sondern 
nur die Frequenz des Umschaltens.
Was mich völlig verwirrt: ich probiere das ganze gerade an einer LED an 
PORTB0 aus, und egal ob ich WGM02 und WGM00 setze oder nur WGM00, es 
kommt immer das selbe raus.
Ich sitze gerade schon ziemlich lange vor dem Datenblatt bzw. meiner LED 
und denke, dass ich einfach irgendwo auf dem Schlauch stehe.
Hier noch der Code und wie gesagt, wird WGM02 nicht gesetzt, kommt das 
gleiche raus. (Setze ich z.B. OCRA0 = 200, leuchtet die LED stärker. 
soweit funktioniert's also schonmal):
1  | #include <avr/io.h>
  | 
2  | #include <avr/interrupt.h>
  | 
3  | #include <util/delay.h>
  | 
4  | 
  | 
5  | 
  | 
6  | int main (void)
  | 
7  | {
 | 
8  | uint16_t i=0;
  | 
9  | 
  | 
10  | sei();
  | 
11  | DDRB   |= (1<<DDB0) | (1<<DDB1);
  | 
12  | 
  | 
13  | TCCR0A |= ( (1<<WGM02) | (1<<WGM00) | (1<<COM0A1) );
  | 
14  | TCCR0B |= ( (1<<CS01) | (1<<CS00) ) ;
  | 
15  | 
  | 
16  | OCR0A=20;
  | 
17  | 
  | 
18  | while (1)
  | 
19  | {
 | 
20  | }
  | 
21  | }
  | 
Vielen Dank!