Problem mit Tastaturmatrix 3x4

OP #1355892
Lesenswert?

Hi,

ich habe eine Tastaturmatrix. Diese funktioniert auch. (Mit Multimater 
nachgemessen) Die Schaltung die am uC funktioniert ebenfalls. Wenn ich 
Taste 1 drücke kommt +5V am Ts1 (Pc.0) an.

Nun möchte ich abfragen welche Taste gedrückt wurde.
Hier mal mein Code für Reihe 1 (Tr1):
1
   If Ts1 = 1 Then
2
      'Taste 1 wurde gedrückt
3
      Cls
4
      Locate 1 , 1
5
      Lcd "Taste 1"
6
      Sound Summer , Pulses , Periods
7
   End If
8
   If Ts2 = 1 Then
9
      'Taste 2 wurde gedrückt
10
   End If
11
   If Ts3 = 1 Then
12
      'Taste 3 wurde gedrückt
13
   End If

Hier noch ein Schema meiner Tastatur (T enspricht einer Taste):

Tr1 = Pa.3
Tr2 = Pa.2
Tr3 = Pa.1
Tr4 = Pa.0
Ts1 = Pc.0
Ts2 = Pc.1
Ts3 = Pc.2

        Ts1   Ts2   Ts3
         |     |     |
Tr1 -----T-----T-----T
         |     |     |
Tr2 -----T-----T-----T
         |     |     |
Tr3 -----T-----T-----T
         |     |     |
Tr4 -----T-----T-----T

Kann mir wer helfen? Wo liegt mein Fehler?

PS: Ich verwende nen Atmega16 mit 16MHz Quarz

Gruß Michi26206
#1355904
Lesenswert?

Michael O. schrieb:
> Wenn ich
> Taste 1 drücke kommt +5V am Ts1 (Pc.0) an.

Und was, wenn Du nicht drückst?

Deshalb ist high ungünstig, man benötigt ja externe Pulldowns.
Man legt die Ausgänge auf low und schaltet an den Eingängen die internen 
Pullups ein.

Und man legt immer nur einen Ausgang auf low und alle anderen auf 
tristate. Sonst kommt es zu Datenkämpfen, wenn jemand 2 Tasten drückt.


> Wo liegt mein Fehler?

Welcher Fehler?

Du mußt schon den Fehler beschreiben, also:
- was soll wie funktionieren?
- was erwartest Du bei welcher Aktion?
- was passiert stattdessen?


Peter
OP #1356434
Lesenswert?

> Man legt die Ausgänge auf low und schaltet an den Eingängen die internen
> Pullups ein.
>
> Und man legt immer nur einen Ausgang auf low und alle anderen auf
> tristate. Sonst kommt es zu Datenkämpfen, wenn jemand 2 Tasten drückt.

verstehe das jetzt nicht ganz, ich muss ja die Spannung der Matrix 
schalten. Also wenn ich Ts1, Ts2 und Ts3 abfragen will, schalte ich im 
Moment dern Pullup des Ports/Pins ein, welcher an Tr1 hängt. Wie müsst 
eich das genze vershclaten damit es so funktioniert wie du meinst. Bin 
im Moment mehr als verwirrt.

Gruß

PS: Musste neuen Post aufmachen da ich den alten nicht editieren konnte.
#1356484
Lesenswert?

Michael O. schrieb:
> Wenn ich nichts drücke liegen 0V an.

Und woher kommen die (Schaltplan)?

Strom braucht immer nen Weg (Draht).
Von nichts kommt nur Mist (kapazitive Einkopplung).

Im allergünstigsten Fall bleibt die Schaltungskapazität (~100pF) auf den 
vorherigen Pegel aufgeladen.


Peter
OP #1356778
Lesenswert?

Morgen zusammen,

habe das ganze jetz umgebaut das ich beim Tastendruck Low am uC habe.

aktualliesiertes Programm:
1
   If Tr1 = 0 Then
2
      'Taste 1 Wurde gedrückt
3
      Cls
4
      Locate 1 , 1
5
      Lcd "Taste 1"
6
      Sound Summer , Pulses , Periods
7
   End If
8
   If Tr2 = 0 Then
9
      'Taste 4 Wurde gedrückt
10
   End If
11
   If Tr3 = 0 Then
12
      'Taste 7 Wurde gedrückt
13
   End If
14
   If Tr4 = 0 Then
15
      'Taste * Wurde gedrückt
16
   End If

Habe das ganze jetz mal manuell probiert, einfach an den Pin der der 
Eingang ist gnd angelegt. Da rührt sich nichts. Kann es sien das mein uC 
von rumleigen kaputt gegangen ist? Oder das die ISP ne macke hat. Das 
LCD funktioniert nämlich super.

Gruß
Angehängte Dateien:
OP #1357002
Lesenswert?

So nachner Pause und viel frishcer Luft habe ich es jetz in bekommen.

Allerdings habe ich das Problem, das wenn ich in Reihe 1 irgendeine 
Taste betätige kommt immer Taste 1 am LCD. D.h. es wird immer Taste 1 
erkannt obwohl z.B. Taste 4 gedrückt wurde.

Hier ist der aktuelle Programmcodeauschnitt:
1
   If Tr1 = 0 Then
2
      'Taste 1 Wurde gedrückt
3
      Cls
4
      Locate 1 , 1
5
      Lcd "moep 1"
6
      Sound Summer , Pulses , Periods
7
   End If
8
   If Tr2 = 0 Then
9
      'Taste 4 Wurde gedrückt
10
      Cls
11
      Locate 1 , 1
12
      Lcd "4"
13
   End If
14
   If Tr3 = 0 Then
15
      'Taste 7 Wurde gedrückt
16
      Cls
17
      Locate 1 , 1
18
      Lcd "Taste 7"
19
   End If
20
   If Tr4 = 0 Then
21
      'Taste * Wurde gedrückt
22
      Cls
23
      Locate 1 , 1
24
      Lcd "Taste *"
25
   End If

Gruß

edit: Ich verwende diese Tastatur: 
http://www.conrad.de/goto.php?artikel=709840

Und der Schaltpaln sieht im Moment wieder so aus: 
http://www.mikrocontroller.net/attachment/55488/matrix.jpg
Bei den Eingängen sind die Pullups ein. Und bei den Ausgängen die 
Pullups der Spalten, die nicht abgefragt werden.

Die hast du (Peter Dannegger) ja auch schon mal verwendet. Kann es sein 
das meine ne Macke hat? Denn wenn ich die Taste drücke, bleibt d3er 
Kontakt der Taste wohl noch ca. 1-5 Sekunden bestehen. Und manchmal wird 
sogar die richtige Taste erkannt.

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