Ich habe hier ein Problem mit dem Timer (Mega32).
Obwohl ich meines Erachtens den Timer stoppe, befinden sich am Ausgang
von OC2 (PD7) immer noch Rechteckimpulse. Auch ein eventuelles löschen
von CS20 bringt kein Erfolg. Der Timer stoppt dann zwar aber mit dem
Ergebnis, dass der Ausgang OC2 mal sporadisch auf high oder low liegt.
Den vorliegenden Code benutze ich zum lesen von WAVE-Dateien von einer
SD-Karte.
1 | void StartTimer(void)
|
2 | {
|
3 | // CTC Mode
|
4 | TCCR1A = (0<<COM1A1) | (0<<COM1A0) | (0<<WGM11) | (0<<WGM10);
|
5 | TCCR1B = (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10);
|
6 | OCR1A = TIMER1_OCR_VALUE;
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | // Fast PWM, no prescaler
|
12 | TCCR2 = (1<<COM21) | (1<<COM20) | (1<<WGM21) | (1<<WGM20) | (1<<CS20);
|
13 | DDRD |= (1<<PD7);
|
14 |
|
15 |
|
16 | TIMSK |= (1<<OCIE1A);
|
17 | TIFR |= (1<<OCF1A);
|
18 |
|
19 | }
|
20 |
|
21 | void StopTimer(void)
|
22 | {
|
23 |
|
24 | TIMSK &= ~(1<<OCIE1A);
|
25 |
|
26 | }
|