Hallo,
ich versuche aktuell eine PWM auf einem ATMEGA644P zu realisieren, komme
aber trotz Tutorial und langer suche nicht weiter.
Ich nutze das Atmel Studio 7 und einen AVRISP mkII und progammiere in C.
Der Controller nutzt den interen Takterzeuger, hier habe ich keine
Veränderungen vorgenommen
Hier die Codeausschnitte:
1 | DDRB = (1<<DDB3);
|
2 |
|
3 | /********************************************************************/
|
4 | /* Init TC0 -> LED PWM */
|
5 | /********************************************************************/
|
6 | //Inverting mode for OC0A -> PB3
|
7 | TCCR0A |= (1<<COM0A1) | (1<<COM0A0);
|
8 |
|
9 | //Fast PWM
|
10 | TCCR0B |= (1<<WGM02);
|
11 | TCCR0A |= (1<<WGM01);
|
12 | TCCR0A |= (1<<WGM00);
|
13 |
|
14 | //Set clock soure (activate timer)
|
15 | TCCR0B |= (1<<CS01);
|
16 |
|
17 | OCR0A = 255;
|
Den Ausgang habe ich über einen 10k Widerstand auf Masse gelegt und
versuche das Signal mit einem Oszilloskop zu messen.
Leider liegt der Ausgang jedoch dauerhaft auf 0V, unabhängig davon
welchen Wert ich in OCR0A schreibe.
Ändere ich die Konfiguration von OC0A auf Toggle, kann ich eine
Rechteckfrequenz mit von OCR0A messen. Diese hat jedoch immer ein
Tastgrad von 0,5.
Was mache ich falsch?