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
Gustav M. schrieb: > Gibt es dazu nicht eine einfachere geschicktere Lösung, oder ist das > schon am optimalsten? Stichwort Input Capture Unit (Timer)
Pin Change Interrupt. Auf der ersten Flanke Timer starten, auf der zweiten Flanke Timer lesen. Zeit auswerten. Aktion ausführen.
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.
Gustav M. schrieb: > oder ist das schon am optimalsten? Das ist die schlechteste Lösung, die man sich vorstellen kann.
1 | while(1) |
2 | {
|
3 | ....
|
4 | while(!(PINx & (1 << y))) |
5 | {
|
6 | //Tu was
|
7 | }
|
8 | ....
|
9 | }
|
Wenn er noch was anderes nebenbei tun soll:
1 | while(1) |
2 | {
|
3 | ....
|
4 | if(!(PINx & (1 << y))) |
5 | {
|
6 | //Tu was
|
7 | }
|
8 | ....
|
9 | }
|
:
Bearbeitet durch User
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.