Hallo!
Hab da eine Verständnisfrage zu den ext. Interrupts bei einem
AtMega328P.
Habe eine LCD Anzeige in meinem Jeep Wrangler für den
Treibstoffverbrauch gebastelt.
Die Funktion ist, das ich Durchflussmesser in der Zu- und Rückleitung
eingebaut habe.
Die Impulse zum zählen, gehen auf die beiden Interrupt Eingänge.
Beide Zählen einen Wert aufwärts und bei erreichen der Vorgabe (Impulse
pro Liter), wird die Differenz zwischen Zu- und Rücklauf berechnet und
als Verbrauch am LCD angezeigt.
Nun meine Frage:
Wie verhalten sich die Interrupts bei gleichzeitigem auftreten, geht
einer verloren, wird vorrangig abgehandelt, oder werden gleichzeitig
ausgeführt??
Beim Stadtfahren stimmt die Anzeige ca. bis auf 3%, bei längerer
Autobahnfahrt jedoch ist die Abweichung bis zu 20%.
Kann das an der Abhandlung der Interrupts liegen ???
Danke für die Antworten.
Lg
Michael
blackheart schrieb:> Wie verhalten sich die Interrupts bei gleichzeitigem auftreten, geht> einer verloren, wird vorrangig abgehandelt, oder werden gleichzeitig> ausgeführt??
Also, gleichzeitig gibt es wohl kaum, einer ist immer ein bisschen
schneller. Und nein, es geht keener verloren, der wird halt nur nach
dem schnellerem Interrupt abgehandelt.
blackheart schrieb:> Beide Zählen einen Wert aufwärts und bei erreichen der Vorgabe (Impulse> pro Liter), wird die Differenz zwischen Zu- und Rücklauf berechnet und> als Verbrauch am LCD angezeigt.
Vorgabe zu klein ?
Versuche mal die LCD-Ausgabe zeitgesteuert ablaufen zu lassen, Rücklauf
Impulse mit Timer-Eingang zählen.
P.S.
Natürlich zählt der andere Interrupt nur die Impulse, alles andere
soll ausserhalb gemacht werden.
>Beim Stadtfahren stimmt die Anzeige ca. bis auf 3%, bei längerer>Autobahnfahrt jedoch ist die Abweichung bis zu 20%.
Man könnte auch erstmal der Referenz misstrauen (wie auch immer diese
aussieht).
qwertz schrieb im Beitrag #3783974:
> Puuhhhh, wenn du mit der Erkenntnis deine Projekte umsetzt, sehen wir> dich hier bald wieder mit "unerklärlichen Erscheinungen". ;-)
War noch nie hier mit "unerklärlichen Erscheinungen".
qwertz schrieb im Beitrag #3783974:
> Natürlich können Ereignisse genau zum gleichen Zeitpunkt eintreffen. Und
Natürlich kann das nicht passieren. Die können nur zeitlich so nahe
beieinander liegen, das es für uC so aussieht. Vor 100 Jahren war eine
mikrosekunde "gleichzeitig".
Und da bei AVR die Interruptabarbeitung nicht unterbrochen werden kann,
ist Prioritätsliste für wartende, nicht für auftretende Interrupts
gedacht.
qwertz schrieb im Beitrag #3784026:
> Lies dir den Satz bitte noch einmal in Ruhe durch (bevor ich ihn> zerfetze). ;-)))
Lassen wir das Ganze lieber sein, du hast ja eh keine Ahnung wovon
du sprichst.
blackheart schrieb:> Die Funktion ist, das ich Durchflussmesser in der Zu- und Rückleitung> eingebaut habe.> Die Impulse zum zählen, gehen auf die beiden Interrupt Eingänge.> Beide Zählen einen Wert aufwärts und bei erreichen der Vorgabe (Impulse> pro Liter), wird die Differenz zwischen Zu- und Rücklauf berechnet und> als Verbrauch am LCD angezeigt.
Schwachsinniger Ansatz. Natürlich würde man das sinnvollerweise so
lösen, daß beide Durchflußmesser (zumindest effektiv) auf einen
gemeinsamen Zähler arbeiten, der eine Zweig zählt vorwärts, der andere
rückwärts. Zum Ausgleich von Exemplarstreuungen könnte man dann
eventuell noch in einen der beiden Signalzweige eine entsprechende
Skalierung einbauen. Sprich: KS-Pumpe an, Korrekturfaktor solange
abgleichen, bis konstant immer etwas zwischen -1..+1 als Zählerwert
rauskommt (jeweils über den Zeitraum einer geplanten Aktualisierung des
Displays). Nötig wird das aber wohl nicht wirklich sein...
> Nun meine Frage:> Wie verhalten sich die Interrupts bei gleichzeitigem auftreten, geht> einer verloren, wird vorrangig abgehandelt, oder werden gleichzeitig> ausgeführt??
Gleichzeitig wird überhaupt nix ausgeführt, jedenfalls nicht, solange
der verwendete Controller nur einen Rechenkern hat. Denk doch einfach
mal nach: Womit sollte er es gleichzeitig ausführen?
Vorrangregelungen hingegen gibt es oft. Allerdings spielen diese in
dieser Anwendung absolut keine Rolle, denn es ist hier unwichtig,
welcher Interrupt zuerst abgearbeitet wird, solange nur keiner verloren
geht. Und das passiert nicht, weil die entsprechende
Interruptanforderung erhalten bleibt. Jedenfalls, wenn die Abarbeitung
der Interrupts niemals länger dauert aus zwei aufeinander folgende
Anforderungen des gleichen Interrupts, was bei der simplen Aufgabe des
Inkrementierens/Dekrementierens eine Zählers erst bei
Interruptfolgefrequenzen vorkommen wird, die ein Durchflußsensor kaum
jemals ereichen kann. Deinen µC wirst du ja wohl nicht mit 100Hz
Systemtakt oder so betreiben? Dann könnte es allerdings eng werden...
Ich würde also einfach mal davon ausgehen, daß dein Code absolut nix
taugt. Das ist bei Anfängern sowieso immer die natürliche Vermutung.
Schwächen der Hardware kommen erst viel, viel, viel, viel... später als
mögliche Ursache in Frage.
Schwachsinniger Ansatz, Code taugt überhaupt nix......
solche Antworten braucht das Land, in jedem Forum wird um höflichen
Umgangston ersucht, nur gilt das vermutlich nicht für solche Nerd's wie
dich, die die Weisheit mit Löffeln gefressen hat.
blackheart schrieb:> Wie verhalten sich die Interrupts bei gleichzeitigem auftreten, geht> einer verloren, wird vorrangig abgehandelt, oder werden gleichzeitig> ausgeführt??
Grundsätzlich wird bei absolut zeitgleichem Auftreten von Interrupts der
zuerst abgearbeitet, der in der ISR-Adresstabelle als erstes auftaucht.
Somit ist eine Pseudo-Priorität gegeben...
Ingo
blackheart schrieb:> Schwachsinniger Ansatz, Code taugt überhaupt nix......> solche Antworten braucht das Land, in jedem Forum wird um höflichen> Umgangston ersucht, nur gilt das vermutlich nicht für solche Nerd's wie> dich, die die Weisheit mit Löffeln gefressen hat.
Beleidigende Äußerungen überspringen, aufs wesentliche konzentrieren...
Meistens kommt bei ihm, allerdings erst nach solchen Sprüchen, etwas
gescheites und fundiertes raus.