www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit Interrupt0 Atmega32


Autor: Stefan K. (zerb287)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin gerade dabei auf einem Atmega32 i.V.m dem AVR-NET-IO Board von 
pollin den Externen Interrupt 0 einzurichten.

Jedoch funktioniert dieser nicht wie gewollt. Manchmal geht er, manchmal 
nicht, teilweise setzt er sich selbst etc. Ich habe das Gefühl als 
wollte er mich "verarschen" ;-)


Mein Code:

#include <avr/io.h>
#include <avr/interrupt.h>

ISR(INT0_vect) {

PORTC &=~(1<<PC7);

}

int main(void) {
DDRC =0xFF;
GICR|=(1<<INT0);
MCUCR|=((1<<ISC01)|(1<<ISC00));
sei();
PORTC |=  (1<<PC7);
while(1) {
   // Zum Test leere Schleife
   }


return 0;
}


Habe ich darin einen Fehler?


Gruß,

Stefan

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Habe ich darin einen Fehler?

Auf den ersten Blick nicht.

Woher kommt denn das Signal an INT0?

Oliver

Autor: Stefan K. (zerb287)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

naja, an INT0 ligt standartmäßig eine 0 an. Das Port hat einen Quelle, 
die 5V liefert.

So müsste ja der Interrupt ausgelöst werden, wenn ich die 5V mit dem Pin 
von INT0 verbinde.

Gruß

Stefan

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan K. wrote:

>
> So müsste ja der Interrupt ausgelöst werden, wenn ich die 5V mit dem Pin
> von INT0 verbinde.

und wie das geschieht ist mal wieder ein Geheimnis...
also Kristallkugel: Nicht-entprellter Taster

Autor: Stefan K. (zerb287)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nein, sorry, hielt die Info für nicht wichtig. Naja, ich mache das 
momentan mit einem Taster. Sobald das Programm in die ISR springt, ist 
ein _delay_ms(200) eingebaut.

Mein Problem ist aber, dass er manchmal springt, manchmal nicht. Das ist 
richtig seltsam.

Gruß

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan K. wrote:

> Sobald das Programm in die ISR springt, ist
> ein _delay_ms(200) eingebaut.

nö, außer du hast oben nicht den nicht-funktionierenden Code gepostet 
sondern etwas anderes...

Autor: Stefan K. (zerb287)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ich gerade eingebaut.

Wenn ich auf den Pin vom INT0 nur ein Kabel draufstecke, das weder an 
VCC noch an GND noch sonst wo angeschlossen ist, dann wird der Interrupt 
gesetzt!

WARUM???

Aber Teilweise,

wenn ich direkt die 5V dranhalte, dann wird er nicht gesetzt. Es reicht 
ja prinzipiell eine steigende Flanke aus.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan K. wrote:

> naja, an INT0 ligt standartmäßig eine 0 an.

also hast du einen PullDown-Widerstand angeschlossen?

Autor: Stefan K. (zerb287)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, ich habe überhaupt nichts angeschlossen.

Der Pinpfosten steckt auf dem Board, diesen wollte ich mit dem Schalter 
verbinden.

Frage:

Muss der INT0 Pin mit GND verbunden werden?

Eigentlich reicht es doch, wenn der Pinpfosten mit einer Quelle von 5V 
verbunden wird.

Genau das funktioniert aber nicht!

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan K. wrote:

> Eigentlich reicht es doch, wenn der Pinpfosten mit einer Quelle von 5V
> verbunden wird.

und sobald der Pin nicht mehr an 5V hängt, hast du einen floatenden Pin 
und da kann alles passieren...darum nimmt man für Taster etc immer einen 
PullUp oder PullDown-Widerstand, für ersteren kann man sogar den 
internen benutzen...

vielleicht solltest du einfach mal ins Tutorial schauen...

Autor: Stefan K. (zerb287)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,

danke euch. Jetzt funktioniert es. Ich habe nun den PullUP vom Port PD2 
auf High gesetzt und prüfe auf eine fallende Flanke!

Diese Bedingung ist erfüllt, sobald ich GND anlege.

Super. DANKE

Gruß Stefan

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.