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. ;-)
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
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.