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!
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
> 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: --\__ |
(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..
> 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.
Dieter Glockenbach schrieb: > Gehen externe Interupts überhaupt mit z.b. INT1 als Output-PIN? Wieso denn jetzt Output-Pin? Der sollte natürlich Eingang sein. KA was du meinst. Ich rate dir, poste mal deinen kompletten(!) Code und den Schaltplan.
#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.
Sieht mal gut aus alles. Jetzt machst du noch:
1 | PORTD |= (1<<PD3); //Pullup Aktivieren |
Und testest nochmal. Jezt ist der Pullup aktiviert und der Port hat High-Pegel solange er offen ist. Wenn du ihn mit GND verbindet bekommt er Low-Pegel. gruß cyblord
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.