Hallo,
habe gerade ein komsiches Verhalten meines µC entdeckt und kann meinen
Fehler einfach nicht finden. Ich will 2 PWMs über den µC ausgeben lassen
und zwar über OCR0 und OCR2, also an PB7 und PB4.
Dazu habe ich zwei Funktionen erstellt:
1 | void init_pwm0(int onoff, int comparevalue)
|
2 | {
|
3 | OCR0A = comparevalue;
|
4 | DDRB = (1 << DDB7);
|
5 | // xxxxx abc
|
6 | // N= Teiler abc
|
7 | // 000 kein clock
|
8 | // 001 kein teiler
|
9 | // 010 8
|
10 | // 011 64
|
11 | // 100 256 (0=31kHz; 255=122Hz)
|
12 | // 101 1024 (0=7,8kHz, 255=30Hz)
|
13 | // f = 16MHz / (2*N*(1+OCR0A))
|
14 | if(onoff)
|
15 | TCCR0A = 0b00011101;
|
16 | else
|
17 | TCCR0A = 0b00011000;
|
18 | }
|
19 |
|
20 | void init_pwm4(int onoff, int comparevalue)
|
21 | {
|
22 | OCR2A = comparevalue;
|
23 | DDRB = (1 << DDB4);
|
24 | // xxxxx abc
|
25 | // N= Teiler abc
|
26 | // 000 kein clock
|
27 | // 001 kein teiler
|
28 | // 010 8
|
29 | // 011 32
|
30 | // 100 64
|
31 | // 101 128
|
32 | // 110 256 (0=31.250kHz; 255=122Hz)
|
33 | // 111 1024 (0=7,8kHz, 255=30Hz)
|
34 | // f = 16MHz / (2*N*(1+OCR0A))
|
35 | if(onoff)
|
36 | TCCR2A = 0b00011111;
|
37 | else
|
38 | TCCR2A = 0b00011000;
|
39 | }
|
Im Hauptprogramm starte ich diese irgendwo:
1 | init_pwm0(1, 110 );
|
2 | init_pwm4(1, 110 );
|
Leider kann ich an PB7 keine nützliche PWM sondern nur ein "Flakern"
finden. PB4 funktioniert. Sobald ich aber nur jeweils eine PWM
aktiviere, funktioniert diese, egal ob es PB4 oder PB7 ist.
Kann mein µC keine 2 PWMs gleichzeitig erzeugen??