PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeitabhängige Abfrage eines digitalen Einganges



enoritz
11.03.2006, 16:04
Hallo,

ich hab hier nen AT90S2313-Controller vor mir liegen und frage mich gerade, wie man es am besten eine Abfrage realisieren könnte, dass meintetwegen der Pin PB2 3 Sekunden lang auf High-Pegel liegt.

Ich bekomme von außen ein Signal an den Controller und dieser soll nun sicherstellen, dass das Signal 3 Sekunden lang auf High-Pegel liegt.

Das Problem ist ja jetzt, dass ich nicht einen Timer benutzen kann um alle 3 Sekunden den Pin abzufragen. In der zwischenzeit kann das Signal ja kurzzeitig von 1 auf 0 und wieder zurückspringen.

Wäre schön wenn da jemand kreative Ideen hätte.

izaseba
11.03.2006, 16:24
Hast Du PD2 oder PD3 frei?
Ich seche das so,
Externen Interrupt bei steigender Flanke.
In der ISR den Intrrupt auf falende Flanke umschalten und Timer starten.
Jetzt braucht Du nur abzuwarten ob, der Timer abgelaufen , oder der extene Interrupt erneut ausgelöst worden ist.
Wenn Timer abgelaufen, dann war er Pegel 3 sekunden lang high, wenn erneut Ext. Interrupt kam, war er keine 3 Sekunden lang.
Ich hoffe, daß der Ansatz richtig ist...

Gruß Sebasian

Torsten_G
11.03.2006, 18:02
Hi,

mittels Hardware-Interrupt ist es natürlich am Elegantesten, damit lassen sich auch kürzeste Signalausfälle erkennen.

Geht das nicht, lässt sich die Sache auch mit einer If-Then-Abfrage lösen. Dann muß das Signal aber für minimum einen Programmzyklus ausfallen, damit es sicher erkannt wird.

In etwas so, in Bascom:



Dim Zeit_ok as Bit
Dim Timer_on as Bit
Dim Signal_error as Bit

Do

If PinX.Y = 1 and Timer_on=0 then
Start TimerZ
Timer_on=1
end if

If PinX.Y=0 and Timer_on=1 then
Stop TimerZ
Signal_error=1
end if

Loop



Grüße

Torsten

enoritz
11.03.2006, 22:12
Beides nette Ansätze, obwohl mir das Verwenden des externen Interrupts besser gefällt, als eine ständige Abfrage.
Vielen Danke.... war sehr hilfreich!!

(Ich hätte übrigens beide Pins [Int0 und Int1] frei)