Hallo,
Ich versuch gerade aus einem ATMega162, der zwei 16Bit Timer mit je zwei
Kanälen besitzt vier verschiedene Signale herauszubekommen. Prinzipiell
müsste das doch möglich sein?
So schaut mein bisheriger code dafür aus:
1 | // Ausgänge setzen
|
2 | //**********************
|
3 | DDRD|= ((1<<PD4)|(1<<PD5));
|
4 | // Set OC1A (PD5) an OC3A (PD4) as an Output
|
5 | DDRB|= ((1<<PB4));
|
6 | // Set OC3B (PB4) as an Output
|
7 | DDRE|= ((1<<PE2));
|
8 | // Set OC1B (PE2) as an Output
|
9 |
|
10 | // Timer 1
|
11 | //**********************
|
12 | TCCR1A &= ~((1<<COM1A0)|(1<<COM1B0)|(1<<WGM10));
|
13 | TCCR1A |= ((1<<COM1A1)|(1<<COM1B1)|(1<<WGM11));
|
14 | // Celar OC1A on Compare Match, set OC1A on TOP
|
15 |
|
16 | TCCR1B &= ~((1<<CS10)|(1<<CS12));
|
17 | TCCR1B |= ((1<<WGM13)|(1<<WGM12)|(1<<CS11));
|
18 |
|
19 | ICR1 = 50000;
|
20 | // set PWM value for Counter-TOP
|
21 |
|
22 | // Timer 3
|
23 | //**********************
|
24 | TCCR3A &= ~((1<<COM3A0)|(1<<COM3B0)|(1<<WGM30));
|
25 | TCCR3A |= ((1<<COM3A1)|(1<<COM3B1)|(1<<WGM31));
|
26 | // Celar OC1A on Compare Match, set OC1A on TOP
|
27 |
|
28 | TCCR3B &= ~((1<<CS30)|(1<<CS32));
|
29 | TCCR3B |= ((1<<WGM33)|(1<<WGM32)|(1<<CS31));
|
30 |
|
31 | ICR3 = 50000;
|
32 |
|
33 |
|
34 | // Startwerte setzen
|
35 | //**********************
|
36 | OCR1A = 2750;
|
37 | OCR1A = 5050;
|
38 | OCR3A = 3500;
|
39 | OCR3B = 4500;
|
Nun ja, ich mess auch an den Ausgängen OC3B (PB4) und OC1B (PE2) schöne,
saubere PWM-Signale. Jedoch an den anderen beiden Ports kommt irgendwie
Mist heraus. Das Signal besteht iwie nur aus zwei entgegengesetzten
Peaks (falls jemand wünnscht poste ich ne ähnliche Grafik zur
verdeutlichung).
Kann das sein muss ich die Timer synchronisieren? Oder gehts das was ich
vor hab prinzipiell nicht?
Wäre echt dankbar für ein wenig Hilfe, bin so langsam am verzweifeln.
Gruß Sven