Forum: Mikrocontroller und Digitale Elektronik Pin Zustand über bestimmten Zeitraum abfragen


von Sebastian (Gast)


Lesenswert?

Gerade stehe ich auf dem Schlauch, vielleicht kann mir ja einer von euch 
helfen.

Auf einem Atmega8 habe ich einen Eingang dessen Zustand ich über einen 
bestimmten Zeitraum auswerten will. Ankommen tut nur "echtes" High / 
Low.
Nun würde ich gerne über einen Zeitraum von x sec. auswerten wie oft der 
Pin Low geht.

Der Anstoss dieser Funktion läuft über einen Interrupt.
Habt ihr eine Idee wie ich das ganze angehen könnte?
Der Zeitraum kann auch super kurz sein... eine Sekunden dürfte reichen.

Ich habe auch schon überlegt ob ich das Signal nicht einfach auf den 
Interrupt lege und dann in einer Variable die Aktivierungen des 
Interrupt mitzähle, aber dabei kann ich wohl kaum die Zeit 
berücksichtigen in der dies passiert, oder?
Hat jemand eine Idee?


Gruß
Sebastian

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Sebastian wrote:
> Ich habe auch schon überlegt ob ich das Signal nicht einfach auf den
> Interrupt lege und dann in einer Variable die Aktivierungen des
> Interrupt mitzähle, aber dabei kann ich wohl kaum die Zeit
> berücksichtigen in der dies passiert, oder?

Du läßt einfach nen Timer mitlaufen der jede 100ms eine Variable 
hochzählt.
Sobald das zählen starten soll sezt du diese Variable, sowohl als auch 
deinen Zähler auf 0 und schon hast du ne beziehung zwischen anzahl Ints 
und der Zeit :)

von Dussel (Gast)


Lesenswert?

Während ich schreibe, wird wohl gerade die Antwort abgeschickt, aber ich 
versuche es mal:
Timer einschalten und Zähler resetten, dann wie vorgeschlagen über einen 
Interrupt mit Auslösung bei fallender Flanke zählen und beim nächsten 
Timerinterrupt (Bei passender Zeiteinstellung) Zähler lesen und 
speichern. Dabei kannst du direkt den Zähler resetten und weitermessen.

von Sebastian (Gast)


Lesenswert?

:-O manchmal sitzt man aber auch auf seinem gehirn!!!

Danke dir! Das löst das Problem natürlich mehr als nur komfortabel und 
einfach!

von Sven P. (Gast)


Lesenswert?

Zähl die Pegelwechsel per Pin-Change-Interrupt oder einfach externen 
Interrupt in einer ausreichend großen Variable hoch. Dann stellst nen 
Timer auf deine Zeitspanne ein und im Timer-Interrupt kopierste die 
Zählervariable und setzt sie dann direkt wieder auf Null zurück. 
Fädisch.

von Sebastian (Gast)


Lesenswert?

ah.. aber...
das "signal" liegt an an nem externen interrupt, genauer int1.
Ist der nicht höher priorisiert als der timer???
Also löst der Timerinterrupt dann überhaupt aus wenn int1 noch läuft?

von Sven P. (Gast)


Lesenswert?

Sebastian wrote:
> ah.. aber...
> das "signal" liegt an an nem externen interrupt, genauer int1.
> Ist der nicht höher priorisiert als der timer???
> Also löst der Timerinterrupt dann überhaupt aus wenn int1 noch läuft?

Jubb, aber der INT1 läuft ja nich permanent, d.h., also du befindest 
dich ja nur nen winzigen Bruchteil der Zeit im INT1. Dann rennt der 
Prozessor wieder im Leerlauf (sprich in der Hauptschleife) im Kreis. 
Schlimmstenfalls geht dir mal ein Takt flöten...

von Falk B. (falk)


Lesenswert?

Siehe Interrupt

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
Noch kein Account? Hier anmelden.