Forum: Mikrocontroller und Digitale Elektronik Interrupt mit ATTiny15


von Anne (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche mich zum ersten Mal an Interrupts.

Habe mit dem Datenblatt gearbeitet, komme aber nun nicht weiter.

Der Interrupt soll bei einer steigenden Flanke an PB2 ausgelöst werden.

Was habe ich vergessen!?

Grüße Anne

von Johannes M. (johnny-m)


Lesenswert?

> Was habe ich vergessen!?
V.a. das reti am Ende des Interrupt Handlers. Abgesehen davon ist
1
ldi temp, 0b10000000
2
out SREG, temp
unsinnig, da es das gleiche macht wie "sei" zwei Zeilen weiter. Und 
warum setzt Du das PUD-Bit? Was hängt denn an dem Pin überhaupt dran?

von Anne (Gast)


Lesenswert?

Hallo,
es soll ein Taster an den PIN.

Ich kann nicht mit reti arbeiten, weil der Attiny15 in dem Sinne keinen 
Stack hat.

Grüße Anne

von Anne (Gast)


Angehängte Dateien:

Lesenswert?

Habe es jetzt mal geändert...so geht es nun auch, nur das er bevor er in 
die Endlosschleife geht, das Interupt schon einmal ausführt und PB0 
setzt, obwohl der Taster nocht nicht betätigt wurde.

Grüße Anne

von Johannes M. (johnny-m)


Lesenswert?

Der Tiny15 hat einen Hardware-Stack. Das macht aber keinen Unterschied. 
Ein Interrupt Handler muss trotzdem mit reti abgeschlossen werden. Das 
ist allerdings vermutlich nicht das Problem.

Wie soll der Taster denn angeschlossen werden? Und Du schreibst, es 
soll ein Taster an den Pin. Was ist denn jetzt dran? Taster an 
externen Interrupts machen eigentlich wenig Sinn, weil sie zu stark 
prellen. Das dürfte allerdings zumindest in diesem Falle nicht zu einem 
Nichtfunktionieren führen.

von Johannes M. (johnny-m)


Lesenswert?

Aha, war ich zu langsam.

Aber trotzdem: Wie ist der Taster denn angeschlossen? Vom µC-Pin gegen 
Masse oder andersrum? Deshalb auch meine Frage oben, warum Du das PUD 
setzt. Wenn der Taster (wie es üblich ist) gegen Masse angeschlossen 
ist, macht es keinen Sinn, die Pull-Ups auszuschalten. Und alle 
Pull-Ups auszuschalten ist sowieso meist nicht sinnvoll. Es reicht 
normalerweise, den einzelnen Pull-Up des dazugehörigen Pins 
auszuschalten.

von Anne (Gast)


Lesenswert?

Momentan versuch ich es nur in der Software-Simulation...

Es wird ein Taster angeschlossen gegen +5V und das Interrupt soll bei 
der High-Flanke auslösen und dann einen Wert um 1 erhöhen.

von Anne (Gast)


Lesenswert?

Hm aber ich dachte ich nutze Interrupts, weil dort das Taster-Prellen 
nicht stört, ansonten könnte ich es auch gleich ohne machen...

von Johannes M. (johnny-m)


Lesenswert?

> Es wird ein Taster angeschlossen gegen +5V und das Interrupt soll bei
> der High-Flanke auslösen und dann einen Wert um 1 erhöhen.
Dann brauchst Du aber einen Pull-Down-Widerstand am Pin, um im 
nicht-gedrückten Zustand einen definierten Pegel zu haben. Und genau 
deshalb schließt man Taster i.d.R. gegen Masse an, damit man die im µC 
eingebauten Pull-Ups verwenden kann und keine externen Widerstände 
braucht.

>Hm aber ich dachte ich nutze Interrupts, weil dort das Taster-Prellen
>nicht stört, ansonten könnte ich es auch gleich ohne machen...
Gerade da stören sie. Interrupt-Bearbeitung ist viel zu schnell für 
mechanische Kontakte. Ohne zusätzliche Maßnahmen tritt der Interrupt 
mehrmals hintereinander auf. Es macht auch keinen Sinn, auf Tastendrücke 
innerhalb von Mikrosekunden zu reagieren. Das Prellen liegt oft schon im 
Millisekunden-Bereich. Taster fragt man i.d.R. zyklisch alle paar zig 
Millisekunden ab. Dadurch erübrigt sich einerseits die Prell-Problematik 
und andererseits ist das für einen menschlichen Betätiger immer noch 
"Echtzeit", also verzögerungsfrei.

von Anne (Gast)


Lesenswert?

Hm, ok habe es jetzt so abgeändert und in der Simulation geht es auch.

Aber wenn ich echt jetzt testen würde, würde meine Zahl dann durch das 
Taster-Prellen mehrfach erhöht werden...Also muss ich mir da jetzt 
nochmal Gedanken machen...

Danke Dir auf jeden Fall, Du hast mir sehr geholfen!

VG Anne

von Johannes M. (johnny-m)


Lesenswert?

Überleg einfach mal, wie lange der µC braucht, um Deinen Interrupt 
Handler abzuarbeiten. Das sind etwas weniger als 10 µs (geschätzt, ich 
hab jetzt keine Lust, das genau nachzurechnen). Nach dem Rücksprung ist 
er sofort wieder bereit für den nächsten Interrupt. Und durch das 
Prellen ist es sehr wahrscheinlich, dass der Interrupt sofort wieder 
ausgelöst wird. Die Prellvorgänge liegen meist im Bereich unter 1 ms. 
Wenn man den oder die Taster jetzt nur noch alle paar zig ms abfragt, 
ist das kein Problem mehr, weil man nur bei jeder Abfrage schauen muss, 
ob sich der Zustand des Tasters gegenüber der letzten Abfrage geändert 
hat. Und kein Mensch schafft es, einen Taster so zu drücken, dass der 
Kontakt weniger als einige 10 ms geschlossen ist...

von Anne (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe es nun so versucht, aber das Prellen des Tasters beeinflusst 
immer noch.

Weiteres Problem, der Reset Pin ist zwar als Ausgang definiert, aber die 
angeschlossene LED leuchtet nie.

VG Anne

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
Noch kein Account? Hier anmelden.