Forum: Compiler & IDEs Timer Output Compare Pin tut nichts


von delicious_cake (Gast)



Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ich sehe auf Anhieb in den gezeigten Infos keinen Fehler.

Für die Simulation bräuchte man noch die Definitionen von 
TIMER1_PWM_PHASE_CORRECT_10_INIT und TIMER_CLOCKSPEED_FULL. Und man 
müsste sehen wie dein Timer Init Code in main() aufgerufen wird und ob 
der Rest des Programmes quer schiesst.

Um ein Hardwareproblem auszuschliessen: Gelingt es dir eine LED an 
PORTC6 definiert blinken zu lassen?

von delicious_cake (Gast)


Angehängte Dateien:

Lesenswert?

hallo,

ich habe jetzt zwei kleine Testprogramme geschrieben.

im 1. werden  PIN B6 und PIN C6 ein und ausgeschalten.
im 2. wird bei einer zustandsänderung von PIN B6 OCR1A verändert.

beide Programme laufen gut.

der unterschied zu meinem hauptprogramm war nur, dass bei dem erst den 
Outpurt im register TCCR1A aktiviert habe und dann das DDR verändert 
habe. in der reihenfolge wie oben gehts gut.

übrigens danke für den vorschlag dass ich mit ner LED testen soll. das 
war zur ersten klärung ob der ausgang überhaupt geht sehr gut.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Danke fürs Feedback.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.