Forum: Mikrocontroller und Digitale Elektronik Interrupts bei Mikrocontrollern


von Neuling (Gast)


Lesenswert?

Ich bin noch recht neu und unerfahren, von daher vergebt mir bitte eine 
vielleicht etwas einfache Frage. Es geht um Interrupts bei einem 
Atmega88.

Dort gibt es die Interrupts INT0/INT1. Bei der Pinkonfiguration" gibt es 
auch zwei Pins mit den Namen INT0/INT1 (Pins 4 und 5). Dann gibt es aber 
noch die Interrups PCINT0/1/2 (PinChangeInterrupt). Hinter fast jedem 
Pin bei der Pinkonfiguration steht dahinter PCINTxxxx.

Ich verstehe dass jetzt so, dass die Interrupts INT0/1 dann ausgelöst 
werden, wenn eine Änderung an den Pins 4 und 5 erfolgt. So könnte man 
beispielsweise diese beiden Pins zum Zählen von Impulsen nutzen, ein 
Impuls kommt, ein Interrupt wird ausgelöst und es wird eine Zählvariable 
erhöht/erniedrigt.

Und die Interrupts PCINTxxx beziehen sich dann nicht auf ein einzelnes 
Beinchen an dem uC, sondern auf eine ganze Gruppe ("The pin change 
interrupt PCI0 will trigger if any enabled PCINT[7:0] pin toggles." ?

Das hier verstehe ich auch noch nicht so genau:
"The PCMSK2, PCMSK1 and PCMSK0 Registers
control which pins contribute to the pin change interrupts."

Ich würde es so übersetzen, dass ich über die Register PCMSKx einstellen 
kann, welche der Pins PCINTx auslösen können? Ich bin mir da nicht so 
sicher und ich würde mich sehr freuen, wenn mir jemand von Euch kurz 
helfen könnte, ob ich das so richtig kapiert hab.

Vielen Dank im Voraus.

von EGS_TI (Gast)


Lesenswert?

Ich glaube du hast es richtig verstanden.

von Neuling (Gast)


Lesenswert?

Kann man eigentlich sagen, wie eine Programmierung "besser" ist, also 
ist es eher besser, eher mit Interrupts zu programmieren oder lieber 
anders halt, in dem ich z.B. ständig den Zustand von Ports durch eine 
Schleife abfrage.

von Al3ko -. (al3ko)


Lesenswert?

Neuling schrieb:
> Kann man eigentlich sagen, wie eine Programmierung "besser" ist, also
> ist es eher besser, eher mit Interrupts zu programmieren oder lieber
> anders halt, in dem ich z.B. ständig den Zustand von Ports durch eine
> Schleife abfrage.

Ich würde sagen:
Kommt auf die Anwendung drauf an. Ich habe mich letztlich mit Interrupts 
und einem Taster beschäftigt. Hier teilte man mir freundlicherweise mit, 
dass man Taster und Interrupts eine ungeeignete Kombination seien. Hier 
würde ich gerne noch ein "wieso" hören, das vergaß ich nämlich in meinem 
Thread zu fragen.

Hast du den Interrupt Artikel schon gelesen? Dort wird gesagt, bei 
welchen Anwendungen bzw. Szenarien eine Interruptprogrammierung sinnvoll 
ist.

Gruß

von rggre (Gast)


Lesenswert?

Alex A. schrieb:
> Hier teilte man mir freundlicherweise mit,
> dass man Taster und Interrupts eine ungeeignete Kombination seien. Hier
> würde ich gerne noch ein "wieso" hören, das vergaß ich nämlich in meinem
> Thread zu fragen.
Taster prellen --> mehrere Interrupts hintereinander. Lieber einen Timer 
und in der ISR entprellen.

von Lutz (Gast)


Lesenswert?

Alex A. schrieb:
> Hier
> würde ich gerne noch ein "wieso" hören, das vergaß ich nämlich in meinem
> Thread zu fragen.

Ich würde sagen, daß es daran liegt, daß ein Taster kein ideales 
digitales Signal erzeugt. Er prellt üblicherweise und muß daher 
üblicherweise aufwändig mit Software entprellt werden.

von Al3ko -. (al3ko)


Lesenswert?

rggre schrieb:
> Alex A. schrieb:
>> Hier teilte man mir freundlicherweise mit,
>> dass man Taster und Interrupts eine ungeeignete Kombination seien. Hier
>> würde ich gerne noch ein "wieso" hören, das vergaß ich nämlich in meinem
>> Thread zu fragen.
> Taster prellen --> mehrere Interrupts hintereinander. Lieber einen Timer
> und in der ISR entprellen.

Ergibt Sinn. Danke

von Neuling (Gast)


Lesenswert?

Lutz schrieb:
> Ich würde sagen, daß es daran liegt, daß ein Taster kein ideales
> digitales Signal erzeugt. Er prellt üblicherweise und muß daher
> üblicherweise aufwändig mit Software entprellt werden.

Aber ich kann doch - wie ich es gelesen habe - parallel zu dem Taster 
einen Kondensator schalten, der sich auflädt und so die Taste entprellt, 
wo liegt denn da dann das Problem?

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Neuling schrieb:
> Ich verstehe dass jetzt so, dass die Interrupts INT0/1 dann ausgelöst
> werden, wenn eine Änderung an den Pins 4 und 5 erfolgt. So könnte man
> beispielsweise diese beiden Pins zum Zählen von Impulsen nutzen, ein
> Impuls kommt, ein Interrupt wird ausgelöst und es wird eine Zählvariable
> erhöht/erniedrigt.

Dazu wären die Pins T0 und T1 besser geeignet. Dann sparst du dir den 
Interrupt bei jedem Takt, denn der Mikrocontroller zählt die Impulse für 
dich.

von loller (Gast)


Lesenswert?

Alex A. schrieb:
> Hier teilte man mir freundlicherweise mit,
> dass man Taster und Interrupts eine ungeeignete Kombination seien. Hier
> würde ich gerne noch ein "wieso" hören, das vergaß ich nämlich in meinem
> Thread zu fragen.

Interrupts sind nunmal dazu da hardwarenahe Dinge abzuarbeiten.
Du als Mensch bist vielleicht in der Lage einen Taster alle 10ms zu 
drücken, Währenddessen dreht Dein µC bei 1MHz Taktfrequenz wieviele 
Däumchen ?
Dann kommt noch das Prellen dazu weil während Du den Kontakt drückst es 
dazu kommt das die Kontaktflächen unregelmäßigen Kontakt haben bis 
wirklich beide Metallteile fest aufeinander liegen.
Das alles wird allerdings schön hier erklärt
http://www.mikrocontroller.net/articles/Entprellung#Warteschleifen-Verfahren

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Neuling schrieb:
> Aber ich kann doch - wie ich es gelesen habe - parallel zu dem Taster
> einen Kondensator schalten, der sich auflädt und so die Taste entprellt,
> wo liegt denn da dann das Problem?

Zum Entprellen nehme ich auch immer einen 100-nF-Kondensator, den ich 
parallel zum Taster hänge. Klar geht das auch per Software, aber so ist 
es bequemer. :-)

von Wilhelm F. (Gast)


Lesenswert?

@Neuling:

Die Interrupts sind ein guter Kompromiß von µC, um für manche Dinge 
annähernde Echtzeitverarbeitung zu erreichen.

Echtzeit haben µC real allerdings selten wirklich, weil ein Programm, 
auch der Interrupt, sequentiell abgearbeitet wird. Meistens reicht es 
aber, je nach Definition.

von Neuling (Gast)


Lesenswert?

Hey Leuts,

ich danke Euch sehr für Eure Antworten, ihr habt mir schon mal viel 
weitergeholfen.

von Walter (Gast)


Lesenswert?

Markus W. schrieb:
> Zum Entprellen nehme ich auch immer einen 100-nF-Kondensator, den ich
> parallel zum Taster hänge. Klar geht das auch per Software, aber so ist
> es bequemer. :-)

natürlich kann man auch per Hardware entprellen, aber das ist keine gute 
Idee: jedes Mal wenn Du den Taster drückst schließt du den Kondensator 
kurz!

von Wilhelm F. (Gast)


Lesenswert?

Walter schrieb:

> jedes Mal wenn Du den Taster drückst schließt du den Kondensator
> kurz!

Auf Demo-Boards sah ich sowas oft. Es kann eine Weile gut gehen.

Der µC sollte aber irgendwann High oder Low erkennen, auch wenn er nicht 
unbedingt einen Schmitt-Trigger-Input hat.

von oldmax (Gast)


Lesenswert?

Hi
Taster und Interrupt, eine ewige Glaubensfrage....
Nur mal so zum Nachdenken:
Polling: ein Programm läuft in einer Schleife, fragt zuerst die Eingänge 
ab, verarbeitet diese und gibt Informationen aus. Typisches EVA-Prinzip.
Dabei ist eines wichtig: sind die Eingangssignale SICHER von der 
Programmlaufzeit zu erfassen? Stichwort : Zykluszeit.
Taster sind im allgemeinen nicht im mSek. Bereich zu betätigen. Wenn 
also ein Programmzyklus 10 mSek dauert, wird es wohl kaum jemand 
schaffen, einen Taster zu betätigen, ohne das der Signalpegel erfasst 
wird. Taster im Interrupt abzufragen wäre demnach unsinnig und bringt 
nur Probleme.
Anders ist es mit schnellen oder kurzen Impulsen. Montiert am Fahrrad 
einen Magneten und einen Reedkontakt. Nun ist klar, der Magnet wischt 
nur kurz über den Reedkontakt und obwohl das Rad relativ lange braucht, 
eine Umdrehung durchzuführen, ist der Schaltimpuls doch sehr kurz. Da 
ist durchaus möglich, das hier das Einlesen mit Polling Fehler 
verursachen kann, da der Impuls kommt, wenn das Programm an ganz anderer 
Stelle ist. Hier wird der Interrupt Pflicht.
Also, grundsätzlich: Wird das Signal im Programmzyklus mindestens einmal 
abgetastet, dannn Finger weg von Interrupt.
Das ist übrigends auch einer der Gründe, warum Programmschleifen zur 
Verzögerung ziemlich unsinnig sind.
Gruß oldmax

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.