Interrupt INT0 und INT1 an Atmega328 funktioniert nicht?

Gast #3860483
Lesenswert?
• ▲
▼
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

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.