Externe Interrupts Tiny2313 mach nicht was er soll in C

Gast #3372452
Lesenswert?

Hi zusammen,

ich hatte mir ein Komplexeres Programm geschrieben für eine kleine 
Garagenalarmanlage. Leider funktionierte es überhaupt nicht. Nach testen 
stellte ich fest das der Externe Interrupt überhaupt nicht macht was er 
soll.
Habe den Tiny2313 auf 128K internen Timer laufen, damit er schön wenig 
Strom verbraucht und noch einen Sleeper aktuell programmiert.

So:
Ich habe den externen Interrupt über das GIMSK Register freigeschaltet 
und auch die Interrupts über den sei() Befehl. Dazu habe ich noch PORTD2 
gesetzt (ist der für den ext. Int0), damit dieser Intern High anlegt, da 
ich diesen über Masse setzen möchte (Deswegen ist auch in MCUCR nichts 
gesetzt, da ISC00 und ISC01 dafür 0 sein müssen). Der externe Interrupt 
kann also kommen.

Wenn ich das Gertät Einschalte und habe PD2 auf Masse leuchten alle LEDS 
PB0-2. Ziehe ich PD2 von Masse ab und lege es wieder drauf passiert 
nichts, egal ob ich es wiederhole. Schlussfolgerung. Er geht jetzt 
ständig in den Interrupt rein. Egal ob Masse am Interrupt Eingang oder 
nicht.

Wenn ich das Gerät nun Einschalte und lege am PD2 direkt an High, geht 
das Gerät auch nicht in den Interrupt und nur PB1 leuchtet, danach geht 
er in Sleep Mode (glaube ich).
Entferne ich jetzt die Brücke von High sollte eigentlich ncihts 
passieren, da er ja intern auf High geschaltet sein sollte. Jetzt 
leuchten allerdings auch noch PB0 und PB2 in High. Er macht also wieder 
ständig Interrupts (glaube ich). Ziehe ich jetzt  PD2 von High ab und 
stecke es wieder drauf, leuchtet PB0 oder PB2 (so wie es sein soll). 
Dummerweise ist das Problem das er ja auch Masse reagieren soll und 
nicht auf High.

Weiß jemand warum er auf High statt auf Masse reagiert? Auch wenn ich 
andere Kombinationen im MCUCR einstelle folgt kein Unterschied. 
Ebenfalls macht mich stutzig das manchmal alle leuchten. Heißt das ich 
habe keinen definierten Eingang an PD2 sobald ich High abziehe. Würde 
daraus schlussfolgern das Portd nicht richtig konfiguriert ist.


Danke für Hinweise/Hilfen.

VG

Tino
Angehängte Dateien:
Gast #3372468
Lesenswert?

Hi

>(Deswegen ist auch in MCUCR nichts
>gesetzt, da ISC00 und ISC01 dafür 0 sein müssen). Der externe Interrupt
>kann also kommen.

Dir ist aber bewusst, das dann Interrupts ausgelöst werden, solange der 
PIN auf Masse liegt.

MfG Spess

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