mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEGA8 Int0 + ADC-Int -> manchmal Absturz (ASM)


Autor: Andreas T. (andyt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bei einem ATMEGA8L ist der ADC-Interrupt und der Int0 aktiv.
Der ADC-Int. läuft zu 99% der Zeit mit 5000sps (clock 8 MHz) Ub=4V.
Alles korrekt abgeblockt usw. Das Programm ist in Assembler (AVR-Studio) 
geschrieben und belegt ca. 3700 Bytes (cseg).

Der Int0 wird mit einem Taster gegen Masse ausgelöst.
Der Pullup-Widerstand für den Pin ist aktiv.
Es ist noch reichlich RAM vorhanden (Stack).

Int0 soll später einen Flag in einem Register verändern.
Allerdings gibt es schon mit der gezeigten Int0-ISR seltsame
Probleme. Siehe Kommentar.
Das Gleiche passiert übrigens auch bei Verwendung anderer Register.

Bin etwas ratlos...

Initialisierung:
outi  MCUCR,0b00000000  ;Int0: Low-Level, Int1:Low-Level (S.65)
sbit  GICR,INT0    ;Int enabled:bit6  (S.65)

   ....main....

int0_isr:  ;es ist jeweils nur eine der auskommentierten Zeilen aktiv!
  push  r17
  ;ori  r17,0b10000000  ; manchmal RESET
  ;andi  r17,0b01111111  ; manchmal RESET
  ;ldi  r17,33         ; nie RESET !
  pop r17
  reti

Wieso kommt es manchmal zum Reset bzw. auch "Absturz" d.h. Programm 
läuft nicht mehr?

Gruß+Danke
Andreas

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>  ;ori  r17,0b10000000  ; manchmal RESET
>  ;andi  r17,0b01111111  ; manchmal RESET
>  ;ldi  r17,33         ; nie RESET !

'ori' und 'andi' verändern u.U. die Flags in SREG. 'ldi nicht. Du 
solltest in der ISR SREG sichern.

z.B

   push r16
   in r16,SREG
   push r16
   ....

   pop r16
   out SREG,r16
   pop r16
   reti

MfG Spess

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wieso kommt es manchmal zum Reset bzw. auch "Absturz" d.h. Programm
> läuft nicht mehr?

Weil ori und andi Einfluss auf das SREG haben und du es in der ISR nicht 
sicherst und restaurierst.

Autor: Andreas T. (andyt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mist, hätte ich auch selber drauf kommen können, zumal ich
das in der ADC-ISR auch so gemacht habe....


Vielen Dank!

Andreas

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.