wie 8-Tastenfeld an AVR? Anfänger

Gast #258620
Lesenswert?

Hallo,

ich möchte ein 8-Tastenfeld (PKM-8) an einen AVR (ATmega8)
anschliessen. Ich habe aber keine Ahnung wie.

Ich besitze das STK-500 und habe bisher immer die Taster auf dem Board
benutzt.

Ich möchte das Tastenfeld an die D-Ports anschliessen. Muß ich dazu die
internen Pull-Up-Widerstände aktivieren? Mit welchem Befehl geht das?
Ich habe "ldi PORTD,$ff" versucht, der funktioniert aber nicht.
Wie muss ich das Feld extern beschalten? Brauch ich eine extra 5V
Versorgung?

Wäre echt super, wenn ihr mir weiterhelfen könntet.

Gruß
Jörg
Gast #258621
Lesenswert?

Hallo,
eigentlich brauchst du nur GND als
gemeinsammen für alle Taster. Die
Pullups sind schon auf dem Board verbaut.

AVR Pullups lassen sich durch

ldi temp,0xFF
out PORTD, temp

aktivieren


Gruß
Jürgen
Gast #258623
Lesenswert?

Hallo
Nein, du brauchst nur 5 Port Pins

A -- 1 -- 2
     |    |
B -- 3 -- 4
     |    |
C -- 5 -- 6
     |    |
D -- 7 -- 8
     |    |
     E -- E

dann musst du "scannen"
ist A mit E zusammen ist taste 1 gedrueck und so weiter

Gruss Jens
Gast #258624
Lesenswert?

aber A mit E könnte doch auch Taste 2 sein.

Brauche ich da nicht 6 Pins?

A -- 1 -- 2
     |    |
B -- 3 -- 4
     |    |
C -- 5 -- 6
     |    |
D -- 7 -- 8
     |    |
     E -- F

und dann schaue ich A-E = Taste 1 oder A-F = Taste 2?
Gast #258626
Lesenswert?

verzeihung stimmt 6 Pins

Du musst E auf 1 legen (ueber den portpin)
dann liesst du A B C D ein
Dann setzt du F auf 1
und liesst du A B C D ein

ob du erlauben willst, dass 2 tasten zu gleich gedrueckt werden kannst
du dann per software realisieren.

Ich würde evtl A B C D E F auf 1 legen und über eine 6 Dioden auf einen
Int eingang gehen, dann sparst du dir das ewige scannen und bekommst
gleich mit, wenn eine taste gedrueckt wurde.
wurde eine gedrueckt alles auf 0 bis auf A
dann liesst du E und F ein
und so weiter

Ich hab zu hause einen Code dafuer (3x3 tasten)

den kann ich dir dann mal geben

Gruss
#258628
Lesenswert?

> Ich würde evtl A B C D E F auf 1 legen und über eine 6 Dioden auf
> einen
> Int eingang gehen, dann sparst du dir das ewige scannen und bekommst
> gleich mit, wenn eine taste gedrueckt wurde.

...und fängst dir alle möglichen Störungen ein, die es nur irgendwie
gibt. Außerdem liest du nur Unsinn ein, weil die Tasten prellen.

Setze lieber in einem Timer-Interrupt (etwa 10ms) den jeweiligen Pin
auf GND und lies den Port ein, dann die andere Spalte der Matrix. Wenn
du die Pins sinnvoll anordnest, kannst du (mittels SWAP und OR) beide
Eingaben zu einem Byte vereinen, welches du dann mit Peter Danneggers
Entprellroutine (Codesammlung bzw. Artikelsammlung) entprellen kannst,
als käme es von parallelen Tastern.

Besser, einfacher, billiger und sorgloser geht es nicht. Denn die
Entprellroutine stellt dem Hauptprogramm je Taster zwei Flags zur
Verfügung, das eine zeigt den (entprellten) Tastenzustand, das andere
zeigt an, dass noch ein Tastendruck abgearbeitet werden muss.

Vergiss also ein für alle male den externen Interrupt für mechanische
Taster (außer zum Aufwecken aus dem Power-Down-Mode).

...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren