Hallo Zusammen Ich habe eine 3x4 Matrix so wie ein Codeschloss. Wie kann ich diese am besten ansteuern? Bis jetzt habe ich immer nur immer einen Pin von Low zu High gezogen, kann mit dem Microcontroller auch zwei Pins verbinden und danach eine Aktion auslösen? z.B. Der Kontroler merkt wenn PD1 und PD2 zusammengeschalten sind. Meine Idee: Ich möchte über einen Mikrocontroller und dem KeyPad die Keys in Binärcode zu einem anderen Controler schicken (0000001, 00000010 etc) so kann ich muss ich anschliessend nur einen Pin am Hauptkontroller belegen. Stehe gerade ein wenig auf dem Schlauch... Danke für die Hilfe. Gruss Alain
ich weiß nicht genau was du damit meinst aber normalerweise macht man das so das man alle taster in der zeile verbindet dann hat man 4 leitungen und alle taster in einer spallte da bekommt man 3 leitungen dann macht man das so das die spallten oder zeilen eine nach der anderen eingeschalten wird und dann abgefragt wird welcher butten in dieser spalte/zeile gedrückt ist dann schaltet man die nächste zeile/spalte ein usw. mfG IchKG
Hallo Danke für Antwort. Dies ist mir schon klar! Nur: Wenn ich z.B. die einte Zeile auf Ground hänge, dann kann ich über die Spalten 4x ein Impuls auf einen Eingang geben. So wenn ich aber alle 3 Zeilen anschliessen möchte, dann haben die alle untereinander Verbindung. Wie kann man das gescheit machen?
ich glaub du hast meine lösung nicht ganz verstanden du schalltest einen pin vom µC ein der mit der ersten spalte verbunden ist wenn du dann einen taster drückst fließt der strom von der ersten spalte durch den taster auf die jeweilige zeile so weißt du in welcher taster gedrückt ist auch wenn alle gedrückt sind: nochmal du brauchst 4 eingänge und 3 ausgänge am µC du schaltest ausgang1 ein und schaust bei welchem eingang ein signal reinkommt wenn das erledigt ist schaltest du ausgang1 aus und ausgang2 ein und schaust wieder bei welchem eingang ein signal reinkommt usw. hab hier noch ein bild im anhang mfG IchKG
Ah Danke vielmals! So macht es sinn! Werde es gleich ausprobieren. Schöne Weihnachten!
Schau mal bei sprut - http://sprut.de/electronic/pic/programm/tastlcd/tastlcd.html. Da wird sogar noch das Display mit angeschlossen. Mach ich bei allen meinen Projekten so und funktioniert prima. Ist allerdings für PIC. Kann man aber sicher auch auf AVR anwenden.
Jau, da gibts viele Möglichkeiten. Z.B. liest man 2-mal ein, erst die Spalten, dann die Zeilen, hier ein Beispiel für ne 4*4 Matrix:
1 | #include <avr\io.h> |
2 | |
3 | typedef unsigned char u8; |
4 | typedef unsigned short u16; |
5 | #define NOP(); asm volatile("nop"::);
|
6 | |
7 | |
8 | #define KEY_PIN PINB
|
9 | #define KEY_PORT PORTB
|
10 | #define KEY_DDR DDRB
|
11 | |
12 | |
13 | u8 keyscan( void ) |
14 | {
|
15 | u8 col = 0, row = 0; |
16 | |
17 | KEY_PORT = 0xFF; |
18 | KEY_DDR = 0xF0; |
19 | KEY_PORT = 0x0F; |
20 | NOP(); // wait until input stable |
21 | if( ~KEY_PIN & 1<<0 ) |
22 | col = 4; |
23 | if( ~KEY_PIN & 1<<1 ) |
24 | col = 3; |
25 | if( ~KEY_PIN & 1<<2 ) |
26 | col = 2; |
27 | if( ~KEY_PIN & 1<<3 ) |
28 | col = 1; |
29 | row = col; |
30 | if( col ){ |
31 | KEY_PORT = 0xFF; |
32 | KEY_DDR = 0x0F; |
33 | KEY_PORT = 0xF0; |
34 | NOP(); |
35 | if( ~KEY_PIN & 1<<4 ) |
36 | row = 5; |
37 | if( ~KEY_PIN & 1<<5 ) |
38 | row = 9; |
39 | if( ~KEY_PIN & 1<<6 ) |
40 | row = 13; |
41 | if( ~KEY_PIN & 1<<7 ) |
42 | row = 17; |
43 | } // 0 = no key |
44 | return row - col; // 1..16 = key |
45 | }
|
Wichtig ist, daß man die Pullups benutzt und die Ausgänge nur low, also über das Direction-Register, sonst gibts Datenkämpfe, wenn man mehrere Tasten gleichzeitig drückt. Oder über einen Pin und Widerstände: Beitrag "Tastenmatrix auslesen über nur 2 Leitungen" Peter
Hallo Leute! Habe es geschafft die Matrix anzusteuern! Jetzt habe ich mal für jede Taste eine Frequenz erzeugt. Nun möchte ich die Frequenz mit einem anderen Controller erfassen. Dies werde ich jetzt versuchen und mich gegebenenfalls melden. Gruss Alain
schön das du ne lösung gefunden hast aber: hast du auch schon dran gedacht was passiert wenn mehrere taster gleichzeitig gedrückt werden? mfG IchKG
Hallo IchKG, Ja es bleibt bei der ersten hängen! es hat ja while schleifen! Oder es wird die Taste genommen, welche zuerst gedrückt wird. Falls du meinst dass man Tastenkombinationen machen könnte, dies ist nicht vorgesehen. So wie Taste 1+2 für Menüaufruf etc. Gruss Alain
Ich mein das der Benutzter gleichzeitig 2 Tasten drückt ob da dein µC drauf vorbereitet ist und hier eigentlich entscheiden muss welche er nehmen soll und sich dabei nicht aufhängt
Nein das passiert nicht, da ich das Programm über einen seperaten Mega laufen lasse. Der Hauptmega mit dem eigentlichen Programm wird dannach anhand der Frequenz die Taste zuweisen. Gruss Alain
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.