Forum: Mikrocontroller und Digitale Elektronik Programmablaufplan mit Interrupt


von ämpl (Gast)


Lesenswert?

Hallo,

ich möchte für mein Programm einen Ablaufplan zeichnen. Dabei befinde 
ich mich so lange in solange in einem Menü, bis ein externes Interrupt 
durch einen Schalter ausgelöst wird.

Wie zeichne ich das dann? Nicht wie bei einem normalen if/else, also mit 
der Unterscheidung falls Taster gedrückt/ falls Taster nicht gedrückt?

von Einer K. (Gast)


Lesenswert?

Für jeden Interrupt zeichnet man ein eigenes Flussdiagramm. In den 
Hauptfluss kann man das nicht integrieren, da Interrupts ja asynchron 
dazu auftreten werden.

Vielleicht möchtest du ja Datenflussdiagramme zeichnen...

von Clemens L. (c_l)


Lesenswert?

Du brauchst einen getrennen Ablauf für jeden Interrupt.

Ein PAP alleine, ohne Datenstrukturen, oder Synchronisation der Zugriffe 
auf gemeinsame Variablen, ist nicht sehr hilfreich.

von Karl M. (Gast)


Lesenswert?

Tja,
da so ein Interrupt "immer" stattfinden kann, kann man den Code in der 
Interrupt-Service-Routine und als eigenständigen/ nebenläufigen Ablauf 
darstellen.

Nur Taster lösen keinen Interrupt aus, denn sie Prellen und man benötigt 
ja nur ein Tastenereignis : Taster wurde gedrückt und Taster wurde 
losgelassen.

Warum ? denke darüber man nach.

von Karl M. (Gast)


Lesenswert?

Tja,
da so ein Interrupt "immer" stattfinden kann, kann man den Code in der 
Interrupt-Service-Routine und als eigenständigen/ nebenläufigen Ablauf 
darstellen.

Nur Taster lösen keinen Interrupt aus, denn sie Prellen und man benötigt 
ja nur ein Tastenereignis : Taster wurde gedrückt und Taster wurde 
losgelassen.

Warum ? denke darüber mal nach.

von Jakob (Gast)


Lesenswert?

Die meisten gut funktionierenden Programme erfassen und
entprellen Tastenbetätigungen in einem Interrupt und melden
eindeutige Ereignisse durch ändern eines Registers, oder einer
Speicherstelle.

In den PAP des Hauptprogramms fügt man dann die Abfrage dieses
Registers, oder der Speicherstelle ein.

von Nop (Gast)


Lesenswert?

Per Schalter einen Interrupt auslösen? Na hoffentlich ist dann auch an 
die Entprellung gedacht.

von Einer K. (Gast)


Lesenswert?

Nop schrieb:
> Per Schalter einen Interrupt auslösen?
Vielleicht meint er ja einen Timer Interrupt?

von Nop (Gast)


Lesenswert?

Wird doch auch nicht besser, weil der Schalter eben prellt. Dann löst 
man einen Timer-Interrupt mehrfach aus.

Normalerweise kenne ich das so, daß man prellende Eingänge im ohnehin 
eingerichteten Timerinterrupt einliest, weil man da eine vernünftige 
Zeitbasis hat. Dann zählt man den Eingang rauf/runter (begrenzt auf 0 
und MAX_COUNTER) und wertet mit ner Hysterese den Status aus.

Das Ergebnis schiebt man dann entweder in eine Queue, wenn man auf 
Flankensteuerung aus ist und kein Ereignis verpassen will, oder in eine 
Variable, wenn nur der momentane konsolidierte Level interessiert.

Oder natürlich man entprellt in Hardware, dann kann man auch direkt 
einen IO-getrigggerten Interrupt verwenden. Habe ich aber in der Praxis 
so gut wie nie gesehen, weil es zusätzliche oder aufwendigere Bauteile 
kostet.

von Ottmar K. (wil1)


Angehängte Dateien:

Lesenswert?

@ämpl

ämpl schrieb:
> Hallo,
>
> ich möchte für mein Programm einen Ablaufplan zeichnen. Dabei befinde
> ich mich so lange in solange in einem Menü, bis ein externes Interrupt
> durch einen Schalter ausgelöst wird.
>
> Wie zeichne ich das dann? Nicht wie bei einem normalen if/else, also mit
> der Unterscheidung falls Taster gedrückt/ falls Taster nicht gedrückt?

Wäre das Beispiel in der Anlage das was Du suchst?

Wenn ja, den kostenlosen Download des PAP-Designers gibt es hier:
[http://friedrich-folkmann.de/papdesigner/Download.html]

[https://de.wikipedia.org/wiki/Programmablaufplan]

mfG Ottmar

von Einer K. (Gast)


Lesenswert?

Nop schrieb:
> Wird doch auch nicht besser, weil der Schalter eben prellt. Dann löst
> man einen Timer-Interrupt mehrfach aus.
Du hast mich nicht verstanden.

Nop schrieb:
> Normalerweise kenne ich das so, daß man prellende Eingänge im ohnehin
> eingerichteten Timerinterrupt einliest, weil man da eine vernünftige
> Zeitbasis hat.
Ja, so wird da ein Schuh draus.

von ämpl (Gast)


Lesenswert?

Karl M. schrieb:
> kann man den Code in der
> Interrupt-Service-Routine und als eigenständigen/ nebenläufigen Ablauf
> darstellen.

In meinem Interrupt wird nur ein Flag gesetzt, also würde das bei mir 
wahrscheinlich eher keinen Sinn machen.

Ich habe zwar nur einen Code von 1000 Zeilen, allerdings fällt es mir 
schwierig alles in ein PAP zu packen (würde wahrscheinlich viel zu groß 
werden). Ist es eine geläufige Alternative anstatt eines PAP einen 
Zustandsautomaten zu zeichnen, um den Programmablauf zu erklären?

Dann hätte ich nämlich die Zustände: Initialisieren, Menü, Programm 1 
und Programm 2. Mit den Tastern wechsel ich dann zwischen dem Menü und 
den Programmen. Durch die Taster (entprellt) werden dann Interrupts 
ausgelöst in denen ein Flag gesetzt wird und danach ausgewertet wird. 
Daher würde ich "einfach Pfeile" zwischen den einzelnen Zuständen 
zeichnen.
Und in die einzelnen Zustände schreibe ich dann die Aktivitäten die 
durchgeführt werden (z.B. LED anschalten, etwas auf Display schreiben, 
usw.).

von Peter D. (peda)


Lesenswert?

ämpl schrieb:
> Ich habe zwar nur einen Code von 1000 Zeilen, allerdings fällt es mir
> schwierig alles in ein PAP zu packen

Macht man auch nicht.
Man teilt sein Programm in Unterfuntionen auf und diese erhalten dann 
ihren eigenen PAP.

https://de.wikipedia.org/wiki/Teile_und_herrsche_%28Informatik%29

von Clemens L. (c_l)


Lesenswert?

ämpl schrieb:
> Ist es eine geläufige Alternative anstatt eines PAP einen
> Zustandsautomaten zu zeichnen, um den Programmablauf zu erklären?

Wenn es dein Ziel ist, das Programm jemand anderem (oder auch dir 
selbst) zu erklären, und das in einer anderen Form besser geht, dann 
solltest du diese auch benutzen.

von GroberKlotz (Gast)


Lesenswert?

Kann es sein, dass ämpl gar keinen alternativen Vorschlag haben möchte 
und vielmehr nur die Zustimmung zu seinem aufgezeigten Weg haben möchte?

mfg GroberKlotz

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.