www.mikrocontroller.net

Forum: GCC ATMega8 Analogcomparator legt Programm lam


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Frank (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Stefan Ernst (sternst)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Frank schrieb:
>> ACSR |= ((1<<ACIE) | (1<<ACIS1) | (1<<ACIS2));

ACIS2 ???

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
> SFOIR |= (ACME);

?
SFOIR |= (1<<ACME);

Autor: Frank (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
@ Stefan,

huch das kommt davon wenn man es abtippt.

Richtig ist:
ACSR |= ((1<<ACIE) | (1<<ACIS1) | (1<<ACIS0));

Genau so wie
SFOIR |= (ACME); Auch SFOIR |= (1<<ACME); bedeuten soll

Habe eben nochmal geguckt, ich hatte bei einem Interruptvector das _vect 
groß geschrieben. wusste gar nicht, dass der compiler so pingelig ist.

Und das war dann auch des Rätzels lösung, aber danke schön :-) da war 
ich schon 5 stunden davor gesessen und habe es nicht erkannt :-)

Grüße

Autor: Frank (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Und danke für die Antworten :-)

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net