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
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 :)
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.
:-O manchmal sitzt man aber auch auf seinem gehirn!!! Danke dir! Das löst das Problem natürlich mehr als nur komfortabel und einfach!
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.
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?
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...
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.