Interrupt Atmega

Gast #5166643
Lesenswert?

Mahlzeit,
ich möchte bei einem Atmega328 einen Interrupt INT0, welcher bei 
steigender und fallender Flanke ausgelöst wird.
ISC01
Ist es möglich, je nach Interrupt eine andere Funktion aufzurufen? Oder 
muss ich mir den vorigen zustand merken und dann in der ISR abfragen?
Also momentan habe ich
1
extern "C" ISR(INT0_vect)
2
{
3
    if(button::getState() == false)
4
    {
5
        button::setState(true);
6
        timer->start();
7
    }
8
    else
9
    {
10
        button::setState(false);
11
        timer->abortBtn();
12
    }
13
}

Felix
#5166701
Lesenswert?

Ums Abfragen kommst du nicht herum.

Du könntest aber statt des INT0 den entsprechenden Pinchange Interrupt 
verwenden. Der löst, wie jetzt auch, bei jedem Flankenwechsel aus. Den 
INT0 konfigurierst du als Falling Edge ohne den Interrupt freizugeben. 
Dann kannst  du in der PCINT-ISR das Flag des INT0 abfragen, daß nur bei 
fallender Flanke gesetzt wird. Das Flag muß dann per Software gelöscht 
werden.
Gast #5166753
Lesenswert?

Sapperlot W. schrieb:
> Es ist aber schon klar, dass man damit keine Tasten auswerten soll ?
> Stichwort : Prellen.

Unter anderem schon, aber auch ein DCF-Signal sollte auf dem zweiten 
Interrupt ausgewertet werden (aber mit selber logik).

Mit dem Button hast du aber recht, da muss ihc mir nochmal was überlegen

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