Suche Hilfe beim Analog Comparator Interrupt!

Gast #3516230
Lesenswert?
• ▲
▼
Hallo liebe AVR-Freunde,

ich lese hier zwar schon eine ganze Weile und habe bis jetzt auch immer 
alles gefunden, leider komme ich jetzt aber mit den schon verhandenen 
Threads nicht weiter.

Ich hoffe einer von euch kann mir die Richtung weisen :-)

Also, ich experimentiere gerade mit dem AnalogComparator meines 
Atmega32U4 rum.

Leider bekomme ich es nicht hin, dass er mir den Interrupt schmeißt.

Mein Code sieht folgendermaßen aus:
1
ISR (ANA_COMP_vect)
2
{
3
  PORTD ^= (1 << 5); //toggle LED on every call
4
}
5

6
void main()
7
{
8
   cli(); // disable interrupt 
9
   DDRD |= (1 << 5);
10
   ACSR = 0; //set everything to 0
11
   ADMUX = 0; //set everything to 0       
12
   ADCSRA &= ~(1 << ADEN); // deactivate ADC 
13
   ADCSRB |= (1 << ACME);// activate multiplexer
14
   ACSR |= (1 << ACIE); // activate analog comparator interrupt
15
   // ADIN1 is AIN+ for MUX2:0 --> 0 AIN- should be ADC0
16
   // ACIS0 and ACIS1 are 0 --> Interrupt Mode = Toggle Mode
17
   sei(); // global interrupt enable
18

19
   while(1)
20
   {
21
    //nothing here
22
   }
23
}

Der Atmega32 hat keine AIN1, daher muss immer der Multiplexer verwendet 
werden. Der AIN+ ist entweder der AIN0 oder interne Referenz, bei meiner 
Einstellung sollte der AIN0 gewählt sein.

Bin für jeden Tipp mehr als Dankbar!!
Gast #3516367
Lesenswert?
• ▲
▼
FrankyP50187 schrieb:

> Bin für jeden Tipp mehr als Dankbar!!

Hmm.

>   ACSR = 0; //set everything to 0

Das ist nicht ganz korrekt.

    ACSR = (1 << ACI)

wäre korrekt.

Aber ansonsten ist das Programm ok und der kleine Fehler sollte es auch 
nicht am Funktionieren hindern, maximal wird unmittelbar nach dem sei() 
ein Interrupt geworfen, ohne daß sich am Pin was tut.

Bleibt die Hardware. Eventuell falsche Pins erwischt? Was für ein Signal 
hast du an die beiden AC-Pins angelegt? LED korrekt angeschlossen? Auch 
wieder: am richtigen Pin?
#3516391
Lesenswert?
• ▲
▼
Hallo C-hater,
danke dass du dich meiner annimmmst :-)

An AIN0 habe ich wahlweise GND oder 3,3V bzw an ADC0 3,3V oder GND.
Ich versuche den Interrupt mit Jumperwires herbeizuführen, also GND an 
AIN0 und ADC0 und dann ADC0 umgejumpert auf ebenfalls ADC0, sollte ja 
eine Flanke sein, oder??

Die LED ist richtig angeschlossen, das sie in einer Testfunktion (also 
ohne Interrupt) fröhlich vor sich hinblinkt, als wäre nichts gewesen :-)

Liegt es vielleicht da dran, dass ich für die Flanke mit ADC0 über den 
Analogwert von AIN0 rausmuss? Also vielleicht 5V?

Liebe Grüße
Angehängte Dateien:
Gast #3516437
Lesenswert?
• ▲
▼
Frank Pinecker schrieb:

> An AIN0 habe ich wahlweise GND oder 3,3V bzw an ADC0 3,3V oder GND.
> Ich versuche den Interrupt mit Jumperwires herbeizuführen, also GND an
> AIN0 und ADC0 und dann ADC0 umgejumpert auf ebenfalls ADC0, sollte ja
> eine Flanke sein, oder??

Es können und werden in der Regel mehrere sein (Prellen). Wenn du mit so 
behelfsmäßigem Gebastel einen sicheren Nachweis haben willst, darfst du 
die LED in der ISR nur setzen. Dann weißt du zwar nicht, wie oft der 
Interrupt ausgelöst wurde, aber wenigstens, daß er überhaupt ausgelöst 
wurde.

Besser: einen der beiden Anschlüsse über einen Spannungsteiler auf 1/2 
Vcc und den anderen an einen als Ausgang programmierten Pin, z.B. den 
OC-Ausgang eines Timers. Den läßt du dann per CTC-Mode toggeln und hast 
damit saubere und eindeutige Flanken. Die LED sollte dann mit "halber" 
Helligkeit leuchten.

Übrigens: Das Foto hilft kein bissel dabei, die Wahl der korrekten Pins 
zu überprüfen. Dazu ist es einfach viel zu beschissen.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.