Gast
#2638487
Hallo, Ich habe glaube ich ein Verständnisproblem mit dem Analogcomparator des ATmega8. Zur Zeit baue ich an einem BLDC Regler, muss aber sagen dass meine Programmierkenntnisse schon ein paar Jahre zurückliegen. Aber dass sollte nicht das Hauptproblem sein. Bisher läuft der Motor mit Zwangskommutierung. Um nun den Analogen Komparator zu testen. Wollte ich ein Interrupt auslösen und dabei immer ein Pin toggeln lassen. Wenn das funktioniert möchte ich dann darüber Kommutieren lassen. Zu meiner Konfiguration: PD2 => externer Interruptpin zum einlesen meines PPM-Signals der RC-Funke Funktioniert PWM mit Timer1, PB1 PWM pin. Funktioniert! Timer2 Timer für die zwangskommutierung (Interrupt). Funktioniert So und nun zum AD-Komparator: Erstmal schalte ich den Analog-Digital Wandler aus. Sollte standard Ausgeschaltet sein. Aber sicher ist sicher :-) > ADSRA &= ~(1<<ADEN); Dann schalte ich den Analog Comparaor ein und sage dass ich anstatt Ain1 die AnalogDigital eingänge verwenden will (Multiplexer) > SFOIR |= (ACME); Dann aktiviere ich den Interrupt für den Analog Komparator, und möchte dass er bei einer steigenden Flanke auslösen soll > ACSR |= ((1<<ACIE) | (1<<ACIS1) | (1<<ACIS2)); Dann möchte ich im Multiplexer den AD0 eingang verwenden > ADMUX &= ~((1<<MUX2) | (1<<MUX1) | (1<<MUX0)); Der Interrupt sieht dann so aus: ISR(ANA_COMP_vect) { PORTB ^= (1<<PB2); PB2 ist natürlich auf ausgang } Testweise habe ich auch die ganzen Pins die ich für die Analog komparator geschichte brauche auf eingang gesetzt. Und nun das Problem wenn ich diese 2 (die ich oben beschrieben habe) verwende: > ACSR |= ((1<<ACIE) | (1<<ACIS1) | (1<<ACIS2)); > ADMUX &= ~((1<<MUX2) | (1<<MUX1) | (1<<MUX0)); ... Dann macht mein uC gar nichts mehr. Kommentiere ich sie wieder aus, dann läuft mein Programm Hat jemand eine Idee? Verstehe ich die Register vom Analogkomparator nicht? Wäre fein wenn mir jemand helfen könnte. Grüße Frank