mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt mit ATTiny15


Autor: Anne (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was habe ich vergessen!?
V.a. das reti am Ende des Interrupt Handlers. Abgesehen davon ist
ldi temp, 0b10000000
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?

Autor: Anne (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Anne (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Anne (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Anne (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Anne (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Anne (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

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.