www.mikrocontroller.net

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


Autor: Jörg Heinze (Gast)
Datum:

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

Autor: Jürgen Berger (Gast)
Datum:

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

Autor: Jörg Heinze (Gast)
Datum:

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

Autor: Jens D. (Gast)
Datum:

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

Autor: Jörg Heinze (Gast)
Datum:

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

Autor: Jörg Heinze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe es gerade versucht:

A an PinD0
E an PinD1

funktioniert nicht. :-(

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

Autor: Jens D. (Gast)
Datum:

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

Autor: Jörg Heinze (Gast)
Datum:

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

Vielen Dank für das Angebot.

Autor: Hannes Lux (hannes)
Datum:

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

...

Autor: Jörg Heinze (Gast)
Datum:

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

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.