mikrocontroller.net

Forum: Compiler & IDEs SIG_COMPARATOR


Autor: Martin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,

ich hänge seit ein paar Tagen an einem Problem fest und bitte um
Hilfe.

Konkret will ich mit dem Analog Comparator eines Mega16 zwei
Spannungszustände ( 0V und 5V ) vergleichen, diese habe ich an AIN0 und
AIN1 angelegt. Wenn die 5V-Spannung fällt soll eine Interrupt ausgelöst
werden und die ISR aufgerufen werden. Gemäß der App-Notes habe ich AREF
usw. an die Versorgungsspannung angelegt. Im Software Debugger vom AVR
wird bei mir ein Interrupt aber nur ausgelöst wenn ich am ACI-Kästchen
ein Hacken setzte. Nun meine Eigentliche Frage: Ich man bislang an, das
an AIN0 bzw. AIN1 eine Veränderung stattfinden muß, damit eine Interrupt
ausgelöst wird.

Was mache ich falsch, wo liegt mein Denkfehler oder ist der Code falsch
?? Ich verwende der AVR-GCC. Der Code liegt im Anhang.

Vielen Dank im vorraus,

Martin

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verstehe jetzt nicht ganz, WAS da verglichen werden soll. Habe fast den
Eindruck, Du hast das Prinzip eines Komparators nicht verstanden. AREF
hat mit dem Komparator nichts zu tun! Der Komparator vergleicht die
Spannungen an AIN0 und AIN1. Je nachdem welche der beiden größer ist,
ist der Ausgang HIGH oder LOW und je nachdem wie der Interrupt
konfiguriert ist, gibt es einen Interrupt bei Wechsel von HIGH nach LOW
oder umgekehrt. Bei Dir würde sich nur dann was ändern, wenn die '5V'
(die dann keine mehr sind) unter 0V fallen, was nicht geht...

Abgesehen davon löscht man ein Interrupt Flag (in diesem Fall ACI)
durch Schreiben einer '1' und nicht durch eine '0'. Das

ACSR   &= ~(1<<ACI);

in Deinem Programm hat keine Wirkung!

Gruß

Johnny

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm,

ich denke ich habe das Prinzip schon verstanden. In meiner Schaltung
währe am Anfang auch ein AIN0=1 und eine AIN1=1 als Spannung von 5V
möglich. Selbst wenn ich andere Modi für ACIS0 und ACIS1 setzte bekomme
ich keinen Interrupt, außer wiederum ich verändere den Zustand von ACI.

Mal davon abgesehen, wie sähe denn der Code richtig aus wenn ein
Interrupt bei einer Veränderung einer der beiden vorliegen sollte.

Gruß Martin

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In dem Code aus Deinem ersten Posting ist das ganze so konfiguriert:
AIN0 und AIN1 als Eingänge, Interrupt auf fallende Flanke am
Komparator-Ausgang (der wird durch das Bit ACO ausgegeben). Das
bedeutet, dass ACO HIGH-Pegel hat, wenn die Spannung an AIN0
(nichtinvertierender Eingang) größer ist als die Spannung an AIN1
(invertierender Eingang). Das Interrupt-Flag wird bei den Einstellungen
dann gesetzt, wenn die Spannung an AIN0 kleiner wird, als die an AIN1,
also wenn ACO von HIGH nach LOW wechselt. Wenn Du ACIS0 und ACIS1 auf
'0' setzt, wird das Interrupt-Flag bei jeder Änderung von ACO
gesetzt. Wenn ACIS0 und ACIS1 beide '1' sind, wird das Flag bei einer
Änderung von LOW nach HIGH gesetzt (also wenn die Spannung an AIN0
größer wird als die an AIN1).

Außerdem fällt mir gerade so auf, dass Du die Analog-Eingänge als
Ausgänge programmiert hast (autsch). So kann es nicht funktionieren!

Ich hoffe, das hilft weiter.

Gruß

Johnny

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.