-         

Ergebnis 1 bis 9 von 9

Thema: Interrupte schachteln ? ATmega128

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    06.04.2008
    Beiträge
    18

    Interrupte schachteln ? ATmega128

    Anzeige

    Hallo Leute,

    ich habe ein Programm mit mehreren ISR - Routinen geschrieben.

    Eine Routine ist dabei recht lang geworden und wird dazu noch alle 13,33 ms aufgerufen,
    (damit meine berechnungen auch regelmäßig gemacht werden PID et. )

    Dazu kommen noch sehr kleine Routinen, die Zählerüberlauf signalisieren, einen Incrementalgeber abfragen etc.

    Ich habe nun das Problem , dass in der Zeit, in der die Berechnungsroutine bearbeitet wird, keine anderen Interrupte bearbeitet werden können und mir somit z.B. Schritte meines Motors flöten gehen.

    Gibt es einen Trick, um innerhalb einer ISR weitere Interrupte zuzulassen ?

    vielen dank

    olby2

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    53
    Beiträge
    1.080
    Nein, das geht nicht. Interrupts haben eine bestimmte Priorität. Sie gehen dir evtl. auch nicht verloren, werden aber erst nach Beendigung der laufenden ISR ausgeführt.

    Generell sollte man darauf achten, Programmteile in ISR so kurz wie möglich zu halten. Es empfiehlt sich, hier nur Flags zu setzen und auf diese dann im Hauptprogramm zu reagieren.

    Was bezeichnest du als "lange" Routine? Gibts vielleicht die Möglichkeit, hier noch etwas zu optimieren in Bezug auf die Ausführungsgeschwindigkeit? (z.B. Vorausberechnungen oder Assembler)

    Gruß MeckPommER
    Mein Hexapod im Detail auf www.vreal.de

  3. #3
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Man kann in der ISR Interrupts wieder freigeben. Wenn möglich sollte man das aber vermeiden, denn es ist recht fehleranfällig. Auf alle Fälle sollte man vermeiden das der Selbe Interrupts nochmal auftritt bevor er zuende ist.
    Bascom sichert ziehmlich viele Register in der ISR, man braucht also ein paar extra Bytes an Platz auf dem HW Stack.
    Die Interruptsprioritäten haben da nicht viel mit zutun. Beim AVR geben die nur an welche ISR zu erst ausgeführt wird, wenn mehrere Interrupts zur Ausführung anstehen.

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.552

    Re: Interrupte schachteln ? ATmega128

    Zitat Zitat von olby2
    ... mehreren ISR - Routinen geschrieben ... Eine ... ist dabei recht lang ... wird ... alle 13,33 ms aufgerufen, (... PID et. ) ...
    Wenn ich Interrupts plane, dann halte ich die ISR so kurz wie möglich und ich habe auch noch nie nested interrupts benutzt, nicht wissentlich (ja, mal als Pannenfall *gggg*). Da ist schon etwas Gehirnschmalz und auch gelegentlich Experiment angesagt. Ob so eine lange ISR wie Deine sinnvoll ist, wage ich fast zu bezweifeln.

    Zitat Zitat von olby2
    ... wird ... alle 13,33 ms aufgerufen ...
    Für einen PID ist diese Frequenz sicher nicht allzu schnell - aber da Du schreibst, dass Du noch etliche andere hast, werden das bestimmt nie 13,33 ms, ich vermute, dass das in der Zielumgebung deutlich langsamer und ungleichförmiger wird. Dann stimmt eben auch die ganze Regelung nicht, weil anzunehmen ist (ich gehe bei meinen Planungen jedenfalls für mich immer davon aus), dass die verschiedenen ISR sich gegenseitig stören könnten. Und der digitale Regler hat sowieso ein Zeitglied, weil die Regelung zumindest bei den hier üblicherweise verwendeten Controllern mit einer "alten" Geschwindigkeitserfassung arbeiten muss. Wenn dann das jeweilige Alter schwankt und die Regelfrequenz noch dazu - - oh heiliger Regulus.

    Ich habe einen PI-Regler in einer ISR implementiert. Problem: Rechenzeit mit floating point *ggrrrrr* war zwei bis drei Millisekunden . Also habe ich das Ganze in Integer gemacht, ein bisschen popeln, ein bisschen tricksen, ein bisschen mal grob schätzen und die gemessenen Reglerkonstanten hinschummeln, viel testen und - läuft prächtig ! ! weniger als 50 µS bei 20 MHz ... und das regelt zwei ziemlich unterschiedliche Motoren sehr sauber auf Gleichlauf bei gleichen Sollwerten. Regelfrequenz für jeden einzelnen Motor rund 100 Hz, die Motoren werden bei versetzten ISR-Aufrufen bedient, um die ISR nicht zu lange dauern zu lassen.

    Wenn Du das mit den nested interrupts realisierst, dann berichte aber bitte über Deine Erfahrungen. Ich lerne gerne dazu.

    Viel Erfolg
    Ciao sagt der JoeamBerg

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    06.04.2008
    Beiträge
    18

    Lösung :-)

    Ich habe eine Lösung gefunden.

    In der "Haupt"-ISR Routine habe ich in der 2. Zeile

    "Enable Interrupts" eingefügt und schon kommen auch weitetere Interrupte innerhalb der
    "Haupt"-ISR
    ( mit dem Oszi nachgewiesen )
    läuft super

    olby2

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    Und falls zweimal der selbe Interrupt kommt, stürzt du ab.

    mfG
    Markus

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    06.04.2008
    Beiträge
    18

    Interrupt schachteln

    Zitat Zitat von markusj
    Und falls zweimal der selbe Interrupt kommt, stürzt du ab.

    mfG
    Markus
    Das ist zwar richtig, doch sollte kein problem sein.
    meine "Haupt-ISR" ist 1,5 ms lang und wird alle 13,33 ms aufgerufen und die anderen Interupt-Routinen sind je nur 2-3 Zeilen lang
    Sollte also rein rechnerisch kein Problem sein - läuft jetzt auch schon mehrere Stunden am Stück ohne Fehler.

    gruß
    olby2

  8. #8
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Schon bei einzelnen Interrupts ist die Fehlersuche relativ schwierig, besonders bei sporadischen Fehlern, bei verschachtelten Interrupts macht die Fehlersuche gleich noch mal mehr Spass.
    Aber solange es geht ist ja gut.

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.552

    Re: Interrupt schachteln

    Zitat Zitat von olby2
    ... Sollte also rein rechnerisch kein Problem sein ...
    Viele (die meisten?) Unfallberichte beginnen etwa so:

    Die Sache war gut überlegt und eigentlich hätte nichts passieren dürfen . . .
    Ciao sagt der JoeamBerg

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •