Programmablaufplan mit Interrupt

Gast #4690955
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?
Gast #4690992
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...
Gast #4690998
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.
Gast #4690999
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.
Gast #4691119
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.
Gast #4691238
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.
#4691281
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
Angehängte Dateien:
Gast #4691301
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.
Gast #4693698
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.).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren