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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.