Gast
#3146450
Hey Leute,
ich möchte mit einem atmega48 mithilfe des Timer1 drei Modellbauservos
ansteuern. Allerdings habe ich das Problem, das der Chip keine Impulse
mehr ausgibt wenn ich den Wert im OCR1A Register höher als 42000
einstelle. Dadurch kann ich meinen Servo nicht bis an die Endlage
fahren. Hier mal ein Auszug aus dem Programm mit der Initialisierung des
Timers und der dazu gehörigen ISR:
ISR(TIMER1_COMPA_vect) {
PORTB&=~((1<<PB0)|(1<<PB1)|(1<<PB2)); //aktuelleImpulsausgabe beenden
Servo_Port = Servo_Bit[Servo_Nr]; //nächsten Impuls beginnen
OCR1A = 44000; //die länge des nächsten Impulses
festlegen
TCNT1 = 0; //das Zählregister zurrücksetzen
//die Zählvariable erhöhen, damit beim nächsten Durchgang der nächste
Pin gsetzt wird
Servo_Nr++;
if(Servo_Nr==Servo_Anzahl){
Servo_Nr=0;
}
}
int main(void) {
DDRB|=(1<<PB0)|(1<<PB1)|(1<<PB2); //Ausgänge für die Servos
TCCR1B |= (1<<WGM12)|(1<<WGM13)|(1<<CS10);//Timer1 im CTC initialiserien
TCCR1A&=~((1<<WGM10)|(1<<WGM11));
TIMSK1 |= (1<<OCIE1A); //Interrupt für Timer1
freigeben
ICR1H = 0xFF; //Top Wert für Timer1
festlegen
ICR1L = 0xFF; //Top Wert für Timer1
festlegen
sei();
}
Das das ICR1 Register so beschrieben wird, war nur ein test, weil mir so
langsam die Ideen ausgehen woran das liegen könnte. Danke schon mal im
Voraus.