mikrocontroller.net

Forum: Projekte & Code Erweiterung externer Interrupt


Autor: Thomas Strauß (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Problem: beim z.B. bei der guten alten MCS-48-Familie (wird noch
verkauft hie und da per Versand)gibt es nur einen externen Inter-
rupt und einen dazugehörigen Interrupt-Pin; wie kann ich trotzdem
bei Auslösung dieses Interrupts mehr als eine Routine anspringen?

Beim 80C35 z.B. wird der externe Interrupt ausgelöst und der 
Befehlszähler macht einen Sprung zur Programmspeicher-Adresse 3;
um von dort zu verschiedenen Routinen springen zu können, müssen
noch Zusatzinformationen vorliegen und ausgewertet werden; dies
kann ich mit zwei oder mehreren 2-fach - Tastern bewerkstelligen,
die einerseits jeder für sich den INT-Pin so schalten, daß der
Interrupt ausgelöst wird und gleichzeitig einen Port-Pin an Masse
ziehen, jede Taste einen anderen natürlich.

In der Interrupt-Routine wird der Port abgefragt, festgestellt, welcher 
Pin zusätzlich an Masse gezogen ist (vielleicht noch eine Pause davor, 
falls der zweite mechanische Kontakt verzögert durchschaltet)und in die 
entsprechende Routine verzweigt. Wenn mehr als eine Taste gedrückt wird, 
kann man auch die Kombinationen auswerten!

Ich habe es mit einem MCS-48-Baustein ausprobiert, den ich von einer 
alten Festplatte abezogen hatte - und es funktioniert. Das
Schema sollte auch bei anderen Controllern funktionieren.
Der Standard 8051-Baustein hat ja auch nur zwei externe Interrupts
und zwei dazugehörige Pins (EX0 und EX1), was nicht immer ausreicht.

Nachteil: man braucht Taster, die zwei mal zwei Kontakte unabhängig 
voneinander überbrücken.

Hat man diese, werden zwei Kontaktreihen hergestellt und eine mit
einem Interrupt-Pin (besser mit einem gemeinsamen Schutzwiderstand 
davor)und die andere mit Masse verbunden. Eine dritte Kontaktreihe wird 
hergestellt und direkt mit Masse verbunden; die übrigen Kontakte werden 
mit Schutzwiderständen (4k7)an die jeweiligen Portpins angeschlossen.

Die Kontaktreihen verbinden gleiche Kontakte der 2-fach Taster (diese 
haben 4 unabhängige Kontakte).

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

Bewertung
0 lesenswert
nicht lesenswert
Wie währe es denn mit Dioden? Damit kann man ganz normale (1 polige) 
Taster verwenden...

Autor: Thomas Strauß (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe Deine Antwort zur Kenntnis genommen Herr Retro bzw. Herr mit 
dem Pseudonym Retro und habe darüber nachgedacht.

Leider kann ich Deinen Schaltungsvorschlag nicht mit meiner Schaltung 
vereinbaren. Ich habe selber keinen Schaltplan angegeben, was ich jetzt 
nachholen werde - nebst Angabe des Assembler-Source-Codes zum 
Demonstrieren.

Die Aufgabe ist die, daß der Pin INT (Low-aktiv) an Masse gezogen
werden muß, um einen externen Interrupt auslösen zu können und jeder 
Taster mit einem Kontakt an Masse liegt, mit dem anderen Kontakt am 
INT-Pin, so daß jede Taste den INT-Pin an Masse ziehen
kann; wenn ich deinen Vorschlag realisiere, müsste von dem INT-Pin
bzw. den Kontakten der Taster, die damit verbunden sind, jeweils
eine Diode zu jeweils einem Portpin gehen, und damit wird bei Betätigung 
einer beliebigen Taste jeder Portpin gleichbehandelt,
d.h. an Masse gezogen. Es ist schwer, solche Sachverhalte zu er-
läutern ohne Schaltplan, man selber versteht es natürlich...

Vielleicht ist mein Schaltplan (mit ASCII-Zeichen im Textmodus
erstellt), aufschlußreicher.

Die Schaltung ist gedacht als Alternative zum Abfragen der Tasten
einer Tastatur in zeitlicher Reihenfolge, wie das der Tastaturpro-
zessor der PC-Tastatur z.B. macht.

Der Vorteil ist die sofortige Reaktion auf ein Key-press. Es gibt
sicher auch andere Möglichkeiten, eine Tastatur abzufragen, aber u. 
Umständen muß das jederzeit möglich sein. Dann ist eine 
Interrupt-Auslösung keine schlechte Wahl.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

was verstehst Du unter denn unter "sofortige Reaktion auf ein Key-press" 
?

Üblicher Weise braucht ein Mensch um auf irgendwas zu reagieren mehr als 
300ms. Da ist es doch völlig uninteressant, ob dann noch 10µs oder 10ms 
hinzukommen.


Meistens ist es auch wichtig, ob eine Taste einmal oder mehrmals 
betätigt wird. Um das zu erkennen ist ein Entprellen der Tasten 
notwendig und dazu nimmt man dann einen Timerinterrupt z.B. alle 10ms.

Die meisten Leute sagen sich dann aber, wenn ich sowieso einen 
Timerinterrupt brauche, dann kann der doch auch gleich die Tasten 
abfragen.

Meistens ist sowieso schon ein Timerinterrupt am laufen, z.B. um die 
interne Uhr weiter zu zählen oder eine LED-Anzeige zu multiplexen. Dann 
noch ein paar mehr Befehle mit reinzupacken ist kein Problem.

Und der Interrupt ist dann frei für wirklich eilige Sachen, z.B. für die 
Motorsteuerung oder den Airbag in einem KFZ.


Peter

Autor: Dieter Seifert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hatte mir mal eine Schaltung ausgedacht um mit 1 Interrupt und 3 
Port-Pins 8 einpolige Taster abfragen zu können. Dafür habe ich einen 
74HC148(8 zu 3 Encoder)und einen 74HC123 als Verzögerung zur Entprellung 
benutzt.die 3 Ausgänge A0-A3 vom HC148 auf 3 Port-Pins und den Ausgang 
EO vom HC148 über den Monoflop HC123 auf den Interrupt-Pin.Sollte 
eigentlich für alle Microcontroller funktionieren.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dieter,

also mein Mikrokontroller ist ein richtiges Arbeitstier.
Der würde es mir höllisch übelnehmen, wenn ich ihm die Arbeit wegnehme, 
die er problemlos selber ausführen kann, indem ich noch nen Haufen 
anderer ICs einsetze.

Er ist eben ein Einzelkämpfer und duldet nur ICs neben sich, die das 
machen was er nicht kann z.B. MP3 dekodieren oder D-A wandeln.


Er unterhält sich aber gerne mit seinesgleichen, wenn die etwas weiter 
weg sind. In einem Gerät habe ich z.B. 13 Module, wo auf jedem ein 
Kontroller sitzt und die dann über den CAN-Bus prima zusammenarbeiten.

Hoffentlich verzeiht Ihr mir die Abschweifung in die Psychologie eines 
Mikrokontrollers :-)

Ich bin eben so ein Typ, wenn auch nur ein Widerstand durch 10 Zeile 
Kode ersetzt werden kann, dann fällt der raus, gnadenlos.

Peter

Autor: Retro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte meine Schaltung zu entschuldigen, Dioden sind um 180° gedreht... 
Fakt ist das diese Schaltung gute Arbeit an meinem ATMEGA103 tut, nur 
mit dem Unterschied dass die Taster dort Optokoppler sind und das 
Programm in C geschrieben wurde.

Und wieso erst das "Deine" aber dannach "Herr", im weiteren denke ich 
dass Pseudonyme im Internet kein Problem darstellen. Einmal den 
Mauszeiger auf meinem Namen positioniert und man kann meinen richtigen 
Namen schon sehr gut erahnen...

Autor: Thomas Strauß (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, Dieter

Dein Vorschlag mit den externen IC's aus der Standard-Logik-Serie
könnte für meinen Schaltungsvorschlag interessant sein. Einpolige
Taster würden reichen und mit drei Pins kann man ja bekanntlich
2 hoch 3 = 8 Zahlen abfragen (acht Taster über den 8 zu 3 - Encoder); 
die Chips sind preiswert und "überall" erhältlich.

Klar, wenn man den Mikrocontroller und keine Chips oder nur zwei
bis drei zusätzliche Chips daneben duldet, ist dein Vorschlag na-
türlich nicht so gut. Letzlich ist das Geschmackssache.

Autor: lol (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ihr seit spacken ^^

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.