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.
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.
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ß
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.
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.
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
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?
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.
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
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. :-)
@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.
Hey Leuts, ich danke Euch sehr für Eure Antworten, ihr habt mir schon mal viel weitergeholfen.
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!
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.