Forum: Mikrocontroller und Digitale Elektronik Taster, pins sparen


von timo91 (Gast)


Lesenswert?

hallo,

Ich habe gerade ein wenig überlegt wie ich mehrere Tasten über einen µC 
einlesen könnte und mir ist die idee gekommen.

Alle Tasten sind auf einen Externen-Interrupt gelegt (natürlich 
voneinander gekoppelt) und zusätzlich jeweils auf einen Eingang an einem 
Schieberegister (o.Ä.).

Bei einem Tastendruck wird ein Interrupt aufgerufen der das 
Schieberegister ausliest und ermittelt welche Taste bzw. Tasten betätigt 
wurde/n.

Damit könnte man sich viele Pins sparen.

Möglich?

von demacus (Gast)


Lesenswert?

Ja, das ist problemlos möglich.

MfG

von Karl H. (kbuchegg)


Lesenswert?

Natürlich geht das.
Aber warum denkst du, du bräuchtest einen Interrupt dafür?

Sieh alle 10 Millisekunden am Schieberegister nach, ob ein Pin seinen 
Wert geändert hat und du wirst auch keinen Tastendruck verpassen. Aus 
Sicht eines µC bewegst du dich in extremer Zeitlupe, wenn du einen 
Taster drückst. An dieser Stelle schaden Interrupts mehr als sie nützen 
(Ausnahme: Taster muss den µC aus dem Tiefschlaf holen)

von timo91 (Gast)


Lesenswert?

Joar das Problem ist nur das der µC in der main-schleife schon ziemlich 
beschäftigt ist.
Müsste mal ausmessen ob die zeit reicht.

Danke für die schnellen und vor allem hilfreichen Antworten.

von Karl H. (kbuchegg)


Lesenswert?

timo91 schrieb:
> Joar das Problem ist nur das der µC in der main-schleife schon ziemlich
> beschäftigt ist.
> Müsste mal ausmessen ob die zeit reicht.

Das Sichwort heißt: Timer
Und in der ISR macht man dann auch gleich noch die Entprellung mit rein.

von Achim M. (minifloat)


Lesenswert?

timo91 schrieb:
> Müsste mal ausmessen ob die zeit reicht.

Lass halt am Ende der der Mainloop einen freien Pin toggeln. Dann 
einfach da die Frequenz messen und mit 2 Multiplizieren(wegen toggeln).
Das ist dann auch ungefähr die Frequenz, mit der auch die Knöppe 
abgefragt werden würden.
mfg mf

von timo91 (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> timo91 schrieb:
>> Joar das Problem ist nur das der µC in der main-schleife schon ziemlich
>> beschäftigt ist.
>> Müsste mal ausmessen ob die zeit reicht.
>
> Das Sichwort heißt: Timer
> Und in der ISR macht man dann auch gleich noch die Entprellung mit rein.

Das würde unnötig Timer und Leistung verbraten. Ob jetzt hin und wieder 
ein externer interrupt ausgelöst wird oder immer nach einer bestimmten 
zeit.

Mini Float schrieb:
> timo91 schrieb:
>> Müsste mal ausmessen ob die zeit reicht.
>
> Lass halt am Ende der der Mainloop einen freien Pin toggeln. Dann
> einfach da die Frequenz messen und mit 2 Multiplizieren(wegen toggeln).
> Das ist dann auch ungefähr die Frequenz, mit der auch die Knöppe
> abgefragt werden würden.
> mfg mf

Jop danke :)
Hätte aber auch die Möglichkeit im Geschäft am Oszi.

-- Son Oszi zuhause zu haben wär schon was feines :D

von Peter D. (peda)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

timo91 schrieb:

> Das würde unnötig Timer und Leistung verbraten.
Quatsch.

Wenn du die 0.1% Rechenleistung nicht mehr hast, dann machst du etwas 
grundlegend falsch.

> Ob jetzt hin und wieder
> ein externer interrupt ausgelöst wird oder immer nach einer bestimmten
> zeit.

Der Problemkreis lautet: Entprellung!
Dort liegt dein Problem, warum externe Interrupts bei Tastern keine gute 
Idee sind.

Aber bitte - machs wie du willst. Das Forum ist voll mit Beiträgen von 
Leuten die sich mit Tastern am externen Interrupt herumgeärgert haben 
und dann doch irgendwann eingesehen haben, dass die anderen Poster doch 
nicht so dämlich sind und schon wissen, was sie einem nahelegen.

von bitte löschen (Gast)


Lesenswert?

Ich möchte mich als µC-Anfänger nicht zu sehr aufplustern, aber da wo 
ich herkomme (PC-Programmierung) ist der Weg Tastendruck -> Interrupt 
eigentlich der sauberste und normalerweise verwendete.
Das ermöglicht z.B. auch, den µC in einen clocklosen Sleep-Modus zu 
versetzen, was richtig Strom spart.
Man kann die Taster gegen GND legen und ein Widerstandsnetzwerk als 
Pullup-Widerstände verwenden. Dann kann die Leitungen an den Tastern mit 
einem Dioden-NAND (gemeinsame Anoden) zum INTx-Eingang (mit Pullup) 
zusammenführen.
Das ganze lässt sich auch mit einem Ausgangs-Schieberegister (4015) 
kombinieren, um eine Matrix-Tastatur zu realisieren.
Ich habe das mal gemacht und so eine alte Grundig TP650 TV-Fernbedienung 
(mit viel Platz innen) in ein Musikinstrument für meine (2-jährige) 
Tochter verwandelt.

von Karl H. (kbuchegg)


Lesenswert?

Philipp Klostermann schrieb:
> Ich möchte mich als µC-Anfänger nicht zu sehr aufplustern, aber da wo
> ich herkomme (PC-Programmierung) ist der Weg Tastendruck -> Interrupt
> eigentlich der sauberste und normalerweise verwendete.

Wir sind aber nicht am PC.
Deine Tastendrucke sind schon im Keyboard aufbereitet worden.

Hier am µC haben wir es mit rohen Tastern zu tun.

Und ehe du weiterredest, such dir bitte mit der Forensuche einen der 
Tasterthreads raus (es gibt sicherlich tausende davon) und/oder lies 
diesen Artikel
Entprellung

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Philipp Klostermann schrieb:
> Ich möchte mich als µC-Anfänger nicht zu sehr aufplustern, aber da wo
> ich herkomme (PC-Programmierung) ist der Weg Tastendruck -> Interrupt
> eigentlich der sauberste und normalerweise verwendete.

Und wie entprellst Du die 1-12 Interrupts, die Du bekommst, wenn die 
Taste einmal(!) gedrückt wird?

Ich hol schon mal Popcorn...

von Stupido (Gast)


Lesenswert?

Philipp Klostermann schrieb:
> Man kann die Taster gegen GND legen und ein Widerstandsnetzwerk als
> Pullup-Widerstände verwenden. Dann kann die Leitungen an den Tastern mit
> einem Dioden-NAND (gemeinsame Anoden) zum INTx-Eingang (mit Pullup)
> zusammenführen.

Bauteilfriedhof nennt man sowas.

von bitte löschen (Gast)


Angehängte Dateien:

Lesenswert?

Es ist nicht so, dass ich mich mit dem Thema Tastenentprellung nicht 
schon beschäftigt habe. Den besagten Artikel habe ich schon gelesen, und 
mich zum Thema auch schon im Forum (z.B. in den Tasterfreds) geäußert.

Karl Heinz Buchegger schrieb:
> Deine Tastendrucke sind schon im Keyboard aufbereitet worden.

Ja, von einem Baustein, der mit der Aufgabe ähnlich unterfordert ist, 
wie ein µC. Eigentlich ist ein µC ziemlich geeignet. diesen Baustein zu 
ersetzen.

Frank M. schrieb:
> Und wie entprellst Du die 1-12 Interrupts, die Du bekommst, wenn die
> Taste einmal(!) gedrückt wird?

Die werden verschluckt, weil ich erst mal auf "sei" verzichte, bis ich 
INTx in EIMSK/GICR gelöscht habe, hauptsächlich um mich nicht selbst mit 
Interrupts voll zu hauen wenn ich Spannungen auf die einzelnen Spalten 
lege, um die Zeilen einzulesen, aber mit positiver Nebenwirkung auch zum 
Entprellen. Bis der Auslesevorgang, bei dem 64 Bits durch 
Schieberegister geschoben werden, zu Ende ist, und der Interrupt wieder 
aktiviert wird, ist das mit dem Prellen auch vorbei.
Anbei eine Aufnahme von einem Tastenprellen in einem Spice-tauglichen 
Format. Damit habe ich meinen Entprellkram gelöst.

Stupido schrieb:
> Bauteilfriedhof nennt man sowas.

Na ja, 8 Dioden und ein RN passen noch in ein einzelnes Grab. ;-)

von Peter D. (peda)


Lesenswert?

Philipp Klostermann schrieb:
> Ja, von einem Baustein, der mit der Aufgabe ähnlich unterfordert ist,
> wie ein µC.

Ich weiß nicht, wie es jetzt ist, aber vor USB waren in den 
PC-Tastaturen durchweg 8048 bzw. 8051 verbaut.


Philipp Klostermann schrieb:
> Eigentlich ist ein µC ziemlich geeignet. diesen Baustein zu
> ersetzen.

Warum sollte man einen µC durch einen µC ersetzen?


Peter

von MaWin (Gast)


Lesenswert?

> Damit könnte man sich viele Pins sparen

Aber braucht eine externen Chip.

Wie ungeschickt.

Man kann z.B. Taster Widerstände überbrücken lassen und liest einen 
Analogwert an einem A/D-Wandler ein den heute fast jeder uC hat, da geht 
ein Pin zumindest für 16 Taster, oft auch für mehr.

Man kann auch mit einem Taster irgendwelche der meist sowieso 
vorhandenen uC-Ausgänge auf einen Eingang koppeln, dann kann man durch 
schnelles durchspielen der Ausgänge erkennen, welcher Taster gedrückt 
wurde.

Oder man nimmt nicht ständig den winzigsten uC den man bekommen kann 
(ATtiny) und rüstet mit externen Chips bis zum Erbrechen auf, sondern 
man greift einfach mal zu einem handlichen 40 oder 100 poligen uC, der 
Geiz muß ja auch mal ein Ende haben.

Es gibt viele Lösungen, ein externes Schieberegister ist sicher nicht 
die eleganteste.

von bitte löschen (Gast)


Angehängte Dateien:

Lesenswert?

Peter Dannegger schrieb:
> Ich weiß nicht, wie es jetzt ist, aber vor USB waren in den
> PC-Tastaturen durchweg 8048 bzw. 8051 verbaut.

Es ist eigentlich relativ egal, wie der Baustein heißt, in jedem Fall 
verbringt er seine meiste Zeit mit Warten und ist mit seiner Aufgabe 
jeweils schnell fertig, und somit genauso unterfordert, wie ein anderer 
µC es wäre.

Peter Dannegger schrieb:
> Warum sollte man einen µC durch einen µC ersetzen?

Das war doch nur hypothetisch.

MaWin schrieb:
> Aber braucht eine externen Chip.
>
> Wie ungeschickt.

Da hast Du sicherlich Recht, aber es gibt einzelne Fälle, bei denen 
diese Lösung einfach sinnvoller ist. Nicht jeder kann BGA löten (oder 
traut sich da ran) und für Hobbyisten ist der nächstgrößere µC (z.B. 
ATmega8 TQFP -> ATmega16 TQFP) manchmal so viel größer, dass er sich auf 
ein kleines Layout nicht mehr platzieren lässt. Ich hatte in der o.g. 
"Orgel" z.B. besser einen ATmega8 durch 4014 und 4015 ergänzen können, 
als ihn durch einen ATmega16 zu ersetzen. Die Platine wäre mit einem 
TQFP-44 zu breit geworden, und hätte in der Breite nicht mehr zwischen 
die Stützwände in der Fernbedienung gepasst. Da dränge es sich auf, in 
die Länge zu gehen und dort platzsparend kleine SO-16 ICs 
unterzubringen.(Siehe Pdf.)

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Philipp Klostermann schrieb:
> Da hast Du sicherlich Recht, aber es gibt einzelne Fälle, bei denen
> diese Lösung einfach sinnvoller ist. Nicht jeder kann BGA löten (oder
> traut sich da ran) und für Hobbyisten ist der nächstgrößere µC (z.B.
> ATmega8 TQFP -> ATmega16 TQFP) manchmal so viel größer, dass [...]

Ich verstehe nicht, warum man plötzlich den Prozessor wechseln muss, 
wenn man eines der von MaWin skizzierten Konzepte für eine "Tastatur" am 
µC verwendet. Der SW-Aufwand ist derart minimal und übersteigt deshalb 
bzgl. des Speicherplatz-Bedarfes bestimmt nicht Deine nötigen 
Schieberegister-Routinen in dem Maße, dass man direkt auf den 
"nächtgrößeren µC" wechseln müsste.

P.S.
Deine Geschichte, wie Du die zuviel erzeugten Interrupts "verschlucken" 
willst, um die Taster zu entprellen, halte ich für abenteuerlich. Ich 
gehe daher nicht näher auf so einen Schwachsinn ein.

von bitte löschen (Gast)


Lesenswert?

Frank M. schrieb:
> Ich verstehe nicht, warum man plötzlich den Prozessor wechseln muss,
> wenn man eines der von MaWin skizzierten Konzepte für eine "Tastatur" am
> µC verwendet. Der SW-Aufwand ist derart minimal und übersteigt deshalb
> bzgl. des Speicherplatz-Bedarfes bestimmt nicht Deine nötigen
> Schieberegister-Routinen in dem Maße, dass man direkt auf den
> "nächtgrößeren µC" wechseln müsste.

Es geht nicht um den Platzbedarf der Software, sondern um die Anzahl der 
benötigten Pins, wenn man auf viele Taster oder eine Matrix-Tastatur 
zugreifen möchte. Die Matrix der von mir genannten Fernbedienung hat 
eine Größe von 8*8 + Page-Eingang. Wenn man dann noch z.B. TXD und RXD 
und einen der OC-Ausgänge benutzen möchte und ein/zwei Leitungen für das 
CS eines Digitalpotis verwenden will, wird es beim ATmega8(8) eng, was 
die freien Pins angeht.
Nachtrag:
Was Deinen Einwand besonders bescheuert macht, ist das schon der Titel 
des Threads in 3 Worten darauf hinweist, das es um Pins geht. Sag mal: 
Nimmst Du das, was Du liest auch bewusst war?

> P.S.
> Deine Geschichte, wie Du die zuviel erzeugten Interrupts "verschlucken"
> willst, um die Taster zu entprellen, halte ich für abenteuerlich. Ich
> gehe daher nicht näher auf so einen Schwachsinn ein.

Und ich gehe auf solche platten persönlichen Angriffe nicht ein. Nur 
soviel: Es funktioniert zuverlässig und ist konzeptionell sauber. - Nur 
Du scheinst es nicht verstanden zu haben. :-D

von citb (Gast)


Lesenswert?

Philipp Klostermann schrieb:
> soviel: Es funktioniert zuverlässig
Das mag sein.

> und ist konzeptionell sauber. - Nur
NEIN.

citb

von timo91 (Gast)


Lesenswert?

Naja ich dachte es ist relativ leicht möglich die Tasten komplett zu 
entprellen.
Das Problem ist eben nur das ich keinen Timer mehr frei habe.
Über die sache mit dem A/D-Wandler hab ich mir auch schon gedanken 
gemacht war aber nicht sicher ob es eine gute lösung wäre. Haut von den 
pins her glaub auch nicht mehr hin.

Ich denke ich werde die Tasten in einem bereits verwendeten Timer 
einfach auslesen.

Sry hattet ja doch Recht =D

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.