Datum:
Angehängte Dateien: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.
Datum:
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?
Datum:
Angehängte Dateien: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.







