Externe Interrupts

OP #2933913
Lesenswert?

Hi Leute,
ich möchte eine LED tooglen.Also wenn ich den Schalter lege(Kontakt an 
INT1 verbinde) soll er aus gehen und so bleiben.Nochmal: Soll an gehen 
und so bleiben.

Mit MCUCR ISC11=0 und ISC10=0 (the low level of INT1 generates an 
Interrupt) habe ich das bereits hingekriegt,in dem ich den PIN von INT1 
auf Input gestellt habe.

Will es aber mit allen möglichen Kombinationen aus ISC11 und ISC10 
hinkriegen.

Wenn ich ISC11=0 und ISC10=1(Any logical Change of INT1 generates an 
Interrupt). Dabei ist es egal ob ich den PIN von INT1 auf input oder 
output stelle.. die ISR wird ohne das ich was mache ständig aktiviert... 
die LED tooglet ständig von alleine..
Was mache ich falsch?

Das selbe Problem habe ich mit den steigenden/fallenden Flanken an den 
PIN von INT1.(Die beiden anderen Kombinationen aus ISC11 und ISC10).
Wie darf man steigende/fallende Flanke eigentlich  verstehen?
ggf. mit Beispielen erklärt wäre nice!!

Bedanke mich im Voraus!
#2933919
Lesenswert?

Dieter Glockenbach schrieb:
> Hi Leute,
> ich möchte eine LED tooglen.Also wenn ich den Schalter lege(Kontakt an
> INT1 verbinde) soll er aus gehen und so bleiben.Nochmal: Soll an gehen
> und so bleiben.

Mach es nicht über externen Interrupt, Thema Entprellung, gibts hier 
einen sehr guten Artikel dazu. Und man merkt, du hast die Suche nicht 
benutzt.

http://www.mikrocontroller.net/articles/Entprellung


MfG Dennis
#2933932
Lesenswert?

> den Schalter lege(Kontakt an INT1 verbinde)

Blöde Idee. Schalter und Taster prellen, d.h. man muss sie in Software 
entprellen. Der externe Interrupt ist dafür nicht geeignet: Er wird beim 
Prellen sehr oft hintereinander aufgerufen.

>  [...] die ISR wird ohne das ich was mache ständig aktiviert

Schaltplan? Die Kristallkugel sagt: Offener Eingang fängt sich 
"Elektrosmog" ein und toggelt daher dauernd.

> steigenden/fallenden Flanken
1
Steigende Flanke: __/--
2
                     
3

4
Fallende Flanke:  --\__
Gast #2934037
Lesenswert?

(Schreibe von nem anderen PC aus)

Ich möchte das nur zu Lernzwecken mit externen Interrupts machen.Deshalb 
fände ich es gut,wenn man doch auf meine Fragen eingeht.

Kannst du mir das genauer mit Elektronensmog erklären?^^
Und wieso taucht das gerade nur bei den Externen Interrupts auf?

Ich hab einfach nur ein freies Kabel direkt vor dem INT1 Pin und ein 
anderes auf GND.. und "schalte" die LED auf nem anderen PIN in dem ich 
beide Kabel einfach berühre..
#2934042
Lesenswert?

> Kannst du mir das genauer mit Elektronensmog erklären?^^
> Und wieso taucht das gerade nur bei den Externen Interrupts auf?

Kurz:
Der Port darf nie offen sein. Also mach einen Pullup oder Pulldown 
Widerstand hin. Und das tritt bei ALLEN offenen Eingängen auf. AVRs 
haben eingebaute PullUp Widerstände. Die kann man auch nehmen.
OP #2934052
Lesenswert?

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


int main(void)
{
sei();
DDRB |= (1<<DDB2);  // hier liegt die LED
PORTB |= (1<<PB2);
DDRD &= ~(1<<DDD3);  //hier liegt das Kabel
GIMSK |= (1<<INT1);
MCUCR |= (1<<ISC10);


    while(1)
    {

    }
}

ISR(INT1_vect)
{
  PORTB ^= (1<<PINB2);
}

___________________________________________________________
Atmega 8:
PB2-----LED----GND
PD3-----O      O--------GND
Also das sind die zwei Kabel.. das "o" stellt die Enden der Kabel dar.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren