Auslesen von 48 Tastern mit AVR

OP #4810242
Lesenswert?

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ß
#4810260
Lesenswert?

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.
Gast #4810281
Lesenswert?

> 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...
Gast #4810283
Lesenswert?

(º°)·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.· 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" :)
OP #4810305
Lesenswert?

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.
Gast #4810310
Lesenswert?

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.
#4810322
Lesenswert?

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.
#4810362
Lesenswert?

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.
Gast #4810416
Lesenswert?

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.
(Firma: matzetronics) #4810468
Lesenswert?

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.
#4810475
Lesenswert?

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.
(Firma: matzetronics) #4810575
Lesenswert?

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...
(Firma: Vescomp) #4810582
Lesenswert?

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.
Gast #4810722
Lesenswert?

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?
#4810774
Lesenswert?

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.
Gast #4810777
Lesenswert?

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.
Gast #4810894
Lesenswert?

> 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?
#4811059
Lesenswert?

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
Gast #4811064
Lesenswert?

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.
#4811069
Lesenswert?

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
#4811077
Lesenswert?

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.
Gast #4811086
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren