Interrupt INT0/INT1 bei Atmega8

Gast #1200627
Hi!

Bin ein Neuling betreffend µCs.
Wollte bei meinem Atmega8 mit den externen Interrupts experimentieren.
Ich verwende das "Atmel Evaluations-Board Version 2.0.1" von Pollin.

Code rüberspielen ist kein Problem. Aber da ist noch irgend ein 
logischer Fehler oder es fehlt irgendetwas. Liegt das am MCUCR? Habe 
versucht auf "Any logical change on INTx generates an interrupt request" 
zu stellen -- ISCx1 = 0, ISCx0 = 1.

Ich will per Tastendruck eine der zwei LEDs auf dem Board ausschalten.
Die Spannungspegel kommen auch am Controller an.
Also muss wohl oder übel ein Fehler im Code sein. peinlich :)

Hoffe ihr könnt mir helfen!
Danke im Voraus

Peter
Angehängte Dateien:
Gast
@Sepp:
Entprellen ist doch Nebensache, weil ich die LED im Interrupt ja eh nur 
ausknipse. Oder ist da brauchbarer Code dabei?

@Walter:
Dachte dafür ist das "sei()"?

Danke derweil
Peter
Gast
>@Walter:
>Dachte dafür ist das "sei()"?

Manchmal ist Denken Glückssache...
Guck dir die Register deiner Interrupts an. DA wird irgendein Bit 
"...Enable" heissen.
Gast
@jussa
Alles klar, okay danke. "GICR" könnte der richtige Weg sein.
Frank war neulich hier an meinem Rechner und ich hab nicht drangedacht, 
dass ich den Namen noch oben ändern muss.

@stephan-
Das ist momentan nur zum Debuggen. Da kommt später schon ein sauberer 
high/low-Pegel von einem IC hin. Bis jetzt hab ich eh nur hardwareseitig 
entprellt.
Gast
Frank, sag bitte mal dem Peter, er möge sich auch mal das Datenblatt des 
Atmega8 ansehen. Da steht so ziemlich alles über die I/O-Register drin.

...
Hätte auch eine Frage zum Interrupt, programmiere in Assembler mit dem 
AtMega16 und irgendwie bekomm ich das nicht hin. Habe BTN7 an PD3 
angeschlossen und die LEDS an PD0:3. Ohne Interrupts kann ich die LEDS 
ganz normal ansteuern, beim Interrupt gibts halt Probleme:

.NOLIST
.INCLUDE "m16def.inc"
.LIST


.equ temp, 0x10
.equ leds,  0x11


.section    .text


.org 0x0000

    rjmp main


.org INT1addr

    jmp EXT_INT1



main:

      ldi      temp, lo8(RAMEND)
     out     SPL, temp
     ldi       temp, hi8(RAMEND)
     out     SPH, temp

      ldi     temp, 0x00
      out   DDRD, temp
      ldi     temp, 0xFF
      out   DDRC, temp
      ldi     temp, 0XFF
      out   PORTD, temp


      ldi      temp, 0b00001000
      out     MCUCR, temp
      ldi      temp, 0b10000000
      out     GICR, temp

      sei


infinite_loop:

        rjmp infinite_loop

EXT_INT1:
        ldi    temp, 0XFF
       out   PORTC, temp
        reti



Vielleicht kann mir ja jemand helfen, sitz schon Ewigkeiten herum und 
mir fällt nichts mehr ein.

Lg
Gast
Hi

>Ohne Interrupts kann ich die LEDS ganz normal ansteuern, beim Interrupt >gibts 
halt Probleme:....

1.Welche?

2.    ldi      temp, 0b00001000
      out     MCUCR, temp
      ldi      temp, 0b10000000
      out     GICR, temp

Schreibe mal lieber 'ldi tmp, 1<<xyz' Mit der Bitbezeichnung xyz. Ist 
sicherer und auch ohne Datenblatt lesbar.


MfG Spess
Mark Drobnick wrote:
> .equ temp, 0x10
> .equ leds,  0x11
> [...]
>       ldi     temp, 0x00
Du solltest Dich vielleicht mal erkundigen, was .equ überhaupt macht! Es 
macht jedenfalls nicht das, was Du vermutlich denkst...

Abgesehen ist das mit dem .equ syntaktisch falsch (und kann deshalb 
schon mal gar nicht assemblieren).
Habs jetzt hinbekommen, das einzige was ich geändert hab war ein mal 
zwei bei INT1addr, also ".org INT1addr * 2", weil die vordefinierten 
Adressen anscheinend Word Format haben und der Assembler Byte haben 
will.

Mit dem assemblieren hatte ich keine Probleme. Wie hätt ich das mit dem 
.equ besser machen sollen?

lg

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.