www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupts unterbrechen


Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin Moin!

Ich hab da ein kleines Problem mit den Interrupts.
Habe hier und im RN schon gesucht, aber nichts sinnvolles gefunden.
Im Datenblatt hab ichs auch nicht gefunden.

Details:
- Programmiere in C
- ATmega16
- Am INT0 und INT1 hängt jeweils ein Taster nach Masse, interne Pullups 
gesetzt.
- HW ist getestet und tut.

Funktion:
- main initialisiert die HW und wartet dann auf ISR
- Taste 1 startet ISR(INT0_vect) -> Notaus
- Taste 2 startet ISR(INT1_vect) -> Messung


Nun das Problem:

Ich will durch auslösen von INT 0 die Messung (ISR INT 1) abbrechen und 
nach Ausführung der Notausroutine ins hauptprogramm zurückspringen.
Es soll also nicht wieder zurück an die Stelle des Aufrufs springen und 
den Rest ausführen.

Ist sowas möglich?
Da INT0 stärker ist als INT1, müsste das doch gehn, oder?


Dank und Grüßle
    Steffen

Autor: 6636 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tasten sind es meist nicht Wert auf Interrupts gelegt zu werden. Zudem 
sollten ISRs kurz sein. Da gibt es eignetlich nie was zu Unterbrechen.

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum packst du die Messugn nicht einfach in eine normale Funktion, die 
durch INT0 unterbrochen werden kann?
Wie wird die Messung ausgelöst? Durch einen Tastendruck womöglich?

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man sollte alles lesen.
Pack die Tastenabfrage in eine Polling-Schleife. Dann kann dein NOT-AUS 
jederzeit zuschlagen.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Steffen (Gast)

>- main initialisiert die HW und wartet dann auf ISR
>- Taste 1 startet ISR(INT0_vect) -> Notaus
>- Taste 2 startet ISR(INT1_vect) -> Messung

Notaus über Software? Naja . . .

>Ich will durch auslösen von INT 0 die Messung (ISR INT 1) abbrechen und
>nach Ausführung der Notausroutine ins hauptprogramm zurückspringen.
>Es soll also nicht wieder zurück an die Stelle des Aufrufs springen und
>den Rest ausführen.
>Ist sowas möglich?

Ja, Goto 0 oder einen Watchdog Reset provozieren.

>Da INT0 stärker ist als INT1, müsste das doch gehn, oder?

Nee, der AVR hat keine echten Interruptprioritäten

Interrupt

Wie STK500-Besitzer schon schrieb, mach die Messung im Hauptprogramm, 
gestartet über ein Flag im Interrupt.

MfG
Falk

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@6636
dein Post ist wie Taster auf Interrupts setzen: Nichts wert!


@STK500-Besitzer
Ja, wie beschrieben wird die Messung über Tastendruck gestartet.
Muss so sein, da der User quitieren muss.


@Falk
Hab ich schon probiert.
Der Abbruch kommt auch, aber am Schluss der Abbruchroutine springt er 
wieder mitten in den Code der Messung zurück.

Wie kann ich das verhindern?
Rücksprungadress ist ja im Stack drin, und da will er nach der ISR 
wieder hin.

Grüßle

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Häng den Notaustaster als Öffner in die Spannungsversorgung des Mega16. 
Das gibt genau deinen oben gewünschten Effekt :-)

Oliver

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> @6636
> dein Post ist wie Taster auf Interrupts setzen: Nichts wert!

wie wäre es, wenn du Leute, die versuchen, dir zu helfen, nicht 
anscheißt? Er hat recht. ISRs sollten immer kurz sein, und Tasten fragt 
man nicht per Interrupt ab, schon alleine weil die prellen.

> Rücksprungadress ist ja im Stack drin, und da will er nach der ISR
> wieder hin.

Natürlich.
Du hast bisher nur unzureichend dein Programm beschrieben. Wie sieht 
denn so eine Messung überhaupt aus? Was macht deine Software? Wartet sie 
da in einer Schleife auf etwas? Dann kannst du einfach in dieser 
Schleife ein Flag zum Abbrechen verwenden. Dieses Flag wird dann in der 
ISR gesetzt.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Steffen (Gast)

>Der Abbruch kommt auch, aber am Schluss der Abbruchroutine springt er
>wieder mitten in den Code der Messung zurück.

>Wie kann ich das verhindern?

Hab ich das nicht geschrieben? In deiner Notaus-ISR kommt entweder ein 
Sprung an Adress Null hin oder du schaltest den Watchdog ein und gehst 
in eine Endlosschleife. Der Watchdog macht dann einen Reset.

MfG
Falk

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtige Notaus darf man eh nicht an Software koppeln.
Redundant sollte die Notaus-Schaltung dann auch noch sein.

In der Notaus-ISR müsste man die Steuerung in einen stabilen Zustand 
bringen (alle Motoren aus etc) und dann auf das Eintreffen des Watchdog 
waren.
Eine andere Möglichkeit hat man bei AVR nicht.

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sobald Du in eine ISR eintrittst, sind die Interrupts global 
deaktiviert, man kann sie aber explizit wieder einschalten, das nennt 
sich "nested interrupts", was auch im Datenblatt steht. Das ist aber 
keine so gute Idee, sieh lieber zu das besser zu loesen.

Gruss,
Michael

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
STK500-Besitzer wrote:
> Richtige Notaus darf man eh nicht an Software koppeln.

Das fällt aber unter die Rubrik "Sagen und Gerüchte".

Es gibt industrielle Notaus-Taster am CAN-Bus.
Diese senden ständig ein Wohlfühl-Telegramm.
Und der Motorkontroller stoppt, wenn dieses Telegramm ausbleibt oder ein 
Stop-Telegramm kommt.


Peter

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind das dann nicht nur Not-Stop bzw. Maschine-Stop/Maschine-Aus Taster? 
Ich dachte auch, dass sich nur das Notaus nennen darf, was wirklich 
hardwaremäßig schluss macht. Der Controller darf natürlich auch was 
davon mitbekommen und reagieren, aber hardwarmäßig muss halt schluss 
sein. So wurde mir das erklärt.


Zum eigentlichen Problem wurde ja eigentlich schon alles gesagt. 
Interrupts kurz halten. Polls ins normale Programm verlegen. Und im 
"Not-Aus"-Interrupt entweder von Hand am Interrupt-flag und Stack 
pfuschen und dann zum Anfang springen, oder halt auf den Wachhund 
warten, was ich persönlich als sinvoller empfinde.

Sebastian

Autor: Tubie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Notaus muß nicht immer auf Hardware beruhen, kann auch Software sein.

Wir haben Maschinen bei uns in der Firma Schleifmaschinen stehen, die 
15kW antriebsleistung haben. Wenn ich da auf den Notaus drücke, sorgt 
die Steuerung dafür, das erst die Antriebe abgebremst werden und 
anschließend werden diese Stromlos geschaltet. Ohne den Bremsvorgang 
läuft solch ein Antrieb gut und gerne noch 60 sec nach. Dies passiert, 
wenn man die Steuerung vor den Schleifscheiben ausschaltet.

Gruß,
Tubie

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man das ganze dann noch mit einer Krone aus Laecherlichkeit zieren 
will,  verbaut man Notaus-Taster mit Schloss, wie bei uns in den 
Rechnerlaboren. So dass, sollte der Notaus benoetigt werden, dieser 
nicht benutzt werden kann, da er abgeschlossen ist. Absperrbare 
Notausgaenge fehlen uns auch schon lange.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Tubie (Gast)

>Notaus muß nicht immer auf Hardware beruhen, kann auch Software sein.

Naja, wird man aber nur ungern wählen

>die Steuerung dafür, das erst die Antriebe abgebremst werden und
>anschließend werden diese Stromlos geschaltet. Ohne den Bremsvorgang

Wer sagt denn, dass das per Software passiert?

MfG
falk

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das fällt aber unter die Rubrik "Sagen und Gerüchte".

Wenn man den Notaus in Software als Totmannschalter (periodische 
Triggerung eines Monoflops) realisiert, ist das noch in Ordnung. Wobei 
die Maschine bei einem Ausbleiben des Triggers in einen sicheren Zustand 
übergehen muß.
Eine solche Schaltung (mit Redundanz) habe ich bei einer Steuerung für 
eine Druckmaschine "erleben" dürfen.
In den Schaltplänen wurde sie speziell markiert und durfte nur in der 
dargestellten Form verwendet werden (irgendeine Sicherheitsbehörde hatte 
die Schaltung so abgenommen).

Zur Schleifmaschine: Die Bremse dürfte eigentlich nur so geschaltet 
sein, dass sie im stromlosen Zustand zupackt".
LKW-Bremsen sind ja auch nur gelöst, wenn Luftdruck anliegt...

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.