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).
Wie währe es denn mit Dioden? Damit kann man ganz normale (1 polige) Taster verwenden...
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.
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
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.
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
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...
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.
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.