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?
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)
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.
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.
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
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
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.
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.
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
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...
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.
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. ;-)
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
> 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.
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.)
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.
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
Philipp Klostermann schrieb: > soviel: Es funktioniert zuverlässig Das mag sein. > und ist konzeptionell sauber. - Nur NEIN. citb
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.