-
        

Ergebnis 1 bis 7 von 7

Thema: Externer Interrupt mit INT0

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    33
    Beiträge
    240

    Externer Interrupt mit INT0

    Anzeige

    Hallo

    Wollte mich gerade mal an die Sache mit Interrupts heranwagen. Und gleich sind mehrere Fragen/Probleme aufgetaucht . Ich hab mir das eigentlich so vorgestellt dass ich an INT0 weiterhin den internen Pull up verwenden kann. Jetzt hab ich aber im Datenblatt gelesen dass ich um den Externen Interrupt zu verwenden, den Pin INT0 als Ausgang definieren muss. Ich habe hier einen Taster angeschlossen der den Port dann auf "0" zieht (Taster geöffnet >> Pin "hängt in der Luft"). kann ich so dann überhaupt einen Interrupt auslösen? Oder muss ich dem Taster einen externen Pull Up gönnen damit ich eine Flanke bekommen?
    Außerdem wollte ich fragen ob es möglich ist dass eine Interruptroutine von einer anderen unterbrochen wird um etwas anderes zu tun. Ich kenne das vom 8051, da konnte man den einzelnen Interrupts verschiedene Prioritäten geben. Das war manchmal recht geschickt...

    Grüße!!

    Bean

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    Jetzt hab ich aber im Datenblatt gelesen dass ich um den Externen Interrupt zu verwenden, den Pin INT0 als Ausgang definieren muss.
    Wenn du dich da mal nicht verlesen hast. Bei den AVR's die ich kenne, funktioniert der Interrupt _auch_ , wenn der PIN ein Ausgang ist.
    Ich habe hier einen Taster angeschlossen der den Port dann auf "0" zieht (Taster geöffnet >> Pin "hängt in der Luft"). kann ich so dann überhaupt einen Interrupt auslösen?
    Du schließt den Ausgang mit einem Taster kurz?
    Für die Interruptpins gelten die gleichen Regeln, wie für alle anderen Eingänge, also nicht offen lassen, Pullup oder Pulldown.
    Über die passenden Register stellst du dann ein, ob und auf welche Flanke der Interrupt reagiert. Dann brauchst du halt noch die passende ISR.

    Außerdem wollte ich fragen ob es möglich ist dass eine Interruptroutine von einer anderen unterbrochen wird um etwas anderes zu tun.
    Ja das geht, ist aber nicht zu empfehlen.
    klick mich

    Gruß

    Jens

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    33
    Beiträge
    240
    Also ich schließe denke ich nichts kurz, da sonst bestimmt schon der eine oder andere AVR abgeraucht wäre... Normalerweise verwende ich den internen PullUp. Dann fließt wenn ich den Pin auf Masse ziehe ein Strom durch den internen PullUp... etc.

    ...wenn der PIN ein Ausgang ist
    Meintest Du Eingang?

    Hier mal der Auszug aus dem Datenblatt

    ...the interrupts will trigger even if the INT0..1 pins are configured as outputs.

    Kann auch sein dass mich mein Englisch im Stich gelassen hat...

    Grüße!

    Bean

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Das heißt, dass der Interrupt sogar dann funktioniert, wenn INT0..1 als Ausgang konfiguriert ist. Damit kann man wunderschön via Software einen Interrupt auslösen.
    In den meisten Fällen wird er aber wohl als Eingang benutzt, um eine Aktion bei einem externen Signalwechsel auszuführen.

    Gruß

    Jens

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    33
    Beiträge
    240
    Puhh da hab ich aber Glück gehabt... Danke... naja funktionieren tut es leider trotzdem noch nicht. Ich hab jetzt mal gemessen, wenn ich den interne PullUp einschalte hab ich an dem Pin INT0 4,9V Wenn ich den Taster drücke 0. Also wie erwartet. Ich hab die Interrupts mit sei() freigegeben. Wie kann ich noch einstellen dass auf eine fallende Flanke reagiert wird? Entprellen wollte ich dann in der ISR machen...

    Grüße!!

    Bean

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Hallo, Mister,
    Zitat Zitat von Mr Bean
    ... Auszug aus dem Datenblatt ... the interrupts will trigger even if the INT0..1 pins are configured as outputs... Englisch im Stich gelassen ...
    Dein Englisch ist schon ok. Aber Du müsstest das ganze Datenblatt durchlesen - hatte ich auch nicht . Es ist einfach so, dass Du aufregend viel Strom brauchst um gegen den als Output konfigurierten Pin anzugehen, das hatte ich da (klick mich) mal selber gemessen. Und wenn Du bedenkst, dass Dein Groundpin auch nur eine beschränkte Ableitfähigkeit hast - siehe Datenblatt - dann bist Du rasch am Ende. Also - wenn Du den Pin als extINT0 benutzen willst, dann mach es wie ich: konfiguriert als Eingang, externer Pull up mit 10k - und es geht wirklich s..ehr gut. Ich habe eine streichholzkopfgrosse Lichtschranke dran - die bei 1,5 kHz noch prächtig erkannt wird. Weitere Daten im genannten posting.
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    N alter Mann ist doch kein D-Zug, soo schnell bin ich nicht wie meine µC´s. Daher :
    Zitat Zitat von Mr Bean
    ... Wie kann ich noch einstellen dass auf eine fallende Flanke reagiert wird? ...
    Einfach das doc lesen
    Code:
    void XTI01_init( void )	
    {				//Initialisiere beide Interrupts auf rising edge
    				//  d.h. EICRA ISC00,01,10+11 auf 1 (doc,S68)
        EICRA |= (1<<ISC11)|(1<<ISC10)|(1<<ISC01)|(1<<ISC00);
        EIMSK  |= (1<<INT1)|(1<<INT0);	//  und erlaube diese I´s in EIMSK
    }
    ... für die fallende Flanke sind die ~11 und ~10 glaube ich 1-0 statt wie hier 1-1.

    Die Diskussion wär effektiver, wenn Du den Controller nennen würdest.
    Ciao sagt der JoeamBerg

Berechtigungen

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