Forum: Mikrocontroller und Digitale Elektronik matrix keypad einlesen


von Dante (Gast)


Angehängte Dateien:

Lesenswert?

Hallo.
Habe mir mal den Code von Peter( Datei im Anhang) angeschaut. Und er
gefällt mir sehr gut, da er sehr kompakt ist. Bin jetzt gerade dabei
diesen zu verstehen und für mich umzusetzen. Da ich eigentlich die
Abfragen zu der Flanke und mehrere gedrückter Tasten nicht brauche,
kann ich sie eigentlich weglassen, aber man kann ja drauf aufbauen. Ab
und zu vielleicht doch sehr hilfreich!

Da ich mich ein wenig schwer tue den Code richtig zu verstehen(
hinsichtlich der ganzen Verknüpfungen) habe ich Angst mir meinen
atmega128 zu zerschiessen wenn ich im Code rumpfusche.

Ich habe ein 4*3 Matrix-Tastatur und möchte diese an einen Port hängen.

Brauche ich da nur P2(column) auf P0.3-P0.6 zu definieren?

Und wie muß der Port jetzt aktiviert werden. Als Ausgang/Eingang,
mit/ohne pull-up?

Ich danke schon jetzt einmal für eure Hilfe.
;-)

von Peter D. (peda)


Lesenswert?

Schreib einfach:
1
  ...
2
  column = P2 | 0xF0;
3
  ...

Damit bleiben die unbenutzten oberen 4 Pins von P2 konstant high, d.h.
werden nie als gedrückt ausgewertet.
Bzw. anstatt P2 muß beim AVR PINC stehen oder welchen Port Du eben
benutzt.


Beim AVR gibt es aber noch eine Besonderheit, die Ports sind nicht open
drain.
Kann man aber simulieren, indem man den Port einmalig auf 0 setzt und
dann nur die Direction umschaltet:
1
void InitKeyboard( void )
2
{
3
  ...
4
  PORTA &= 0xF8;
5
  ...
6
}
7
8
9
uchar GetKey( void )
10
{
11
  ...
12
    DDRA &= 0x07;
13
    DDRA |= ~ROW[i];      
14
  ...


Peter

von Dante (Gast)


Lesenswert?

@Peter:

Danke!!
Das werde ich am Montag gleich mal ausprobieren. Sorry, daß ich 'nur'
nachfrage statt selber zu verstehen. Aber dafür ist der Code doch
ziemlich anspruchsvoll, zumindest für mich, um da mal eben so auf die
schnelle durchzusteigen. Dafür fehlt mir im Mom die Zeit, aber das
werde ich auf jeden Fall nachholen. Denn deine Tastenabfrgae samt
Entprellung benötigt wirklich nicht viel zeit(ich habe nix schnelleres
gefunden im netz)!
Eine Frage noch (und bestimmt nicht die letzte...;-)):
Damit ich das ganze für mich noch schneller machen kann, brauche ich
doch in der zweiten for-Schleife j nur bis 3 (j<4) zählen lassen.
Und bei der Berechnung von key_nr brauche ich auch nur von 4 Zeilen
auszugehen (bringt aber eigentlich keine Zeitersparnis, ich dummerchen,
ist ja nur ne Rechnung..;-))?

Danke für deine schnelle Hilfe, gibst gute Ratschläge

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.