Forum: Mikrocontroller und Digitale Elektronik Interrupt INT0 und INT1 an Atmega328 funktioniert nicht?


von Matze (Gast)


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!

von Bernhard S. (dl9rdw)


Lesenswert?

Hallo Matze,

Poste doch mal die ganze Main() function.
Prinzipiell sollte es schon so gehen.

Grüße Bernhard

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Drehencoder und Interupt? Ich hol mir nur noch schnell was zu knabbern - 
gleich gehts hier los :-)
Nur das noch:
http://www.mikrocontroller.net/articles/Drehgeber

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.