Hallo meine Freunde, bin Anfänger im bereich Mikrokontroller. Habe jetzt auch schon etwas im Forum gesucht, aber nix zu meiner Frage gefunden, oder ich verstehe es einfach nicht. Meine Frage: Ist ein externer Interrupt (mit Taster) beim ATMEGA 8 nur über INT0 und INT1 möglich ist. Oder kann ich auch über jeden anderen Port einen ext. INT ausführen? Für eure Antworten bedanke ich mich im Voraus. LG Mike
Prinzipiell beantwortet solche Fragen das Datenblatt des Prozessors. Ohne das kommst du nicht weit. Ausserdem ist die Auswetung eines Tasters über einen externen Int nicht die beste Möglichkeit. Und ja, beim Mega8 geht das nur über die INTx-Pins. Oliver
Mike B. schrieb: > Ist ein externer Interrupt (mit Taster) beim ATMEGA 8 nur über INT0 und > INT1 möglich ist. Möglich ja, aber nicht sinnvoll. Der Timerinterrupt ist fürs Tasten einlesen mit Abstand die beste Lösung. Peter
Hi Einen Taster auf einen Interrupt zu legen ist keine gute Idee. Das ist einem Profi klar, aber nicht einem Anfänger und deshalb möchte ich da etwas näher drauf eingehen. Schaltkontakte sind in der Regel so träge, das selbst ein ausgewachsenes Controllerprogramm diesen Eingang ohne Datenverlust pollen kann. Pollen heißt, am Anfang deiner Programmschleife holst du dir einmal die Eingänge und legst sie in eine Variable. Könntest du den Schalter so schnell schließen und wieder öffnen, bevor dieser Lesevorgang aufgerufen wird, ist ein Interrupt eerforderlich, aber das wist du nicht schaffen. Außerdem, und das ist noch viel lustiger, haben Kontakte es an sich zu prellen. Ein Signalwechsel beginnt mit ganz schnellen Impulsen, bevor die Signallage stabil ist. Hast du nun deinen Eingang über einen Interrupt abgefragt, so wird er ziemlich oft aufgerufen. Völlig unnütz, weil du ja gar nicht weißt, welches die erwünschte aktuelle Lage ist. Damit du ein wenig Einblick in das gesagte bekommst, betrachten wir mal einfach einen Controller mit 1MHz Taktfrequenz. Auch wenn der Flash bei einem Atmega8 8KB groß ist, so wird auch bei 100% Programmierung nur 20 - 30% der Anweisungen ausgeführt. Nehmen wir mal an, eine Anweisung braucht 2 Taktzyklen und es sind 2KB Befehle abzuarbeiten. Dann braucht das Programm 4000 Taktzyklen. Die Frequenz hat aber 1 000 000 Takte / Sekunde, d. h. du durchläufst dein Programm in der Sekunde 250 mal. Umgekehrt, ein Durchlauf dauert 4 mSek. Nur wenn dein Kontakt ein Signal unter mSek. erzeugt, ist ein Interrupt erforderlich, weil du nicht sicher stellen kannst, es zu erfassen. Wunder dich also nicht, wenn du immer wieder abweisende Antworten bei Tastern und Interrupt erhälst. Gruß oldmax
Vielen Dank für die ausführliche Erklärung, oldmax. Hatte mich schon gewundert, warum die anderen vom externen Interrupt abgeraten haben. Nun weiss ich es auch.
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.