mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programmablaufplan mit Interrupt


Autor: ämpl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
1 lesenswert
nicht 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...

: Bearbeitet durch User
Autor: Clemens L. (c_l)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Karl M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jakob (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Nop (Gast)
Datum:

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

Autor: Arduino Fanboy D. (ufuf)
Datum:

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

Autor: Nop (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ottmar K. (wil1)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht 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

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ämpl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.).

Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht 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_%...

Autor: Clemens L. (c_l)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: GroberKlotz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.