mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt INT0/INT1 bei Atmega8


Autor: Frank (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da fehlt irgendwie ein Enablen des Interrupts

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank wrote:

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

das ist für die globale Aktivierung, aber du musst natürlich noch die 
ext. Interrupts selber enablen...siehe Tut


> Danke derweil
> Peter

wie nun, Frank oder Peter

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>@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.

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ist das Problem,........
Tasten niemals mit Interrupt entprellen oder Abfragen !!
Gibt nur Ärger !!
Oder wieviele Interrupts löst Deine Taste aus ??

Die "Nebensache" fängt eben im Detail an !!

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit "GICR" scheint's zu klappen. Wobei das im Tutorial afaik aber keine 
Verwendung findet.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter wrote:
> Mit "GICR" scheint's zu klappen. Wobei das im Tutorial afaik aber keine
> Verwendung findet.

doch, nur unter anderem Namen

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

...

Autor: Mark Drobnick (mark85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mark Drobnick (mark85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, mit 1<<xyz hast Recht.
Problem is halt das die LEDS nicht angehen wenn ich den Button drücke. 
Scheint sonst der Code in Ordnung zu sein?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe grad, dass das gar kein AVR-Assembler ist! Womit assemblierst 
Du das? Mit dem GNU-Assembler?

Autor: Mark Drobnick (mark85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mark Drobnick (mark85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Assembler dürft avr-as, avr-gcc sein. Musste jetzt selber nachschaun 
weil wir von der Uni schon ein fertiges Makefile bekommen haben und die 
ganzen Packages schon installiert waren.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mark Drobnick wrote:
> Assembler dürft avr-as, avr-gcc sein.
Dürfte? Toll, da programmiert einer und weiß gar nicht, womit...

> Musste jetzt selber nachschaun
So, muss ich das?

Autor: Mark Drobnick (mark85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr nett danke, programmier seit gestern das erste mal einen 
Microcontroller. Aber sinnlos zu diskutieren, jetzt hab ichs ja eh 
hinbekommen.

Schönen Abend noch!

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.