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
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
Danke für die schnelle Antwort. Aber bei dem Tastenfeld brauche ich doch irgenwie zwei unabhängige GNDs? Oder? Das ganze hat einen Matrixaufbau.
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
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?
ich habe es gerade versucht: A an PinD0 E an PinD1 funktioniert nicht. :-( Die Taste funktioniert nur, wenn ich E an GND lege.
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
Das wäre echt super, wenn ich den code bekommen könnte. :-) Vielen Dank für das Angebot.
> 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). ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.