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
Wenn ich das richtig verstehe, muß man die als 2*7 Matrix auslesen, ne 3*4 Matrix hätte 2 Pins gespart. Peter
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.
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
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...
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.
In der Codesammlung gibt es zum Suchwort "Matrix" eine Lösung von Peter Dannegger; allerdings für 8051er.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.