Guten Abend!
Ich hab ein Problem mit Timer 1 des Atmega 32.
Ich möchte für eine spätere Anwendung eine PWM mit variabler Frequenz
erzeugen.
Ich benutze dazu die Fast PWM mit variabler Frequnz und Teiler 1 und
möchte, dass der Ausgang OC1A den High-Zustand bekommt, wenn ein Match
eintritt. Im ersten Ansatz möchte ich ein Tastverhältnis von 1:1 haben.
Nach meinem Verständnis wird in diesem Modus bis zum Wert von ICR1
gezählt. Dann beginnt der Timer von vorne. Über ICR1 wird demnach die
Frequenz der PWM eingestellt.
Und so habe ich das konfiguriert:
1 | int main (void)
|
2 | {
|
3 | DDRD |= (1 << PD5);
|
4 |
|
5 | TCCR1A |= (1 << COM1A1) | (1 << COM1A0) | (1 << WGM11);
|
6 | TCCR1B |= (1 << WGM13) | (1 << WGM12);
|
7 |
|
8 | ICR1 = 444;
|
9 |
|
10 | OCR1A = 222;
|
11 |
|
12 | TCCR1B |= (1 << CS10);
|
13 |
|
14 | while (1)
|
15 | {
|
16 | asm volatile ("nop");
|
17 | }
|
18 | }
|
Ergebnis ist: Der Portpin gibt dauerhaft High-Signal.
In einer anderen Version habe ich das zu Testzwecken mit Interrupt
gemacht, um zu prüfen ob der Timer überhaupt läuft. In der ISR sollte er
nur PORTB hochzählen. Das hat er getan, woraus ich schließe, dass der
Timer funktioniert.
Was habe ich falsch gemacht?
Grüße
Dennis