Interrupt INT0 und INT1 an Atmega328 funktioniert nicht?

Gast #3860483
Hi!

Ich möchte am Atmega328 einen Drehencoder betreiben. Die beiden Pins A 
und B sind (mit dem Hühnerfuter für die Entprellung laut Datenblat) an 
INT0 und INT1 angeschlossen.

Für einen ersten Test möchte ich ein paar LEDs einschalten, wenn ein 
Interrupt auftritt.

Als erstes Setze ich die Pins als Eingänge:
1
#define EncoderTaster PORTD4
2
#define EncoderA PORTD3
3
#define EncoderB PORTD2
4

5
void PORT_Setup (void)
6
{
7
  //ALLE EINGÄNGE EINSCHALTEN:
8
  DDRD &= ~(1 << EncoderTaster);
9
  DDRD &= ~(1 << EncoderA);
10
  DDRD &= ~(1 << EncoderB);
11
  
12
  //PULLUPS EINSCHALTEN
13
  PORTD |= (1 << EncoderTaster);
14
  PORTD |= (1 << EncoderA);
15
  PORTD |= (1 << EncoderB);
16
}


Dann stelle ich die Interrupt Register passend ein. Ich dachte erst hier 
liegt mein Fehler, allerdings habe ich die selbe Konfiguration der 
Register schon mehrmals bei anderen Projekten im Internet gesehen.
1
void InterruptConfig (void)
2
{
3
   EICRA = 0b00000101;
4
   EIMSK = 0b00000011;
5
   sei();
6
}


Dann kommen hier noch die ISR:
Die Funktion "LEDRing" steuert mir 8 LEDs um den Drehencoder herum an. 
Ihr wird ein Byte übergeben, indem die Zustände der 8 LEDs enthalten 
sind. 0xff bedeutet, dass alle LEDs an sind.
1
ISR (INT0_vect)
2
{
3
  LEDRing(0xff);
4
  uart_puts("int0change");
5
}
6

7
ISR (INT1_vect)
8
{
9
  LEDRing(0xff);
10
  uart_puts("int1change");
11
}

Das Funktioniert so aber nicht. Weder über den UART mnoch über die LEDs 
bekomme ich irgendeine Reaktion, wenn ich den Encoder drehe.

Wer kann mir helfen?

Ich habe mir die Signale an INT0 und INT1 mal mit einem Logikanalysator 
angesehen. Da sieht alles gut aus, die Signale kommen also grundsätzlich 
am µC an, einen Hardwarefehler kann ich also ausschließen.

Grüße!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.