hallo,
ich möchte gerne die Hardware PWM Funktion des Atmel kontroller nutzen,
allerdings mache ich anscheinend einen Konfigurationsfehler.
µC: AT90USB162
Timer1 16 Bit --> Mode 3 --> 10 Bit PWM, Phase Correct
Im Anhand sind Screenshots vom Datenblatt wie konfiguriert werden muss.
Output Compare Settings soll sein:
COMnA1/COMnB/COMnC1 COMnA0/COMnB0/COMnC0
1 0
Clear OCnA/OCnB/OCnC on compare match when up-counting. Set
OCnA/OCnB/OCnC on compare match when downcounting.
Meine Timer Init Code:
1 | //TIMER 1
|
2 | //Timer 1, 10-bit PWM, Phase Correct.
|
3 | TCCR1A = TIMER1_PWM_PHASE_CORRECT_10_INIT; //_BV(WGM10) | _BV(WGM11)
|
4 |
|
5 | //Start Timer
|
6 | TCCR1B = TIMER_CLOCKSPEED_FULL; //_BV(CS10)
|
7 |
|
8 | // Enable OC1 as output.
|
9 | SET_BIT(PORTC,6);
|
10 | SET_BIT(DDRC,6);
|
11 | TCCR1A |= _BV (COM1A1);
|
12 |
|
13 | //Set Compare Register
|
14 | OCR1A=512;
|
Vorgegangen bin ich nach diesem Tutorial:
http://www.mikrocontroller.net/articles/AVR_PWM#C_2
1 | TCCR1A = (1<<WGM10)|(1<<COM1A1); // PWM, phase correct, 8 bit.
|
2 | TCCR1B = (1<<CS11) |(1<<CS10); // set clock/prescaler 1/64 -> enable counter
|
3 |
|
4 | ....
|
5 |
|
6 | PORTB = 0xff; // enable pull-ups for inputs, set outputs high, Pin LED auf 1 setzen
|
7 | DDRB = 1<<LED; // Port B1 als Ausgang
|
8 |
|
9 | ....
|
10 |
|
11 | OCR1A=128; // LED 50%
|
Bei der Simulation mit dem AVR Simulator in GCC werden alle Bits richtig
gesetzt, aber wenn ich das HEX-File flashe tut sich am PINC6 nichts. Bei
der Simulation habe ich keine setzen beim Runterzählen feststellen
können.
Was mache ich falsch?
Danke für jede hilfreiche Antwort.