-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: 4x3 matrix tastatur abfragen in C!

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    26.03.2006
    Beiträge
    78

    4x3 matrix tastatur abfragen in C!

    Anzeige

    hallo...
    kann mir jemand auf die sprünge helfen, nämlich wie fragt man eine 4x3 matrix tastatur ab mit ziffernauswertung damit ich die gedrückten tasten auf ein lcd display anzeigen kann.
    weiters weiss ich nicht ob ich mit polling od. es mit den interrupt's angehen muss?
    wie löse ich das problem mit dem tasterprellen.
    bin in c-noch ein anfänger.
    liegt vielleicht irgendwo ein code herum, zum abfragen einer 4x3 matrix tastatur mit auswertung...
    ich verwende das AVR studio in kombination mit winAVR
    danke papua

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    26.09.2008
    Ort
    Wien
    Alter
    31
    Beiträge
    94
    Hallo,

    erstmal eine Frage: Groß- Kleinschreibung ist ein Begriff?

    Tipp von meiner Seite: Besorg dir das Buch "Roboter selbst gebaut" von Ulli Sommer, da hast du genau deine Fragen beschrieben.
    Die Matrixauswertung machst du am einfachsten mit einfachen Widerständen in Serie die sich addieren. Dann brauchst du nur einen A/D-Wandler Anschluss, greifst die anliegende Spannung ab, und schaust anhand einer Referenz (die du natürlich zuerst anlegen musst - durch einfaches ausprobieren und Werte zuweisen) nach, welche Taste gedrückt wurde.

    Auch die Frage mit der Entprellung wird im Buch gelöst: Einfach den Tastenwert öfters hintereinander abfragen, um sicherzugehen, dass die Taste tatsächlich gedrückt wurde.
    while (!asleep()) sheep++;
    RP6 und Asuro Befehlsübersicht

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.11.2004
    Ort
    Hvalstad, Norwegen
    Beiträge
    140

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Ich hab das bei einer 4x4 Matrixtastatur so gemacht, das ich auf jeweils einer Spalte über einen Controllerport ein "low" ausgegeben habe.
    In den Zeileh hab ich dann die Ports abgefragt, welche Spalte - oder auch keine - Ein "low" anliegen hat.
    Danach wurde die aktuelle Spalte wieder auf "high" gelegt und an die nächste wieder ein "low" angeschaltet.
    An die Spalten Eingänge sollten Pullups angeschaltet werden, wenn die Verbindungen zum Controller kurz sind, kann man auch die internen des Controllers verwenden.

    Durch die Abfrage wird dann eine Variable beschrieben, die sinnvollerweise dem Wert der gedrückten Taste entspricht.
    Danach wird eine kurze Zeit gewartet delay_ms(10); und das gleiche Spielchen mit einer anderen Variable wiederholt.

    Danach vergleicht man beide Variablen.
    Sind sie gleich kann man davon ausgehen, das auch wirklich die entsprechende Taste gedrückt wurde. Somit wäre auch die Entprellung erledigt.

    Eventuell muß man nach dem Umschalten der Zeilen- Leitung ein wenig warten, bis sich die parasitären Kapazitäten umgeladen haben um korrekte Ergebnisse zu erhalten.
    Das kann man mit #asm("NOP"); oder dely_us(x); machen.

    Ich bin der Meinung, das für eine Tastaturabfrage das Polling schnell genug ist, wenn es im Hauptprogramm oft genug ausgeführt wird.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    26.03.2006
    Beiträge
    78
    super Erklärung,....
    verstehe es jetzt...
    vG Papua

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    26.03.2006
    Beiträge
    78
    danke nochmals....
    frage: Hast du zufällig den Code noch?
    vG Papua

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Eine Frage @wkrug:

    Bei Deiner Methode besteht aber das Problem, dass man beim Drücken von 2 Tasten in der selben Reihe einen Kurzschluss verursacht, korrekt?

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    26.03.2006
    Beiträge
    78
    %...ja, das stimmt, aber wie löse ich dann das Problem....?
    Gibt's da nicht schon eine Header-Datei.....?
    Danke
    Papua

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Bei Deiner Methode besteht aber das Problem, dass man beim Drücken von 2 Tasten in der selben Reihe einen Kurzschluss verursacht, korrekt?
    Wenn ich das genau überlege hast Du recht.
    Da muss ich an meine Soft wohl noch mal ran.
    Ich geb GND Potential auf eine Spalte, eine andere führt +5V.
    Werden dann 2 Tasten in der selben Zeile gleichzeitig gedrückt kommt es zu einem Kurzschluß.
    Das könnte man aber verhindern, indem man an die Spaltenausgänge des Controllers Dioden in Richtung Port schaltet.
    Dadurch wird verhindert, das aus dem Port der auf +5V hängt ein Stromfluß in Richtung GND möglich ist.

    Ein Widerstand am Port Ausgang ~220Ohm sollte das Problem auch effektiv verhindern.

    Die Zeilen werden ja durch den Pullup ohnehin auf +5V gehalten.

    Eine Softwaremässige Lösung wäre nur das DDR Register des entsprechenden Ports auf Output zu schalten und alle anderen Spalten als Input zu definieren.
    Dadurch würden alle inaktiven Ports hochohmig und können kein Problem mehr verursachen.

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Oder Einfach alle auf Eingang schalten, mit PullUp, und nur eine Reihe auf Ausgang?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •