mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt prioritäten änder bei atmega32


Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
kann man die Interrupt prioritäten ändern beim atmega32?
Ich möchte gerne den komperator interrupt auf stelle 2 legen
ist das möglich?

Damit mache ich nämlich eine Akkuumschaltung.
Und wenn der Atmega noch im timer0 oder 1 int ist dauert es zu lange um
in den komperator int zu kommen.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In den Timer-Interrupts die Interrupts wieder einschalten. Geht bei den
meisten AVR-Interrupts, nämlich allen, deren Flag implizit mit dem
Aufruf der Interrupt-Routine zurückgesetzt wird.

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Geht bei den meisten AVR-Interrupts, nämlich allen,
>> deren Flag implizit mit dem Aufruf der Interrupt-
>> Routine zurückgesetzt wird.

.. und bei den anderen gehts auch wenn man das Flag per SW
zurücksetzt.
Generell sollte man aber schon recht genau wissen was man dabei tut
sonst endets in einem Aufruf- und Rücksprungchaos.

grüße leo9

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe aller interrupts als SIGNAL realisiert.
Geht das dann auch?
Aber wenn ich in der Timer ISR bin und in der ISR interrupts wieder
zulasse und mein komperator interrup löst aus.
Wird dann die timer ISR unterbrochen?
Weil die ist doch von höherer priorität?

Weil ich hätte es gerne so. Egal was gerade läuft.
Wenn der komperator auslöst soll sofort auf akku umgeschaltet werden

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"auch wenn man das Flag per SW zurücksetzt."

Bei manchen Komponenten, wie I2C/USI, kann das etwas haarig sein - den
Interrupt ausschalten ist ok, aber das Flag zurücksetzen löst manchmal
eine Aktion aus.

"Ich habe aller interrupts als SIGNAL realisiert."

Ist ok, kannst in der Routine ja das Interrupt-Flag setzen.

"Weil die ist doch von höherer priorität?"

Nein, es gibt bei AVR keine echten Prioritäten - die im Handbuch
genannten "Prioritäten" beziehen sich nur auf die Entscheidung,
welcher Vektor verwendet wird, wenn gleichzeitig mehrere anstehen.
Jeder Interrupt kann jeden unterbrechen, wenn man ihm das erlaubt.
Folglich muss man damit vorsichtig umgehen und braucht genug Platz für
den Stack.

Eine andere Frage ist übrigens, ob dein Grundansatz sinnvoll ist. Es
hat hier schon Leute gegeben, die in der Interrupt-Routine eine ewig
lange Warteschleife gebaut haben. Generell gilt, dass in
Interrupt-Routinen nur einfache schnelle Aktivitäten reingehören. Was
länger dauert, gehört ins Hauptprogramm, der Interrupt löst das dann
per Flag nur aus.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"soll sofort auf akku umgeschaltet werden"

Sorg in der Auslegung der Stromversorgung und der Messschaltung dafür,
dass der Controller das schon ein paar Millisekunden vor Ultimo merkt -
also nicht die 5V messen, sondern die Spannung vor dem Regler, oder ggf.
auch die Netzspannung. Dann langt es bei jedem auch nur halbwegs
vernünftig arbeiteten Interrupt-System auch ohne verschachtelte
Interrupts.

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.