Hi,
ich experementiere seit einer Weile mit AVRs und möchte demnächst ein
X-Ufo selbst basteln.
Dabei komme ich nicht um PWM herum. Grundsätzlich habe ich durch
Ausprobieren einiges hinbekommen wie USART und ADC.
Jedoch habe ich ein Problem mit PWM und Timer0.
In Foren habe ich mehrere Beispiele gefunden, diese funktionieren aber
auch nicht.
Hier mein aktueller Code:
1 | void initPWM(void)
|
2 | {
|
3 | DDRB = 0xFF;
|
4 | DDRD = 0xFF;
|
5 |
|
6 | TCCR0A = (1<<WGM00)|(1<<COM0A1)|(1<<COM0B1); // PWM, phase correct
|
7 | TCCR0B = (1<<CS01) |(1<<CS00); // enable counter
|
8 |
|
9 | OCR0A = 0x4F;// witdh
|
10 | OCR0B = 0xCF;
|
11 |
|
12 | TCCR2A = (1<<WGM20)|(1<<COM2A1)|(1<<COM2B1); // PWM, phase correct
|
13 | TCCR2B = (1<<CS21) |(1<<CS20); //enable counter
|
14 |
|
15 | OCR2A = 0x4F;// witdh
|
16 | OCR2B = 0xCF;
|
17 | }
|
Während die Spannungen hier bei Timer 2 (und Timer 1 in vorherigen
Tests) alle richtig waren, funktioniert Timer 0 nicht wie er soll bzw an
den beiden Ports (PD3 und PB3) messe ich die gleiche Spannung von ca.
1,6 V .
(An OCR2B / PD3 messe ich beispielsweise rund 4 V, nach ausrechnen
0xCF/256*5V kriege ich 4,04V raus, was also stimmt; genauso mit OCR2A /
PB3 mit ca 1,5 V)
Ich habe daraufhin schon alle verschiedenen Bit-Kombinationen nach dem
Datenblatt versucht, aber es hat nichts gebracht.
Was ich zudem recht merkwürdig finde:
Wenn ich Timer0 mit PMW aktiviere, wird der AVR nach kurzer Zeit
vergleichsweise warm.
Bei Timer2 und Timer1 bleibt er immer kühl.
Hat jemand eine Idee, woran es liegen könnte ?
Danke im voraus
Alex