www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik keypad matrix


Autor: Alain F. (fox82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Markus L_______ (ichkg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Alain F. (fox82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Markus L_______ (ichkg)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Alain F. (fox82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah Danke vielmals! So macht es sinn!

Werde es gleich ausprobieren.

Schöne Weihnachten!

Autor: Sven Stefan (stepp64) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
#include <avr\io.h>

typedef unsigned char  u8;
typedef unsigned short u16;
#define NOP();  asm volatile("nop"::);


#define KEY_PIN         PINB
#define KEY_PORT        PORTB
#define KEY_DDR         DDRB


u8 keyscan( void )
{
  u8 col = 0, row = 0;

  KEY_PORT = 0xFF;
  KEY_DDR = 0xF0;
  KEY_PORT = 0x0F;
  NOP();                        // wait until input stable
  if( ~KEY_PIN & 1<<0 )
    col = 4;
  if( ~KEY_PIN & 1<<1 )
    col = 3;
  if( ~KEY_PIN & 1<<2 )
    col = 2;
  if( ~KEY_PIN & 1<<3 )
    col = 1;
  row = col;
  if( col ){
    KEY_PORT = 0xFF;
    KEY_DDR = 0x0F;
    KEY_PORT = 0xF0;
    NOP();
    if( ~KEY_PIN & 1<<4 )
      row = 5;
    if( ~KEY_PIN & 1<<5 )
      row = 9;
    if( ~KEY_PIN & 1<<6 )
      row = 13;
    if( ~KEY_PIN & 1<<7 )
      row = 17;
  }                             // 0 = no key
  return row - col;             // 1..16 = key
}

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Siehe AVR-AppNotes AVR249, AVR242, AVR243, AVR245

MfG Spess

Autor: Alain F. (fox82)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Markus L_______ (ichkg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Alain F. (fox82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Markus L_______ (ichkg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Alain F. (fox82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.