mikrocontroller.net

Forum: Compiler & IDEs Timer Output Compare Pin tut nichts


Autor: delicious_cake (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
//TIMER 1
  //Timer 1, 10-bit PWM, Phase Correct. 
  TCCR1A = TIMER1_PWM_PHASE_CORRECT_10_INIT;   //_BV(WGM10) | _BV(WGM11)

  //Start Timer 
  TCCR1B = TIMER_CLOCKSPEED_FULL;               //_BV(CS10)

  // Enable OC1 as output. 
  SET_BIT(PORTC,6);
  SET_BIT(DDRC,6);
  TCCR1A |= _BV (COM1A1);

  //Set Compare Register
  OCR1A=512;

Vorgegangen bin ich nach diesem Tutorial:
http://www.mikrocontroller.net/articles/AVR_PWM#C_2
TCCR1A = (1<<WGM10)|(1<<COM1A1); // PWM, phase correct, 8 bit.
TCCR1B =  (1<<CS11) |(1<<CS10); // set clock/prescaler 1/64 -> enable counter
 
....
 
PORTB = 0xff; // enable pull-ups for inputs, set outputs high, Pin LED auf 1 setzen
DDRB  =  1<<LED;    // Port B1 als Ausgang
 
....
 
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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: delicious_cake (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke fürs Feedback.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.