www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik atmega64 und externe Interrupts


Autor: jakob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo µC Community,

Ich sitze hier vor einem Atmega64 und möchte INT0-INT3 auf steigende 
Flanke aktivieren. Doch immer wenn ich diese Aktiviere, springt der PC 
unkontrolliert in eine Stelle des Flashs, ich weiß nicht woran es liegt. 
Hat hier jemand schonmal diese aktiviert und kann mir einen 
Codeausschnitt senden? Ob ASM oder C ist mir eigentlich egal, kann ich 
dann ja jeweils portieren!

Ich hoffe sehr, dass mir jemand weiterhelfen kann, denn aus dem 
Atmel-Datasheet werde ich nicht schlau :D

Gruß,
Jakob

Autor: Sumynona (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtige header-Datei verwendet?
Richtigen Interrupt verwendet?

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vectortabelle mit .org auf die richtigen Adressen gesetzt?
Richtige Reihenfolge in der Vectortabelle?

Autor: jakob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm ich arbeite mit C, setze folgende Register:
EIMSK &= ~(1<<INT0) & ~(1<<INT1) & ~(1<<INT2);
EICRA |= (1<<ISC00) | (1<<ISC01) | (1<<ISC10) | (1<<ISC11) | (1<<ISC20) | (1<<ISC21);
EIFR |= (1<<INTF0) | (1<<INTF1) | (1<<INTF2);
EIMSK |= (1<<INT0) | (1<<INT1) | (1<<INT2);

Diese werden so im Datasheet vorgeschrieben, wenn ich es richtig 
interpretiert habe.

Die ISRs sind: IN0_vect bis INT2_vect, sie werden jedoch garnicht es 
durchlaufen!

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde garnicht erst die Register setzen.

Wenn du in GCC arbeitest ist die beste lösung:

#include <avr/interrupts.h> //oder interrupt

im Code mit sei(); aktivieren
dann einfach nur noch die ISRs setzen

MFG Max

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

Bewertung
0 lesenswert
nicht lesenswert
Max wrote:
> Ich würde garnicht erst die Register setzen.
Und woher soll der µC dann bitteschön wissen, welche Interrupts aktiv 
sein sollen und auf welche Flanke die reagieren sollen?

> Wenn du in GCC arbeitest ist die beste lösung:
>
> #include <avr/interrupts.h> //oder interrupt
Ohne "s". Aber das wird er wohl schon gemacht haben, weil der Compiler 
ihm sonst einen Haufen Fehlermeldungen um die Ohren gehauen hätte, 
allein wegen unbekannter Dinge wie "ISR" und "sei()"...

> im Code mit sei(); aktivieren
Auch das ist wohl selbstverständlich.

> dann einfach nur noch die ISRs setzen
Setzen? Wie meinen?

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe nur das er die Register setzt. Er hat uns nicht gesagt ob er 
die interrupt.h einbindet.

Dadurch ist sei(); auch nicht selbstvertändlich.

ISR: ISR(INT0_vect)
     {
       ....
     }

Wenn du ein konkretes Codebeispiel brauchst, kann ich ich es gerne hier 
rein stellen

MFG max

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

Bewertung
0 lesenswert
nicht lesenswert
Max wrote:
> Ich sehe nur das er die Register setzt. Er hat uns nicht gesagt ob er
> die interrupt.h einbindet.
Zitat OP:
>> Die ISRs sind: IN0_vect bis INT2_vect, sie werden jedoch garnicht es
>> durchlaufen!
Es ist also davon auszugehen, dass er das getan hat, da er ansonsten, 
wie oben schon gesagt, noch einen Haufen Fehlermeldungen bekäme und 
demzufolge weder etwas Flashbares noch etwas Simulierbares bekommen 
hätte.

> Dadurch ist sei(); auch nicht selbstvertändlich.
Doch. Er schreibt schließlich, dass bei einem Interrupt gesprungen wird 
(was ohne sei() nicht der Fall ist), nur eben nicht dahin, wo er 
hinspringen will...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die üblichen Verdächtigen:

- M103 Fuse
- ein Interrupthandler fehlt
- falsches Target


Peter

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.