www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit ext. Interrupt bei Amega128


Autor: Michael H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich arbeite mit dem AVR-Studio 4 (mit GCC-Compiler) und programmiere 
über das STK500 einen ATmega128. Ich habe nun ein simples Testprogramm 
(siehe unten) geschrieben mit welchem ich nur über einen externen 
Interrupt (fallende Flanke) einen Ausgang toggeln möchte (LED blinken).

Beim AVR-Studio 4 ist ja ein eigentlich recht nützlicher Simulator 
dabei, mit welchem ich das Programm auch getestet habe: es hat auch 
funktioniert. Wenn ich es jedoch am CRUMB128 selber teste, funktioniert 
das Programm nicht.

Hier der Programm-Code:

  #include <AVR/io.h>
 #include <AVR/signal.h>
 #include <AVR/interrupt.h>

int a;  // Hilfsvariable (setzen oder rücksetzen)

int main(void)
{

  DDRB=0xFF;  // PortB als Ausgang
  PORTB=0xFF;  // Pull-up

  DDRE=0x00;  // PortE als Eingang
  PORTE=0xFF;  // Pull-up

  EICRB |=  (1<<ISC71);  // Interrupt reagiert
  EICRB &= ~(1<<ISC70);  // auf fallende Flanke

  EIMSK |=  (1<<INT7);

  sei();      // allgemeine Interruptfreigabe

  while(1)    // warte auf Interrupt
  {
  }

  return 0;
}


SIGNAL (INT7_vect)  // wenn fallende Flanke kommt

{
  if(a==0)  // wenn a=0
  {
    PORTB &= ~(1<<PORTB0);  // Ausgang löschen
    a=1;  // bei nächster Flanke --> else-Zweig
  }
  else    // wenn a=1
  {
    PORTB |= (1<<PORTB0);  // Ausgang setzen
    a=0;  // bei nächster Flanke --> if-Zweig
  }
}




Kann mir bitte jemand helfen, ich wäre wirklich für jeden Hinweis 
dankbar.


Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
statt:

  if(a==0)  // wenn a=0
  {
    PORTB &= ~(1<<PORTB0);  // Ausgang löschen
    a=1;  // bei nächster Flanke --> else-Zweig
  }
  else    // wenn a=1
  {
    PORTB |= (1<<PORTB0);  // Ausgang setzen
    a=0;  // bei nächster Flanke --> if-Zweig

kannst du auch einfach

PORTB ^= (1<<PORTB0)

nehmen. exklusiv oder

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und womit erzeugst Du Deine fallende Flanke? Doch wohl hoffentlich nicht 
mit einem Taster, oder? Wenn doch: Wenn Du einen Taster an einen 
externen Interrupt anschließt (und dann auch noch ohne Entprellung), 
dann kann alles Mögliche passieren. Nur ist das in den seltensten Fällen 
das, was Du willst... Ach ja, und Basti hat natürlich auch recht.

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.