Arduino Mega1280 - externer Interrupt

OP #2753974
Lesenswert?

Ich möchte mit nem Arduino Mega (ATMega1280) einen Impuls erfassen. Dazu 
nutze ich nen Optokoppler um den Impuls auf einen Portpinzu "leiten".

Im Normalzustand ist der Portpin High (Pull-Up) und wenn der Impuls 
kommt, wird er auf Low gezogen (Optokopler).
Per Polling kann ich den Impuls (im Moment noch simuliert durch ein 
Netzteil, welches die Spannung erzeugt) auch erfassen, nur per Interrupt 
(was das eigentliche Ziel ist) klappt es so gar nicht.

Ich habe den Impuls an PORTE4 und PORTB7. An PORTE4 wollte ich mir die 
Falling Edge erfassen lassen und initialisere alles so:
1
// PORT E - 4 -> impulse input
2
DDRE = 0x00;
3
// set INT4 to falling edge
4
EICRB = (1 << ISC41) | (0 << ISC40);
5
// clear pending interrupts
6
EIFR = (1 << INTF4);
7
// enable INT4
8
EIMSK = (1 << INT4);
Wenn ich jetzt noch die globalen Interrupts per sei() anmache, sollte ja 
eigentlich ein Interrupt (INT4_vect) geworfen werden. Passiert aber 
nicht.

Ist mein Initialiserungscode falsch oder habt ihr noch Ideen was ich 
falsch gemacht haben könnte. Mich wundert es einfach, dass ich den 
Impuls per Polling erfassen kann, aber keinen Interrupt bekomme.
OP #2754218
Lesenswert?

Mini Float schrieb:
> Tobias Schlegl schrieb:
>> (Pull-Up)
> Und wo schaltest du den ein?
Ne, ich habe nicht den internen Pull-Up genutzt sondern habe extern 
einen angelötet (10kOhm gegen 5V).

Thomas Eckmann schrieb:
> Gesamter Code als Anhang. 0 Errors, 0 Warnings.
> Sonst kann man nur raten.
Nicht wundern, im Code benutze ich auch Port B.7 Impuls (Port Change 
Interrupt), aber auch das hat nicht funktioniert.

Meine main() sieht ungefähr so aus:
1
impulseCounterInit();
2
sei();
3

4
while(true) {
5
    if(g_ImpulseReceived > 0) {
6
        impulseCounterDistanceRealFire();
7
        g_ImpulseReceived--;
8
    }
9
}
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren