Forum: Mikrocontroller und Digitale Elektronik 4x4 Matrix für 16 Schalter


von S. H. (fat32)


Lesenswert?

Hallo,

als erstes möchte ich erstmal sagen, dass ich bei Google schon geuscht 
habe.
Finde nur codes für PICs.

Ich such einen Schaltplan + Beispiel-Programm für einen Atmega(32) zu 
einer 4x4-Matrix. (am besten mit softwareseitiger entprellung)

Es soll ich möglich sein, dass man mehrere Tasten auf einmal drücken 
kann, ohne dass irgendwie ein Kurzschluss oder so entsteht.

Falls jemand so etwas hat, würde ich mich sehr über einen Link oder 
ähnliches freuen.

Mfg Simon

von Karl H. (kbuchegg)


Lesenswert?

Google ist gut, aber uch hier gibt es eine Suchfunktion.

Beitrag "Tasten-Matrix entprellen"
Beitrag "Matrixtastatur am AVR"

von S. H. (fat32)


Lesenswert?

danke.
das ist jetzt in C, gibts das noch wo in Basic?


Und noch was:

      PB4   PB5   PB6   PB7
       |     |     |     |
       |     |     |     |
PB0----T-----T-----T-----T--10k--VCC
       |     |     |     |
PB1----T-----T-----T-----T--10k--VCC
       |     |     |     |
PB2----T-----T-----T-----T--10k--VCC
       |     |     |     |
PB3----T-----T-----T-----T--10k--VCC


ist ja so, dass PB4-PB7 jeweils als ausgang konfiguriert werden, wenn 
man die Spalte abfragen will.
Könnte man das auch so machen, dass die PB4-PC7 immer Eingang bleiben?
Also dass man dann, wenn man z.B. den ersten Taster drückt, ein High an 
PB0 und PB4 hätte.

Wenn ja, wie?
Ich steh grad voll aufm Schlauch

von Andreas K. (a-k)


Lesenswert?

Die Dioden sollte man nicht vergessen, wenn mehrere gleichzeitig 
gedrückte Tasten nicht zu Geistertasten führen sollen: pro Schalter eine 
Diode in Serie.

Ohne Diode sollte man immer nur einen Ausgang nach dem anderen als 
Ausgang aktivieren, weil's sonst ein Kurzen bei gleichzeitig aktiven 
Schaltern geben kann.

von Hannes L. (hannes)


Lesenswert?

Simon Hat einen nick wrote:
> Hallo,
>
> als erstes möchte ich erstmal sagen, dass ich bei Google schon geuscht
> habe.
> Finde nur codes für PICs.
>
> Ich such einen Schaltplan + Beispiel-Programm für einen Atmega(32) zu
> einer 4x4-Matrix. (am besten mit softwareseitiger entprellung)

Bei www.atmel.com gibt es kostenlos eine Sammlung mit AppNotes. Da ist 
auch eine dabei, die den Anschluss von einer Matrix-Tastatur 4x4 und 
einer mehrstelligen Ziffernanzeige an einem einzigen 8-Bit-Port 
beschreibt. Dein Projekt mit einem dreistelligem (oder auch 6-stelligem) 
Taschenrechner ist daher durchaus auf einem Tiny2313 oder Mega48 
realisierbar. Als externe Hardware werden außer den Tasten und 
7-Segment-Displays (mit Segmentwiderständen) nur ein paar Transistoren 
als Digit-Treiber benötigt.

>
> Es soll ich möglich sein, dass man mehrere Tasten auf einmal drücken
> kann, ohne dass irgendwie ein Kurzschluss oder so entsteht.

Man drückt auf einem Taschenrechner nicht mehrere Tasten zugleich. Und 
bei ordentlicher Software stört versehentliches Drücken mehrerer Tasten 
auch nicht weiter.

>
> Falls jemand so etwas hat, würde ich mich sehr über einen Link oder
> ähnliches freuen.
>
> Mfg Simon

...

von S. H. (fat32)


Lesenswert?

Danke für die Posts.
Jetzt verstehe ich es auch.
Ich war nur iritiert, weil man bei dem Beispiel hier immer einen Port 
als Ausgang schalten muss.


      PB4   PB5   PB6   PB7
       |     |     |     |
       |     |     |     |
PB0----T-----T-----T-----T--10k--VCC
       |     |     |     |
PB1----T-----T-----T-----T--10k--VCC
       |     |     |     |
PB2----T-----T-----T-----T--10k--VCC
       |     |     |     |
PB3----T-----T-----T-----T--10k--VCC


Und in der Datei 
http://www.mikrocontroller.net/attachment/353/matrix.txt steht noch:

"T" bedeutet, dass die kreuzenden Leitungen über einen Taster verbunden 
sind.

Wie soll ich an einen Schalter 4 Leitungen löten?

von AVR (Gast)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

Simon Hat einen nick wrote:
> danke.
> das ist jetzt in C, gibts das noch wo in Basic?
>
>
> Und noch was:
>
>       PB4   PB5   PB6   PB7
>        |     |     |     |
>        |     |     |     |
> PB0----T-----T-----T-----T--10k--VCC
>        |     |     |     |
> PB1----T-----T-----T-----T--10k--VCC
>        |     |     |     |
> PB2----T-----T-----T-----T--10k--VCC
>        |     |     |     |
> PB3----T-----T-----T-----T--10k--VCC
>
>
> ist ja so, dass PB4-PB7 jeweils als ausgang konfiguriert werden, wenn
> man die Spalte abfragen will.
> Könnte man das auch so machen, dass die PB4-PC7 immer Eingang bleiben?
> Also dass man dann, wenn man z.B. den ersten Taster drückt, ein High an
> PB0 und PB4 hätte.

Nein.

Du hast noch nicht kapiert wie (im Grunde eigentlich simpel)
das ganze funktioniert.

Ich ersetze mal die T (für Taster) in der Matrix mit Kleinbuchstaben,
damit ich einzelne Tasten ansprechen kann:

       PB4   PB5   PB6   PB7
        |     |     |     |
        |     |     |     |
 PB0----a-----b-----c-----d--10k--VCC
        |     |     |     |
 PB1----e-----f-----g-----h--10k--VCC
        |     |     |     |
 PB2----i-----j-----k-----l--10k--VCC
        |     |     |     |
 PB3----m-----n-----o-----p--10k--VCC


Was ist der Grundzustand? Also wenn keine Taste gedrückt
ist.

Durch den Vcc Anschluss, über den Widerstand wird jede Zeile
auf einer 1 gehalten. D.h. an PB0, PB1, PB2, PB3 wird jeweils
eine 1 auftauchen und zwar unabhängig davon was an den Ausgängen
PB4, PB5, PB6, PB7 für ein Potential ausgegeben wird. Denn:
Es ist ja kein Taster geschlossen.

Jetzt drück einfach mal den Taster k
und es wird angefangen die Matrix abzuscannen:

PB4 wird auf Ausgang geschaltet und eine 0 ausgegeben.
Da keiner der Taster a, e, i, m  gedrückt ist, gibt es
auch keine Verbindung von PB4 nach PB0, PB1, PB2 oder PB3.
D.h. dort wird weiterhin jeweils eine 1 eingelesen.

PB4 wieder auf Eingang schalten, damit er hochohmig wird
und den weiteren Scanverlauf nicht stört.

PB5 wird auf Ausgang geschaltet und eine 0 ausgegeben.
Auch hier: keiner der Taster b, f, j, n ist gedrückt.
Damit gibt es auch keine Beeinflussung von dieser Spalte
zu den Zeilen und PB0, 1, 2, 3 stehen auf 1

PB5 wieder auf Eingang (hochohmig)

PB6 auf Ausgang schalten und eine 0 ausgeben.
Diesmal gibt es einen gedrückten Taster, nämlich k.
Der stellt eine Verbindung von PB6 zu PB2 her und
damit wird die Leitung PB2 auf 0 Potential gezogen
(der 10k Widerstand sorgt dafür, dass es keinen Kurz-
schluss gibt, den der versucht ja die Leitung auf Vcc
zu halten. Kann er aber nicht)
Also wird in dieser Konfiguration auf den Eingängen
PB0, PB1 und PB3 auf 1 stehen und PB2 auf 0 sein.

PB6 wieder auf Eingang

PB7 aus Ausgang und eine 0 ausgeben.
Da in dieser Spalte kein Taster gedrückt ist, lesen
PB0, 1, 2, 3 wieder jeweils eine 1 ein.

Jetzt muss das ganze nur noch ausgewertet werden. Über
die Kombination, dass PB2 zu 0 wurde, wenn PB6 die 0
vorgab, ergibt sich dann dass Taster k gedrückt gewesen
sein muss.


Viel Spass bei der Umsetzung in BASIC.

von AVR (Gast)


Lesenswert?


von S. H. (fat32)


Lesenswert?

danke für die Erklärung. Jetzt hab ichs verstanden.

Kann ich die 10k WIderstände auch durch 100k ersetzen? Habe keine 10er 
da.

von Karl H. (kbuchegg)


Lesenswert?

Simon Hat einen nick wrote:
>
> danke für die Erklärung. Jetzt hab ichs verstanden.
>
> Kann ich die 10k WIderstände auch durch 100k ersetzen? Habe keine 10er
> da.

Ja, kannst du.


von S. H. (fat32)


Lesenswert?

dann noch 1 frage:

wie muss ich die 3 bzw. 4 kabel, die an jeden schalter kommen verbinden?

welche kommen an Pin 1, welche an Pin2? Ich blicks grad echt überhaupt 
nicht

von AVR (Gast)


Lesenswert?

hättest du auf den link geklickt hättest du die fette zeichnung in farbe 
gesehen

von Karl H. (kbuchegg)


Lesenswert?

Probiers einfach aus:
Der Taster muss eine Verbindung zwischen der Spalte und
der Zeile machen, wenn der Taster gedrückt ist.

Jetzt nimmst du dein Multimeter in der Stellung
Widerstandsmesser (manche haben auch einen Durchgangs-
prüfer der piepst) und probierst aus bei welchen
2 Beinchen es der Fall ist, dass es einen Durchgang
gibt (der Widerstand also 0 Ohm beträgt) wenn der
Taster gedrückt wird.

Das eine Beinchen kommt dann an die Spalte, das andere
an die Zeile.

von Obelix (Gast)


Lesenswert?

>Ich steh grad voll aufm Schlauch.

Kommst du da auch noch mal runter?

Liest dir mal alles noch einmal durch, alle Postst und alle Links.

von Karl H. (kbuchegg)


Lesenswert?

Karl heinz Buchegger wrote:
> Probiers einfach aus:
> Der Taster muss eine Verbindung zwischen der Spalte und
> der Zeile machen, wenn der Taster gedrückt ist.
>
> Jetzt nimmst du dein Multimeter in der Stellung
> Widerstandsmesser (manche haben auch einen Durchgangs-
> prüfer der piepst) und probierst aus bei welchen
> 2 Beinchen es der Fall ist, dass es einen Durchgang
> gibt (der Widerstand also 0 Ohm beträgt) wenn der
> Taster gedrückt wird.
>
> Das eine Beinchen kommt dann an die Spalte, das andere
> an die Zeile.

Ach ja: Zeile und Spalte sind jeweils einfach nur ein
Draht, der von einem Taster zum nächsten durchgeschleift
wird.

Also: PB0 -> Draht -> Beinchen vom Taster 'a' ->
             Draht -> Beinchem vom Taster 'b' ->
             Draht -> Beinchem vom Taster 'c' ->
             Draht -> Beinchem vom Taster 'd' ->
             Widerstand -> Vcc

      PB4 -> Draht -> das andere Beinchem vom Taster 'a' ->
             Draht -> das andere Beinchem vom Taster 'e' ->
             Draht -> das andere Beinchem vom Taster 'i' ->
             Draht -> das andere Beinchem vom Taster 'm'


Uff.
Soll ich das ganze jetzt auch noch aufbauen und ein Photo machen?

von S. H. (fat32)


Lesenswert?

AVR wrote:
> hättest du auf den link geklickt hättest du die fette zeichnung in farbe
> gesehen

hab ich, aber die zeichnung hab ich dann wohl übersehen.
liegt wohl daran, dass ich jetzt schon seit gestern morgen um 9 wach 
bin...


>>Ich steh grad voll aufm Schlauch.

>Kommst du da auch noch mal runter?
ich hoffs doch...

>Liest dir mal alles noch einmal durch, alle Postst und alle Links.
OK

>Das eine Beinchen kommt dann an die Spalte, das andere
>an die Zeile.
das wollte ich hören. Danke!


>Uff.
>Soll ich das ganze jetzt auch noch aufbauen und ein Photo machen?
Nein, das brauchst du nicht ;-) Ich geh jetzt ne Runde pennen, dann 
müsste das schon klappen.


von S. H. (fat32)


Lesenswert?

http://bascom-forum.de/index.php?action=dlattach;topic=10.0;attach=143;image

auf dem Bild hier sind keine WIderstände an der Matrix.



>Also: PB0 -> Draht -> Beinchen vom Taster 'a' ->
>             Draht -> Beinchem vom Taster 'b' ->
>             Draht -> Beinchem vom Taster 'c' ->
>             Draht -> Beinchem vom Taster 'd' ->
>             Widerstand -> Vcc

da schreibst du aber von nem Widerstand.
Ist das ein Pullup? Wenn ja, da könnte ich ja auch den internen des 
Mega32 nehmen, oder?

von Karl H. (kbuchegg)


Lesenswert?

Simon Hat einen nick wrote:
> http://bascom-forum.de/index.php?action=dlattach;topic=10.0;attach=143;image
>
> auf dem Bild hier sind keine WIderstände an der Matrix.

Viele Wege führen nach Rom.

>
>
>
>>Also: PB0 -> Draht -> Beinchen vom Taster 'a' ->
>>             Draht -> Beinchem vom Taster 'b' ->
>>             Draht -> Beinchem vom Taster 'c' ->
>>             Draht -> Beinchem vom Taster 'd' ->
>>             Widerstand -> Vcc
>
> da schreibst du aber von nem Widerstand.

Ich bezog mich auch die ganze Zeit auf das von dir
gepostete Schaubild. Hier ist es nochmal

      PB4   PB5   PB6   PB7
       |     |     |     |
       |     |     |     |
PB0----T-----T-----T-----T--10k--VCC
       |     |     |     |
PB1----T-----T-----T-----T--10k--VCC
       |     |     |     |
PB2----T-----T-----T-----T--10k--VCC
       |     |     |     |
PB3----T-----T-----T-----T--10k--VCC

> Ist das ein Pullup? Wenn ja, da könnte ich ja auch den internen des
> Mega32 nehmen, oder?

Geh erst mal schlafen. Das hat heute keinen Sinn mehr.

von Michael U. (Gast)


Lesenswert?

Hallo,

ja, man kann die internen PullUp nehmen.

Ich habe jetzt nicht in Software-Beipiele geschaut, aber früher war mein 
Ansatz so: Zeilen alle Eingang mit PullUp.
Spalten alle Ausgang und auf L.

Die Abfrage hat alle Zeilen geholt, wenn alle 1 sind -> keine Taste 
gedrückt -> nichts machen.

Wenn eine 0 dabei dann wie oben, also 3 Spalten als Eingang, schauen ob 
die 0 noch da ist usw.
Verkürzt die IRQ-Routine, wenn keine Taste gedrückt ist.

Man kann auch die Matrix-Abfrage noch kürzen: wenn eine 0 erkannt, dann 
Spalten alle als Eingang mit PullUp setzen und Zeilen alle auf Ausgang 
L, dann Spalten einlesen und die 0 auswerten. Bei der ersten Abfrage hat 
man die Spalte, bei der zweiten die Zeile.

Mehrere gleichzeitig gedrückte Tasten werden ohne zusätzlichen Aufwand 
ohnehin falsch erkannt.
Ich habe die Ergebnisse jeweils geschoben, bis eine 0 im C ankam. Damit 
kommen dann zumindest immer gültige Codes raus.

Gruß aus Berlin
Michael

von Holger K. (krulli) Benutzerseite


Lesenswert?

AVR wrote:
> hättest du auf den link geklickt hättest du die fette zeichnung in farbe
> gesehen

Liegt vielleicht auch daran, dass man sich dort erstmal registrieren 
muß, um überhaupt was zu sehen..

von Hannes L. (hannes)


Lesenswert?

Holger Krull wrote:
> AVR wrote:
>> hättest du auf den link geklickt hättest du die fette zeichnung in farbe
>> gesehen
>
> Liegt vielleicht auch daran, dass man sich dort erstmal registrieren
> muß, um überhaupt was zu sehen..

Eben, das hält mich auch davon ab, da mal nachzuschaun.

Aber ich vermute mal, dass "der einen nick hat" sich auch die 
Atmel-AppNote AVR242 nicht angesehen hat...

Gruß über'n Bach,
Hannes

von S. H. (fat32)


Lesenswert?

registriert hab ich mich da nicht.
vorher ging es aber.... jetzt soll ich mich einloggen ---> kein bedarf


hab jetzt die matrix gelötet. kann ich mich drauf verlassen, dass das 
mit internen pullups klappt? (hab echt keine lust nachher wieder die 
kabel wegzulöten)

Simon

von Hannes L. (hannes)


Lesenswert?

Na? Ausgeschlafen??

Simon Hat einen nick wrote:
> registriert hab ich mich da nicht.
> vorher ging es aber.... jetzt soll ich mich einloggen ---> kein bedarf

Es ist aber ein kleiner Unterschied, ob ich mich da nicht anmelden 
möchte, oder ob Du darauf verzichtest. Denn ich bin in der Lage, meine 
Programme in ASM zu schreiben. Du aber möchtest (wie ich oben gelesen 
habe) in BASIC mit BASCOM programmieren und stehst noch gaaaaaanz am 
Anfang Deines Lernprozesses. Da meine ich schon, dass das BASCOM-Forum 
für Dich ergiebiger sein könnte als dieses Forum hier. Hier findest Du 
eher die ASM- oder C- Programmierer. Und die meisten davon verzichten 
freiwillig auf den Baukasten BASCOM.

>
>
> hab jetzt die matrix gelötet. kann ich mich drauf verlassen, dass das
> mit internen pullups klappt?

Nööö... Denn es kommt immer darauf an, wie man die Abfrage programmiert 
und unter welchen Bedingungen das Gerät betrieben werden soll. Für kurze 
Leitungen zu den Tastern unter normalen Bedingungen (also nicht gerade 
im Schaltschrank einer Industrieanlage) sind die AVR-internen PullUps 
ausreichend.

> (hab echt keine lust nachher wieder die
> kabel wegzulöten)

Deshalb plant man ja eine Schaltung bevor man drauflos lötet.

>
> Simon

...

von Karl H. (kbuchegg)


Lesenswert?

Simon Hat einen nick wrote:
> registriert hab ich mich da nicht.
> vorher ging es aber.... jetzt soll ich mich einloggen ---> kein bedarf
>

Das ist aber schade.
Demnach weist du auch nicht, das BASCOM bereits eine fix
fertige Ansteuerung für die Matrix hat. Ein Befehl, der
die Auswertung macht.
Schade.

von S. H. (fat32)


Lesenswert?

>Na? Ausgeschlafen??
not really :-D

>Es ist aber ein kleiner Unterschied, ob ich mich da nicht anmelden
>möchte, oder ob Du darauf verzichtest. Denn ich bin in der Lage, meine
>Programme in ASM zu schreiben. Du aber möchtest (wie ich oben gelesen
>habe) in BASIC mit BASCOM programmieren und stehst noch gaaaaaanz am
>Anfang Deines Lernprozesses. Da meine ich schon, dass das BASCOM-Forum
>für Dich ergiebiger sein könnte als dieses Forum hier. Hier findest Du
>eher die ASM- oder C- Programmierer. Und die meisten davon verzichten
>freiwillig auf den Baukasten BASCOM.


Ok, überredet ;-)

>Nööö... Denn es kommt immer darauf an, wie man die Abfrage programmiert
>und unter welchen Bedingungen das Gerät betrieben werden soll. Für kurze
>Leitungen zu den Tastern unter normalen Bedingungen (also nicht gerade
>im Schaltschrank einer Industrieanlage) sind die AVR-internen PullUps
>ausreichend.

Ich hab ca. 30cm lange Leitungen. Ich denke, dass das nicht zu lange 
ist.

>Das ist aber schade.
>Demnach weist du auch nicht, das BASCOM bereits eine fix
>fertige Ansteuerung für die Matrix hat. Ein Befehl, der
>die Auswertung macht.
>Schade.

wenn ich das gewusst hätte.... gleich mal schauen

von S. H. (fat32)


Angehängte Dateien:

Lesenswert?

Das Bild im Anhang ist vom dem Forum.

Da hat man an allen 8 Ports Widerstände dran. Braucht man die alle? Oder 
reichen auch nur 4? also für jede zeile einen.

von Simon K. (simon) Benutzerseite


Lesenswert?

Simon Hat einen nick wrote:
> Das Bild im Anhang ist vom dem Forum.

Also das ist alles, aber kein Bild.

von S. H. (fat32)


Angehängte Dateien:

Lesenswert?

hmm... dann halt der umweg über paint...

im anhang das bild

von Simon K. (simon) Benutzerseite


Lesenswert?

Das ist ein Array aus LEDs und nicht aus Schaltern, oder? Die 47Ohm 
wundern mich da etwas...

von S. H. (fat32)


Lesenswert?

nein, das ist eine schalter-matrix...

von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

Simon Hat einen nick wrote:

> Da hat man an allen 8 Ports Widerstände dran. Braucht man die alle? Oder
> reichen auch nur 4? also für jede zeile einen.

Plagt Dich etwa wegen 4 Widerständen der Geiz??

Der Autor dieser Schaltung hat sich sicherlich etwas dabei gedacht.

Aber vielleicht hat der Autor das mit den Widerständen nur hier (Anhang) 
abgeguckt und sich nichts weiter dabei gedacht??

Ob Du die Widerstände einsparen kannst, musst Du schon mit dem 
Programmierer des BASCOM-Bausteins für die Tastenabfrage klären, denn 
der lässt uns nicht in seine ASM-Quelltexte hineinschauen (einer der 
Gründe, warum ich BASCOM meide).

...

von AVR (Gast)


Lesenswert?

@Hannes Lux das ist so nicht ganz richtig-alle pakete existieren
in einer sogenanten lib datei die mit einem eingebauten editor in bascom
verändert werden können.

von Hebamme (Gast)


Lesenswert?

Das ist aber eine schwere Geburt, wie wäre es mit etwas Einfacheren wie 
zum Beispiel mit LEGO-Steinen spielen? ;-)

von AVR (Gast)


Lesenswert?

Hebamme, hol das Stöckchen....

von Hannes L. (hannes)


Lesenswert?

AVR wrote:
> @Hannes Lux das ist so nicht ganz richtig-alle pakete existieren
> in einer sogenanten lib datei die mit einem eingebauten editor in bascom
> verändert werden können.

Ich brauche diesen Quatsch trotzdem nicht...

...

von pusher (Gast)


Lesenswert?

.

von Sajuuk (Gast)


Lesenswert?


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.