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!