Hallo zusammen, ich möchte mit einem möglichst kleinem Avr 48 Taster auslesen. Da ich Pins sparen möchte bin ich beim recherchieren auf die Möglichkeit gestoßen das Ganze über den ADC Eingang mit verschiedenen Widerständen zu betreiben, diese Methode klappt glaube ich in meinem Fall nicht so gut, da es auch vorkommen kann, dass verschiedene Tasten (bis zu 10) gleichzeitig gedrückt werden können. Ist es möglich das ganze mit einem Multiplexer zu realisieren oder alle Tasten nacheinander (über einen Timer) abfragt? Welche Art der Entprellung bietet sich bei der Menge an Tastern an? HW oder SW? Wenn möglich würde ich es gerne auf einem ATMega2560 mit 16MHz laufen lassen. Dieser ist aber außerdem durchgehend mit einer UART Übertragung beschäftigt, sodass das Auslesen aufjedenfall nicht so zeitaufwendig sein sollte, damit diese ungestört weiterlaufen kann. Ist die Idee mit dem Multiplexer sinnvoll? Gruß
EXOR schrieb: > Ist ein Portexpander eine Möglichkeit? Habe ich noch nie benutzt. Aber hört sich erstmal gut an. Ich kanns nur selber nicht einschätzen.
Der ATmega2560 hat 86 IO-Pins, d.h. bei direktem Anschluß hast Du noch 38 IOs übrig. Sind die wirklich alle belegt? Du kannst die Tasten als 6*8 Matrix verschalten, dann sind 14 IOs belegt und 72 IOs verfügbar. Müssen mehr als 2 Tasten gleichzeitig erkannt werden, brauchst Du noch 48 Dioden. Sind die Tasten räumlich weit auseinander, empfehlen sich I2C Port-Expander, z.B. PCF8574/A.
Schau dich deswegen mal um. Abfragen kann man diese beispielsweise über I²C. Durch Adresvergabe kannst du davon auch mehrere anschließen
Thgomas T. schrieb: > Ist die Idee mit dem Multiplexer sinnvoll? Besser: Häng 5 Stück * 8Bit Parallel-In/Serial-Out Shift Register hintereinander, dann langen Dir 2 Leitungen zum Auslesen. Thgomas T. schrieb: > Wenn möglich würde ich es gerne auf einem ATMega2560 mit 16MHz laufen > lassen. Das kann noch ein Tiny mit 128 kHz.
> Das kann noch ein Tiny mit 128 kHz.
Ein kleiner PICklig könnte es noch viel stromsparender bei 30 kHz.
Die Pullups werden wohl mehr ziehn...
Und wenn Du Thgomas T. schrieb: > auf einem ATMega2560 freie Pins wie Heu hast langen natürlich auch 8 Zeilen-Pins + 5 Spalten Pins als Tastatur-Matrix!
(º°)·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.· schrieb im Beitrag #4810281: >> Das kann noch ein Tiny mit 128 kHz. > > Ein kleiner PICklig könnte es noch viel stromsparender bei 30 kHz. > > Die Pullups werden wohl mehr ziehn... Hätt besser noch sagen sollen "macht das mit 128 kHz nebenbei" :)
Udo schrieb: > Besser: Häng 5 Stück * 8Bit Parallel-In/Serial-Out Shift Register Besser: 6 Stück nehmen, dann kann man gleich alle 48 Tasten abfragen!
Peter D. schrieb: > Der ATmega2560 hat 86 IO-Pins, d.h. bei direktem Anschluß hast Du noch > 38 IOs übrig. Sind die wirklich alle belegt? > > Du kannst die Tasten als 6*8 Matrix verschalten, dann sind 14 IOs belegt > und 72 IOs verfügbar. Müssen mehr als 2 Tasten gleichzeitig erkannt > werden, brauchst Du noch 48 Dioden. > > Sind die Tasten räumlich weit auseinander, empfehlen sich I2C > Port-Expander, z.B. PCF8574/A. Hast mir evtl einen Link zu dieser Diodenmethode? Das hört sich interessant an? Wie weit ist denn "weit"? Der max. Abstand ist ca 30cm.
Thgomas T. schrieb: > Hast mir evtl einen Link zu dieser Diodenmethode? Das hört sich > interessant an? http://musicfromouterspace.com/analogsynth_new/OLDIESBUTGOODIES/CONTROLLERS/images4/reeds_and_diodes_2.gif
Peter D. schrieb: > Müssen mehr als 2 Tasten gleichzeitig erkannt > werden, brauchst Du noch 48 Dioden. Wieso? Auf die für 48 Taster sechs Spalten wird nacheinander Highpegel gelegt und die acht Zeilen jeweils eingelesen. Das Spielchen wird zyklisch wiederholt. Es können so alle 48 beliebig gedrückten Zeilen eingelesen werden.
48 Tasten, sehr simpel aber verschwenderisch -> 6x Portextender (8 sind möglich) I2C kaskadierbar: http://www.ebay.de/itm/PCF8574-PCF8574T-I2C-8-Bit-IO-GPIO-Expander-Module-for-Arduino-Raspberry-Pi-UK-/272432637606?var=&hash=item3f6e4026a6:m:mQFPRLxSj-zVxa61Qe6YVhQ etwas weniger verschwenderisch jeden Extender als Matrix gäbe 4x4 Tasten = 16 Tasten, dann werden nur noch 3 Extender benötigt oder 6 Schieberegister die zyklisch eingelesen werden, kann per SPI erfolgen, aber das habe ich noch nie gemacht! Ich würde ja die I2c bevorzugen und nun kommt es auf die Tasten an ob man 6 oder 3 Tasten boards baut.
Udo schrieb: > Es können so alle 48 beliebig gedrückten Zeilen eingelesen werden. Ohne Dioden kann es bei mehreren gleichzeitig aktiven Tasten vorkommen, dass auch die eine oder andere inaktive Taste als aktiv erkannt wird.
Udo schrieb: > Wieso? Drücke mal in dem Bild von A. K. (prx) S1, S2 und S9. Ohne Dioden wäre auch S10 geschlossen.
Udo schrieb: > Wieso? Auf die für 48 Taster sechs Spalten wird nacheinander Highpegel > gelegt und die acht Zeilen jeweils eingelesen. Also wenn schon ohne NKRO, dann bitte mit Low-Pegel als Open-Drain. Andernfalls gibt es bei 2 aktiven Tasten der gleichen Reihe einen soliden Kurzschluss.
:
Bearbeitet durch User
ich würde noch Schiebe-Register ins Spiel bringen. Sind vom Handling her sogar noch einfacher als I2C Porterweiterungen.
Peter D. schrieb: > Drücke mal in dem Bild von A. K. (prx) S1, S2 und S9. > Ohne Dioden wäre auch S10 geschlossen. Aber weshalb denn? Spalten-Setzen nacheinander. A. K. schrieb: > Low-Pegel als Open-Drain. wäre noch hinzuzufügen! Also immer nur 1 Spalten-Pin ist zu einem Zeitpunkz gesetzter Ausgang- alles andere ist Eingang (ohne Pullup).
Udo schrieb: > Aber weshalb denn? Spalten-Setzen nacheinander. Weil dabei ums Eck eine elektrische Verbindung parallel zu S10 entstanden ist. Druck das Bild aus und mal mit einem dicken Filzer die 3 echten Verbindungen auf, dann siehst du auch die falsche. Das Problem ist nicht direkt neu, ist bekannt seit es elektrische Tastaturen gibt. Nennt sich N-Key-Rollover. Du kannst in Software zwar verhindern, dass S10 erkannt wird, indem die Software bei der dritten einen Konflikt auslösenden Taste in den Streik geht (2-Key-Rollover), was für PC-Tastaturen bei geschickter Matrix-Anordnung ok sein kann. Aber der Musiker, dem die dritte gleichzeitige Taste je nach Position nicht reagiert, der reagiert ungnädig.
:
Bearbeitet durch User
A. K. schrieb: > Weil dabei ums Eck eine elektrische Verbindung parallel zu S10 > entstanden ist. Heureka! Also dann mit Dioden. :)
Thgomas T. schrieb: > ich möchte mit einem möglichst kleinem Avr 48 Taster auslesen. Wie haben die Experten das bloß in meiner Tastatur gelöst? Ich such da mal nach Schieberegistern, Portexpandern oder 100-Beinigen µCs. MfG Klaus
Klaus schrieb: > Wie haben die Experten das bloß in meiner Tastatur gelöst? Ich such da > mal nach Schieberegistern, Portexpandern oder 100-Beinigen µCs. Matrix mit 2-Key-Rollover. So angeordnet, dass die PC-üblichen Affengriffe konfliktfrei sind.
Da steckten früher meist 8048 drin. Ein 8 Bitter im DIL 40 Gehäuse. Bei den alten Dingern bin ich mir aber nicht sicher ob die schon elektrisch waren oder noch mit Dampf betrieben wurden :)
Normalerweise würde ich sagen: Matrix. Da Du aber Sonderwünsche hast, sprich mehrere Tasten gleichzeitig drücken willst, geht das nur über eine Einzeltastenüberwachung. Also brauchst Du irgendwie 48 mehr oder weniger unabhängige Eingänge. Unter vielen anderen: 1. µP mit entsprechend vielen Eingängen. 2. Sechs 8-fach Schieberegister mit Latch. 3. Sechs 8-fach Ports die Du recht komfortabel via I²C verwalten kannst. Aber wie gesagt: Es gibt noch ein paar andere Lösungen.
4. Tastenmatrix mit Dioden, wie zu Altväters Zeiten. PC-Tastatur im Selbstbau: http://blog.fsck.com/2012/12/building-a-keyboard-part-1.html
:
Bearbeitet durch User
3x davon Joachim B. schrieb: > I2C kaskadierbar: > Ebay-Artikel Nr. 272432637606 + 3x davon https://www.geras-it.de/elektronische-module/eingabemodule/4x4-tasten-matrix-tastatur-mcu-board/a-405/ fertig
Joachim B. schrieb: > 3x davon > https://www.geras-it.de/elektronische-module/eingabemodule/4x4-tasten-matrix-tastatur-mcu-board/a-405/ Fertig in Matrix verschaltet, aber von Dioden steht da nichts. NKRO ist hier aber Pflicht, folglich sind die hier ungeeignet.
:
Bearbeitet durch User
Thgomas T. schrieb: > Hast mir evtl einen Link zu dieser Diodenmethode? Dort ist es ganz hübsch und auch mit einigen Abwandlungen erklärt: https://www-user.tu-chemnitz.de/~heha/Mikrocontroller/Tastenmatrix.htm
A. K. schrieb: > aber von Dioden steht da nichts. so wie ich das vermute könnte man Dioden nachrüsten? http://www.midi-hardware.com/img/dms2kpinout.gif
Joachim B. schrieb: > so wie ich das vermute könnte man Dioden nachrüsten? Nur wenn die Platine beidseitig verdrahtet ist, also Spalten oben und Zeilen unten. Im Bild sieht man aber, dass die Oberseite verdrahtet ist und bei dieser Sorte 4-Pin Taster geht das auch einseitig.
:
Bearbeitet durch User
Thgomas T. schrieb: > ...da es auch vorkommen kann, dass verschiedene Tasten (bis zu 10) > gleichzeitig gedrückt werden können. Wie bitte drückt man 10 Tasten gleichzeitig? Das ist selbst mit "Wurstfingern" schwierig zu schaffen :-)
A. K. schrieb: > Ohne Dioden kann es bei mehreren gleichzeitig aktiven Tasten vorkommen, > dass auch die eine oder andere inaktive Taste als aktiv erkannt wird. Nö, wie schon erwähnt, kann jede PC Tastatur 102 Tasten verwalten. Ich habe das früher mit den bit addressierbaren Speicherstellen im 8051 gelöst, die eine Kopie des letzten Tastaturzustandes hielten. Wurde eine neue Taste erkannt, wurde ein Keydown Event gezündet; wurde erkannt das eine Taste losgelassen wurde, ein Key Up Event. Das klappt auch mit beliebig vielen gedrückten Tasten.
Matthias S. schrieb: > Das klappt auch mit beliebig vielen gedrückten Tasten. Wenn in http://www.electroons.com/8051/electroons/images/keypad.jpg S1, S2 und S5 gedrückt sind: Wie erkennst du dann, ob zusätzlich noch die dadurch kurzgeschlossene Taste S6 gedrückt wird? Tatsächlich kannst du nicht einmal unterscheiden, ob S5 oder S6 als dritte Taste hinzu kam. Deshalb nennt man das 2-Key-Rollover. Bis 2 Tasten geht immer, mehr nur teilweise. Bei PC-Tastaturen mit ihren 3-Tasten Affengriffen kann man das Problem durch geeignete Platzierung lösen.
:
Bearbeitet durch User
Bei PC-Tastaturen haben die Sondertasten oft einen eigenen Anschluß zum MC.
A. K. schrieb: > S1, S2 und S5 gedrückt sind: Wie erkennst du dann, ob zusätzlich noch > die dadurch kurzgeschlossene Taste S6 gedrückt wird? Recht hast du, das geht nur, wenn da noch Dioden in der Matrix sind. Hmm, komisch, wieso gings dann damals mit der MultiTel Tastatur? In das alte Dings hatte ich einen Mac SE eingebaut und die Original Tastatur auf ADB umgestrickt. Mögl. habe ich nie mehr als 4-5 Tasten gedrückt und die lagen auf der Tastatur günstig...
Matthias S. schrieb: > A. K. schrieb: >> S1, S2 und S5 gedrückt sind: Wie erkennst du dann, ob zusätzlich noch >> die dadurch kurzgeschlossene Taste S6 gedrückt wird? > > Recht hast du, das geht nur, wenn da noch Dioden in der Matrix sind. Nein. CL1-CL4 immer als Eingang RA1 als Ausgang = 0, RA2, RA3, RA4 Eingang / CL1-CL4 <= 0011. RA2 als Ausgang = 0, RA1, RA3, RA4 Eingang / CL1-CL4 <= 0111. RA3 als Ausgang = 0, RA1, RA2, RA4 Eingang / CL1-CL4 <= 1111. RA4 als Ausgang = 0, RA1, RA2, RA3 Eingang / CL1-CL4 <= 1111.
Marc V. schrieb: > RA1 als Ausgang = 0, RA2, RA3, RA4 Eingang / CL1-CL4 <= 0011. > RA2 als Ausgang = 0, RA1, RA3, RA4 Eingang / CL1-CL4 <= 0111. Nein. Hübsches Spielchen hier - man sollte nicht glauben, dass das so schwer zu erkennen ist. CL2 ist über S2+S1+S5 mit RA2 verbunden. Also: RA2 als Ausgang = 0, RA1, RA3, RA4 Eingang / CL1-CL4 <= 0011.
:
Bearbeitet durch User
A. K. schrieb: > Nein. > RA2 als Ausgang = 0, RA1, RA3, RA4 Eingang / CL1-CL4 <= 0011. > CL2 wird über S2+S1+S5 auf 0 gezogen. Tatsächlich. Aber der Weg über 3 zusätzliche Taster ist erheblich länger, mein Program erkennt das sofort durch die Laufzeitverzögerung. ;)
:
Bearbeitet durch User
IBMs erste PC-Tastaturen arbeiteten kapazitiv. Da ging N-Key-Rollover. Das berühmte Modell M hingegen hatte auch bloss noch 2-Key-Rollover. IBM XT Tastatur, siehe Seiten 476/477 in: http://www.retroarchive.org/dos/docs/ibm5160techref.pdf
:
Bearbeitet durch User
Wäre es nicht einfacher mit einem Attiny828 alle 48 Tasten parallel auszuwerten? Der Tiny hat bis zu 28ADC-Kanäle. Man könnte also mind. 4 Tasten per Widerstandsnetzwerk über 1 ADC auswerten(ergibt 16 Spannungswerte). Damit sollten also über 100 Tasten auswertbar sein. Die Kombinationen wären damit beliebig. Übertragen könnte man das ganze bequem per SPI. Oder geht es anders günstiger?
Gerald B. schrieb: > Wie bitte drückt man 10 Tasten gleichzeitig? mit 10 Fingern die hoffentlich die meisten von uns noch haben
Stromverdichter schrieb: > Wäre es nicht einfacher Was ist daran einfacher? Die Anzahl Widerstände entspricht ungefähr der Anzahl Dioden in der Matrix, aber es kommt ein µC dazu und eine Kommunikationsschnittstelle. Und der Code wird dank der nötigen Kommunikation eher komplizierter.
:
Bearbeitet durch User
Was die Anzahl Pins angeht: Bei einer Dioden-Matrix mit 6 Aus- und 8 Eingängen sind die 8 Eingänge u.U. auch noch anderweitig einsetzbar. Denn wenn alle Ausgänge offen sind, dann sind diese Pins frei, beispielsweise für die meisten Pins eines Text-LCD oder für ISP.
:
Bearbeitet durch User
A. K. schrieb: > Stromverdichter schrieb: >> Wäre es nicht einfacher > > Was ist daran einfacher? Die Anzahl Widerstände entspricht ungefähr der > Anzahl Dioden in der Matrix, aber es kommt ein µC dazu und eine > Kommunikationsschnittstelle. Auch der Code wird nicht einfacher, er > läuft nur woanders. Der TO will einen ATmega2560 verwenden um die Tasten abzufragen und dann noch irgendwie etwas seriell zu kommunizieren. Das alles wäre auch einfacher und günstiger über einen Attiny828 möglich. Wenn da so ein Dicker Hund eh schon sein muss, kann man natürlich auch 12 ADCs am 2560 nutzen und den Attiny weglassen. Oft möchte man auch die Aderzahl der Anschlussleitung gering halten. Mit einer seriellen Abfrage lässt sich die schon enorm reduzieren. Aber du hast Recht, wenn am 2560 noch Leitungen frei sind und die zusätzlichen 14 Drähte zur Tastatur nicht wichtig sind, braucht man den 2ten uC nicht.
> Das alles wäre auch einfacher und günstiger über einen Attiny328 möglich.
Er hat aber den ganz großen Arduino, weil er ja auch ein großes Problem
hat.
Für 48 Tasten braucht 6 + 8 Port-Pins, Rx/Tx bleiben dabei frei und wenn
die Timer-ISR, die die Abfrage macht, gleich wieder die Int's freigibt,
dann kann er parallel dazu auch mit 1MBaud Daten rein- und rausflitzen
lassen. Das wären dann 160 Takte pro Byte. Ob er auch so schnell tippen
kann?
Stromverdichter schrieb: > Der Tiny hat bis zu 28ADC-Kanäle. Man könnte also mind. 4 > Tasten per Widerstandsnetzwerk über 1 ADC auswerten(ergibt 16 > Spannungswerte). Damit sollten also über 100 Tasten auswertbar sein. Viel Spaß beim schreiben der Entprellroutine ... Beim Matrixdesign sind es aktuell 3,5 Tasten pro Pin. Bei 100 Tasten in einer 10x10 Matrix wären es 5 Tasten pro Pin. (Oder 5 Pins weniger) Dein Vorschlag lohnt sich also wirklich gar nicht. > 6 + 8 Port-Pins Warum nicht 7 + 7 ? Kann man im Notfall noch eine Taste / einen Schalter anschließen, ohne gleich das ganze Design zu kippen. Gruß Jobst
Jobst M. schrieb: > Viel Spaß beim schreiben der Entprellroutine ... > > Beim Matrixdesign sind es aktuell 3,5 Tasten pro Pin. > Bei 100 Tasten in einer 10x10 Matrix wären es 5 Tasten pro Pin. > (Oder 5 Pins weniger) > Dein Vorschlag lohnt sich also wirklich gar nicht. Das Entprellen ist hier mal überhaupt kein Problem, so etwas löst man z.B. durch Mehrfachabtastung. Wenn Geld keine Rolle spielt, kann man natürlich eine Menge Dioden in eine 10*10 Matrix kippen. Widerstände sind da oft etwas günstiger. Lohnen in finanzieller Hinsicht kann sich das R2R Netzwerk also schon, aber es ist wie immer im Leben, es gibt nicht nur einen Weg. Ich bin da kein Glaubenskrieger.
Stromverdichter schrieb: > Das Entprellen ist hier mal überhaupt kein Problem, so etwas löst man > z.B. durch Mehrfachabtastung. Ja, so macht man das bei der Tastenentprellung. Aber ab wann hältst Du Werte für gültig? Du hast ja nicht nur 1 und 0, sondern Werte, welche sich ständig ändern. > Wenn Geld keine Rolle spielt, kann man > natürlich eine Menge Dioden in eine 10*10 Matrix kippen. 100 * 2ct ... > Widerstände > sind da oft etwas günstiger. Lohnen in finanzieller Hinsicht kann sich > das R2R Netzwerk also schon, Für einen 4 Bit R2R benötigst Du 8 Widerstände. Damit machst Du den Preisvorteil der Widerstände kaputt. Mit 5 Widerständen kommt es zu nichtlinearitäten bei mehreren Tasten gleichzeitig. Edit: Oder Du hast nur sehr kleine Spannungen. > aber es ist wie immer im Leben, es gibt > nicht nur einen Weg. Ich bin da kein Glaubenskrieger. Das hat nichts mit Glauben zu tun. Außer, man glaubt es. Gruß Jobst
:
Bearbeitet durch User
Jobst M. schrieb: > Warum nicht 7 + 7 ? Kann man im Notfall noch eine Taste / einen Schalter > anschließen, ohne gleich das ganze Design zu kippen. 6x8 ergibt 6 Bytes Status, 7x7 führt zu 7 Bytes. Es sind nur entweder die Eingänge oder die Ausgänge der Matrix nebenbei auch noch anderweitig nutzbar (zumindest nicht gleichzeitig), was bei 6x8 auf 6 reservierte Pins rausläuft, bei 7x7 auf 7.
:
Bearbeitet durch User
Jobst M. schrieb: >> Wenn Geld keine Rolle spielt, kann man >> natürlich eine Menge Dioden in eine 10*10 Matrix kippen. > > 100 * 2ct ... Ein preisbewusster Mensch kippt halt nicht die 2 Euro in die Matrix, sondern begnügt sich mit den 20 Cent für die Widerstände. Jobst M. schrieb: >> aber es ist wie immer im Leben, es gibt >> nicht nur einen Weg. Ich bin da kein Glaubenskrieger. > > Das hat nichts mit Glauben zu tun. Außer, man glaubt es. Du magst wohl keine anderen Götter neben dir, hihi. Ich hätte es schon schöner empfunden, wenn du deine Energie nicht gegen andere Meinungen richtest würdest, sondern sie nutzt um das Problem besser auszuleuchten. Es gibt für beide Varianten sinnvolle Anwendungen. Solange der TO nicht ausführlich schildert, wie die Anwendungs-Situation aussieht, ist das im Moment eh nur ein Aufführen verschiedener Möglichkeiten.
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.