Ext. Interrupt für exakte 200ms lowlevel

Gast #4460334
Lesenswert?
• ▲
▼
Hallo,

ich benötige folgende Funktion:

Der Interrupt Pin 0 wird extern für 200ms ( +-5ms ) auf low gezogen, nur 
dann soll etwas geschehen.

Wie würde man so etwas am geschicktesten Lösen?

Interrupt bei fallender Flanke aktivieren, in der entsprechenden ISR als 
erstes den INT0 deaktivieren, einen Timer auf 195ms setzen, danach im 
Timer Interrupt abfragen ob es nach wie vor Low ist, und den Timer 
erneut auf 10ms setzen und prüfen ob es jetzt wieder High ist, falls ja 
- > darf aktion ausgeführt werden, falls nein eben nicht. Und danach den 
INT0 wieder aktivieren.

Gibt es dazu nicht eine einfachere geschicktere Lösung, oder ist das 
schon am optimalsten?

Gustav
Gast #4460358
Lesenswert?
• ▲
▼
Gustav M. schrieb:
> Wie würde man so etwas am geschicktesten Lösen?

Indem  man sich eine Systemuhr einrichtet, die die Systemzeit auf 1 ms 
auflöst und im Interrupthandler selbige abfragt.

Solche Ideen wie Timer und Capture ist für sowas eher schlechter 
geeignet - insbesondere wenn man nicht so tief in der Materie steckt, 
daß man fragen muß.

Aber mal was anderes: von was für einem Prozessor schreibst du? Bei 
Cortexen hat man den Systemtimer quasi gratis immer dabei.

W.S.
Gast #4460427
Lesenswert?
• ▲
▼
Gustav M. schrieb:

> Der Interrupt Pin 0 wird extern für 200ms ( +-5ms ) auf low gezogen, nur
> dann soll etwas geschehen.
>
> Wie würde man so etwas am geschicktesten Lösen?

Mit Capture-Interrupt.

> Gibt es dazu nicht eine einfachere geschicktere Lösung, oder ist das
> schon am optimalsten?

"Optimal" ist eins derjenigen Adjektive, die sich nicht sinnvoll 
steigern lassen. Wenn man auch nur die Wortbedeutung versteht, sollte 
klar sein, warum das so ist...

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