Forum: Mikrocontroller und Digitale Elektronik Zehnertastatur an PIC


von Markus Jung (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe bei Pollin (voreilig) die Zifferntastatur SAMWELL 702772-8
bestellt ohne vorher das Datenblatt genau anzusehen. Aus dem Datenblatt
geht letztendlich auch die Beschaltung hervor und die finde ich ein
wenig komisch. Ich tue mich als µC-Anfänger ein wenig schwer diese
Tastatur über einen PIC16F946 einzulesen.

Jetzt hoffe ich auf euch: Hat jemand eine Idee wie man das mit
vertretbarem Aufwand an Hard- und Software (Assembler) bewerkstelligen
kann?

Viele Grüße
Markus

von peter dannegger (Gast)


Lesenswert?

Wenn ich das richtig verstehe, muß man die als 2*7 Matrix auslesen, ne
3*4 Matrix hätte 2 Pins gespart.


Peter

von Rahul (Gast)


Lesenswert?

Mal dir mal eine Tabelle mit den 8 Pins (1,2,6-12) in X-Richtung und den
Tasten in Y-Richtung auf.
Oder so:
1 und 2 als Spalten und 6-12 als Zeilen, und in die Kreuzungspunkte
schreibst du die Zahlen/Werte der Tasten.
Man braucht nur einen Port, wovon 2 Pins als Ausgänge schaltbar sein
sollten und 6 als fest als Eingang geschaltet sind.

von Markus Jung (Gast)


Lesenswert?

Hallo,

@Rahul:
Ich nehme an Du meinst eine Tabelle wie folgende:

Pin  1   2
 6  [0] [1]
 7  [2] [3]
 8  [4] [5]
 9  [6] [7]
10  [8] [9]
11  [^]
12  [v]

Damit hätte man zwei Ausgänge und sieben Eingänge. Passt leider nicht
mehr auf einen Port. Aber das macht mir nicht so viel aus.
Mir ist jetzt nur schleierhaft wie ich z.B. an Pin 6 unterscheiden kann
ob die Taste 0 oder 1 gedrückt wurde.

Viele Grüße
Markus

von Rahul (Gast)


Lesenswert?

Da hab ich mich wohl verzählt... (PeDa hatte Recht...)
Wenn du alle Pins ausser Pin 1 als Eingang (mit eingeschalteten
Pull-up-Widerstand) schaltest, und Pin 1 auf Low schaltest, kannst du
durch Abfrage deiner Eingänge feststellen, welche Taste gedrückt wurde.
Das Gleiche kannst du mit Pin 2 machen.
Pin 11 und 12 könnte man auch auf einen anderen Port legen...

von Winfried (Gast)


Lesenswert?

Du müsstest mal schauen, ob du Infos im Internet ergoogeln kannst, wie
man eine Tastaturmatrix scannt. In Kurzform eine Möglichkeit:
Zeilenleitungen sind Eingänge am Prozessor, die mit Pullup auf High
liegen. Spalten werden als Ausgänge betrieben und legen. Nacheinander
legst du eine Spalte auf Low und liest dann die Zeile ein. Dann nächste
Spalte auf 0 legen und Zeile einlesen. Auf 0 liegende Zeilenbits sind
gedrückte Tasten der aktuell auf Low gehaltenen Spalte.

Es bietet sich an, die ganze Tastenscannerei im Timerinterrrupt zu
erledigen. Z.B. 100-1000 mal pro Sekunde. Entprellen musst du auch
noch.

von Rahul (Gast)


Lesenswert?

In der Codesammlung gibt es zum Suchwort "Matrix" eine Lösung von
Peter Dannegger; allerdings für 8051er.

von Jens (Gast)


Lesenswert?

Hi zusammen,

ich weiss der Beitrag ist schon etwas älter... Ich stand vor dem selben
Problem wie Markus, allerdings habe ich eine Lösung gefunden wie man die
SAMWELL-Tastatur an einem 8-bit Port betreiben kann. Die Lösung ist
eigentlich ganz einfach. Man muss Pin 2 mit Pin 12 verbinden. Jetzt
wird sich der ein oder andere Fragen, wie das helfen soll? ;-)

Oben hat ja jemand gesagt die Tastatur ist als 2x7 angelegt. Das ist
natürlich nicht so ganz richtig. Genau genommen brauchen wir 1x7 und
1x5-Eingangspins.

Jemand meinte man könnte das Multiplexen. Stimmt!
Der Witz beim Multiplexen ist allerdings, dass man die
Ausgangsleitungen, wenn sie nicht aktiv sind durchaus auch als Eingang
benutzen kann! Damit kann man theoretisch 8x7 Kombinationen mit einem
Port darstellen, wenn man mal die Symmetrien ausser Acht lässt.
Das ganze bedeutet nun man nimmt sich zwei beliebige Port-Pins die
abwechselnd "aktiv" sind. Dabei bedeutet "aktiv", dass er als
Ausgang geschaltet und mit LOW-Level versehn wird. Die jeweils anderen
7 Pins des Ports werden als Eingang konfiguriert. (alle Port-Pins sind
noch mit Pullups auf HIGH gezogen) So, jetzt haben wir zwei Phasen bei
dem Multiplexen. Die Erste für die Zeichen 0,2,4,6,8, C hoch und C
runter und bei der zweiten Phase 1,3,5,7,9. (sie auch die Tabelle von
Markus!)

Nun zur Beschaltung:

RB0 <-  6. Pin
RB1 <-  7. Pin
RB2 <-  8. Pin
RB3 <-  9. Pin
RB4 <- 10. Pin
RB5 <- 11. Pin
RB6 <-> 2. Pin & 12. Pin
RB7 <-> 1. Pin

Und noch Pin 2 mit Pin 12 der Tastatur verbinden, damit lenken wir die
Ausgabe von Pin 12 auf Pin 2 um.
"<-" bedeutet der Portpin wird als Eingang benutzt und "<->"
bedeutet je nach Multiplex-Phase wird der Pin als ein oder Ausgang
benutzt. "->" wäre also ein Ausgang.

Damits etwas deutlicher wird, hier die beiden Phasen mal getrennt:

Multiplex Phase 1:

RB0 <-  Taste 0
RB1 <-  Taste 2
RB2 <-  Taste 4
RB3 <-  Taste 6
RB4 <-  Taste 8
RB5 <-  Cursor runter
RB6 <-  Cursor hoch
RB7  -> (LOW-Level)

Multiplex Phase 2:

RB0 <-  Taste 1
RB1 <-  Taste 3
RB2 <-  Taste 5
RB3 <-  Taste 7
RB4 <-  Taste 9
RB5 <-  (gibts nicht)
RB6  -> (LOW-Level)
RB7 <-  Cursor hoch

Also als Beispiel:
Wenn in Phase 2 an RB3 LOW anliegt wir die Taste 7 gedrückt,
und wenn man in Phase 1 an RB6 LOW hat, die Taste "Cursor hoch".

Für die Auswertung selbst reicht es RB0-5 auszuwerten, dass man in
Phase2 an RB7 den "Cursor hoch" sehen kann ist nur ein
Nebeneffekt...
Und weil wir gerade bei Nebeneffekten sind. Die "Cursor hoch"-Taste
darf nicht zusammen mit einer anderen Taste zusammen gedrückt werden,
sonst wäre das schlecht für das Ergebnis, wenn man "Cursor hoch"
drückt ist RB6&7 auf LOW und man kann da zB. die 0 nicht von der 1
unterscheiden...

Gruß,
Jens

PS: hoffentlich hat das jemand verstanden. hihi

von Rolf (Gast)


Lesenswert?

Jens, Du bist ein Genie! Danke für den Tip.

Rolf

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.