Hmmm, zuerst mal nur so: die Nullen werden üblicherweise nicht geschrieben; zum Start sind die Register genullt und meist schaltet man zur Laufzeit nicht dauernd um . . . WENN Du etwas explizit löschen möchtest dann ist dies üblich:.. ich stehe auf dem Schlauch .. F_CPU = 20 MHz .. Timer 1: PWM Mode 14 (Fast PWM, TOP ICR1, Prescaler 8 ) ..
So. Deine Timer1-initialisierung, modifiziert (und jedenfalls für MICH übersichtlicher und informativer - NUR Befehle machen selbst Profis nicht oft)Code:TCCR1A &= ~(1<<COM1A1)|(1<<COM1B1); // Clear/set OC1A/OC1B on Cmp Match S132
Anmerkung: Fehler vorbehalten, ich habs ja nicht getestetCode:TCCR1A |= (1<<COM1A1)|(1<<COM1B1); // Clear/set OC1A/OC1B on Cmp Match TCCR1A |= (1<<WGM11); // Mode Fast PWM, TOP ICRn, 1. Teil TCCR1B |= (1<<WGM13)|(1<<WGM12); // Mode Fast PWM, TOP ICRn, 2. Teil TCCR1B |= (1<<CS11); // clkI/O/8 (From prescaler) // => 20e6/8 = 2 500 000 TCCR1C = 0; // Wo in Deinem Code wird denn // IRGENDEIN Bit auf 1 gesetzt ?? // Würde ich nicht coden ICR1 = 249; // 10kHz (F_CPU / (Prescaler * (ICR1 + 1))) // Die 10k sind ein netter Wunsch aber .. // .. das Timing Diagramm auf S 121 des // ATmega164A-PA_bis_1284-P_8272G_01-15 // erklärt, dass es doch 20 kHz sind. // Daher der Name "FAST"-PWM)
Bei mir wird z.B. so initialisiertPS: Kleine Erkläuterung zum Nullen eines BitsCode:// ===== s. Dokument ATmega164A-PA_bis_1284-P_8272G_01-15 // ============================================================================= = // == PWM-Routinen zur Motoransteuerung void TC1PWM_init(void) //Init Timer/Counter1 f Erzeugung des PWM-Signals { // TCCR1A &= ~(1<<COM1A1)|(1<<COM1B1); // Clear/set OC1A/OC1B on Cmp Match S132 // DISABLED OC1A/OC1B bzw Port PB1/B2, ERST mit Motorstart enablen TCCR1A |= (1<<WGM10); // Dazu noch TCCR1B |= (1<<WGM12); // Fast PWM, 8 Bit TOP=0xFF=dez255 133 TCCR1B |= (1<<CS11); // Prescaler ist clk/8 => 9,8 kHz 135 // theoretisch: 20 MHz / 8 / 255 => 9,803922 kHz, DMM-Messung 9,78 kHz TIMSK1 &= ~(1<<OCIE1A)|(1<<OCIE1B); // T/C1 Oput CmpA+B Match intrrpt dsabld TIMSK1 &= ~(1<<TOIE1); // T/C1 Ovrflw intrrpt dsabled ~S137 OCPWM1 = 0; // PWM auf Null setzen OCPWM4 = 0; // PWM auf Null setzen isum12 = isum34 = 0; ie_mot12 = ie_mot34 = 0; ie_alt12 = ie_alt34 = 0; } // Ende void TC1PWM_init(void) // ============================================================================= =Code:TCCR1A &= ~(1<<COM1A1); TCCR1A ... Ziel & ... UND-Operator &= ... das UND als Zuweisungsoperator, => weist das Ziel als Parameter zu ~ ... der unäre Operator bildet das Bit-Komplement => "1" (in 1<<COM1A1) wird zur "0"






					
					
					
						
Zitieren
 Hoffentlich liegt das Ziel auch am Weg 

Lesezeichen