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
Tasten sind es meist nicht Wert auf Interrupts gelegt zu werden. Zudem sollten ISRs kurz sein. Da gibt es eignetlich nie was zu Unterbrechen.
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?
Man sollte alles lesen. Pack die Tastenabfrage in eine Polling-Schleife. Dann kann dein NOT-AUS jederzeit zuschlagen.
@ 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
@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
Häng den Notaustaster als Öffner in die Spannungsversorgung des Mega16. Das gibt genau deinen oben gewünschten Effekt :-) Oliver
> @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.
@ 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
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.
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
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
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
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
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.
@ 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
>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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.