Forum: Mikrocontroller und Digitale Elektronik IT-Schulprojekt: Matrixschaltung


von Paul P. (xanatos)


Lesenswert?

Hallo

wir sind in der 12.Klasse und haben uns entschieden eine Matrixschaltung 
(Gitter) von jeweils 8x8 Leitungen zu bauen. Es soll im Endeffekt eine 
art Touchpad sein. Das Ganze wollen wir über einen Mikrocontroller(8051) 
an den Pc anschließen.
Da wir uns nicht so auskennen brauchen wir noch Informationen:

Hier mal 2 Fragen:

Es ist ja wahrscheinlich nicht möglich 16 Leitungen als Eingänge zu 
benutzen, also muss man das über einen Dekoder an den Mikrocontroller 
anschließen.
Welche Varianten gibt es da, gibt es da auch programmierbare Bausteine 
die jedem möglichen Zustand eine Adresse zuweißt?

Außerdem: Welchen Mikrocontroller sollte man verwenden?

Danke schonmal im Vorraus über eure Antworten

Grüße Xanatos

von crazy horse (Gast)


Lesenswert?

warum sollte es nicht möglich sein, 16 Leitungen an einen MC 
anzuschliessen? Mit einem 89C51/52 gar kein Problem, der hat doch 32 
I/Os.
Natürlich gibts dafür ganz viele Lösungen, aber das ist schon die 
einfachste.

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Dasselbe macht man auch mit Tastaturen, eine Matrix mit einer Diode in 
Serie zu jedem Schalter-Kreuzungspunkt. Werden 2 oder mehr Tasten 
gleichzeitig gedrückt, dann weiß die Software erat mal nicht, was gelten 
soll. Stichwort "2-key-rollover" und "n-key-rollover"
Man kann einen "Prioritäts-Encoder verwenden, 74HC147 oder 148, das 
vereinfacht den Anschluß am Mikrocontroller

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

noch mal 4 Leitungen spart ein 3Bit-zu-8-Decoder wie der 74HC42
http://www.st.com/stonline/products/literature/ds/1973.pdf
Daten zum 74HC147:
http://www.st.com/stonline/products/literature/ds/1902/m74hc147.pdf
damit braucht man statt 16 nur noch 6 Portanschlüsse am Mikrocontroller

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Stimmt nicht ganz, wenn wirklich alle 64 benutzt sind, gibt es noch 
einen 65.Zustand, dass nichts gedrückt ist, das kostet noch ein Portbit.

von Paul P. (xanatos)


Lesenswert?

joa schonmal danke für die teilweiße verwirrende antworten ;)

wäre es nicht einfach wenn man vor dem mikrocontroller 2 Dekoder 
schaltet die jeweils für eine der 2 achsen zuständig sind und das 
ergebnis an den MC weitergeben.

Welche Bausteine sollen wir als Dekoder benutzen?
Mit welchen MC ist jetzt dies am besten lösbar?
Und wo bekomme ich günstig diese Bausteine/MC her?


Mit freundlichen Grüßen

Vadim und Xanatos

von Matrixer (Gast)


Lesenswert?

Hi,
hier mal eine App-Note für einen PIC-Mikrocontroller:
http://ww1.microchip.com/downloads/en/AppNotes/4_012.pdf
Und das gleiche in grün gibt's auch bei ATMEL:
http://www.atmel.com/dyn/resources/prod_documents/doc2669.pdf
Das Prinzip ist immer identisch,
es werden die Tasten über kreuz mit zwei Portpins verbunden.
Solange nur eine einzige Taste erkannt werden soll sind keinerlei Dioden 
o.ä. notwendig.
Wenn mehrere Tasten gleichzeitig dedektiert werden sollen, müssen sie in 
den Diagonalen durch Dioden begrenzt werden.
Leider finde ich gerade die sehr gute Seite mit ALLEN Varianten nicht :(
Aber das Prinzip geht aus den genannten AppNotes klar hervor ;)
Viel Spaß bei experimentieren ;)

von Paul P. (xanatos)


Lesenswert?

Wie sieht es mit der Polung der Ein und Ausgänge aus sind die Eingänge 
(waggrecht)+ und die Ausgänge (senkrecht)- gepolt das die 
Matrixschaltung so aufgebaut wernde kann. Oder gib es Eingänge die - 
oder + gepolot sind und man nur mit Eingängen Arbeiten kann.

von Karl Heinz (Gast)


Lesenswert?

hajo nehm den 8051er

von Paul P. (xanatos)


Lesenswert?

ähm ja ne, aber welchen genau?

von Peter D. (peda)


Lesenswert?

Lord Xanatos wrote:
> ähm ja ne, aber welchen genau?

Am einfachsten, einen mit Bootloader, z.B. AT89C51ED2.


Peter

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.