-         

Ergebnis 1 bis 8 von 8

Thema: Externer Interrupt will nicht :(

  1. #1

    Externer Interrupt will nicht :(

    Anzeige

    Hallo mitsammen, dies ist mein erster Besuch und gleich schon mit einer Frage

    Ich nutze den PORTB.
    es kommt mir vor, als würde sofort nach dem Einschalten ein IRQ
    auftreten, und auch danach in sehr kurzen abständen (10ms?).
    Ich habe eine LED angehängt und die scheint zeitweise zu flackern (für
    ein paar Sekunden) dann leuchtet sie wieder durchgehend (auch wieder
    ein paar Sekunden).

    der Code ist folgender:

    Code:
    #include <avr/io.h>        
    #include <avr/interrupt.h>    // sei()
    #include <avr/signal.h>      // SIGNAL
    
    #define XTAL 1000000
    
    int ab = 0x00;
    
    int main(void) {
    
      // configure all PortB bits as output
      DDRB = 0xff;
      PORTB = 0x00;
      
      //configure the external interrupt
      GICR |= (1<<INT0);
      MCUCR |= (1<<ISC00) | (1<<ISC01);
    
      
      // enable interrupts
      sei();
      while(1);
      return 0;
    }
    
    SIGNAL (SIG_INTERRUPT0) {
      if (ab == 0x00)
      {
        PORTB = 0xff;
        ab = 0xff;
      }
      else
      {  
        PORTB = 0x00;
        ab = 0x00;
      }
    }
    Nun zur eigentlichen Frage: warum ist das so? Ein IRQ sollte doch erst
    bei Überschreiten eines gewissen Pegels auftreten .. oder? - Mein
    Multimeter zeigt eigentlich schöne 0,00V (Low) und 4,3V (High) an.
    Das Ganze hängt an einem FT245 - kann hier das Problem liegen?

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    28.04.2004
    Ort
    Nähe Köln
    Alter
    51
    Beiträge
    247
    Hallo

    Was ich erstmal vermisse ist, das den INT0 Pin als Eingang schaltest.

    Der Rest sollte sich im AVR Studio leicht nachvollziehen lassen.

    MFG
    Dieter

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    33
    Beiträge
    172
    Der INT0 ist automatisch ein Eingang wenn er als INT geschaltet wird. Du solltest die Variable "ab" direkt in der INT Schleife deklarieren oder wenn du sie auch ausserhalb brauchst, noch ein volatile davor schreiben. Also volatile int ab = 0.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    28.04.2004
    Ort
    Nähe Köln
    Alter
    51
    Beiträge
    247
    Hallo

    Der INT0 ist automatisch ein Eingang wenn er als INT geschaltet wird.
    Kannst du das belegen.Wäre mir neu.

    Da hast natürlich Recht, das der Pin beim starten als Eingang geschaltet ist, womit meine Aussage nichtig ist.

    Das mit dem volatile ist schon richtig, sowas sieht man doch gut mit AVR Studio.

    MFG
    Dieter

  5. #5
    so .. ich erklär mal kurz worum es geht:
    Es geht darum, mittels eines FT245BM im BitBang Modus die INT0 Leitung des Atmega8 auf High zu setzen. Mittels eines kleinen Programmes, welches ich in C# geschrieben habe, kann ich die 8 Data - Ports des FTDI Chips getrennt steuern.

    Nun hat der FT245BM am Ausgang ca. 4,3V.


    ich habe nun die Änderung (volatile) gemacht und es wird immer mysteriöser.

    Wenn ich auf einem Low Signal bin (0,0) und dann auf High gehe, schaltet sich die LED ein. Wenn ich nun auf High bin, und noch des öfteren ein High auf die Ports schreibe, schaltet sich die LED irgendwann (nach dem 2ten oder 3ten mal) wieder aus .. dann noch ein paar mal 0xff auf die ports schreiben und die LED geht wieder an ...

    Wohlgemerkt: Ich gehe in der Zwischenzeit nicht einmal auf Low

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    33
    Beiträge
    172
    @Dino Dieter. Aus dem ATMega8 Datenblatt Seite 65.
    Activity on the pin will couse an interrupt request even if INT0 is configured as an output
    @Lionic. Das Programm sieht sauber aus also denke ich es liegt an deiner Elektronik.

  7. #7
    @kater:

    Danke für die Antwort

    Ich habe jetztmal einfach versucht das Signal abwechselnd direkt am Steckbrett auf Low/High zu setzen, aber keine Chance, dasselbe. Somit liegts wohl nicht am FT245er ...

    Werde - wenn ich heute abend dazu komme - mal die Schaltung neu aufbauen und evtl. den uC austauschen - vielleicht passt ja damit was nicht .. ich meld mich jedenfalls wieder

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    28.04.2004
    Ort
    Nähe Köln
    Alter
    51
    Beiträge
    247
    Hallo

    @Kater


    Activity on the pin will couse an interrupt request even if INT0 is configured as an output
    Heißt aber nicht, das der PIN dann Eigang ist, sondern nur, das der INT auch auslöst, wenn der PIN als Ausgang geschaltet ist und ein wechsel des Signals vorkommt. Möglichkeit eines Software Int.

    Kann eine böse Falle sein , das so zu deuten, das der Pin automatisch
    als Eingang geschaltet wird.

    MFG
    Dieter

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •