mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik matrix keypad einlesen


Autor: Dante (Gast)
Datum:
Angehängte Dateien:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreib einfach:
  ...
  column = P2 | 0xF0;
  ...

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:
void InitKeyboard( void )
{
  ...
  PORTA &= 0xF8;
  ...
}


uchar GetKey( void )
{
  ...
    DDRA &= 0x07;
    DDRA |= ~ROW[i];      
  ...


Peter

Autor: Dante (Gast)
Datum:

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

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.