Forum: Mikrocontroller und Digitale Elektronik wie 8-Tastenfeld an AVR? Anfänger


von Jörg Heinze (Gast)


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

von Jürgen Berger (Gast)


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

von Jörg Heinze (Gast)


Lesenswert?

Danke für die schnelle Antwort.

Aber bei dem Tastenfeld brauche ich doch irgenwie zwei unabhängige
GNDs? Oder?
Das ganze hat einen Matrixaufbau.

von Jens D. (Gast)


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

von Jörg Heinze (Gast)


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?

von Jörg Heinze (Gast)


Lesenswert?

ich habe es gerade versucht:

A an PinD0
E an PinD1

funktioniert nicht. :-(

Die Taste funktioniert nur, wenn ich E an GND lege.

von Jens D. (Gast)


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

von Jörg Heinze (Gast)


Lesenswert?

Das wäre echt super, wenn ich den code bekommen könnte. :-)

Vielen Dank für das Angebot.

von Hannes L. (hannes)


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).

...

von Jörg Heinze (Gast)


Lesenswert?

Danke für den Tip - aber leider versteh ich nur die Hälfte davon. ;-)

Das muß ich mir mal in Ruhe anschauen.

Trotzdem danke.

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.