Forum: Mikrocontroller und Digitale Elektronik Keymap 4*4 Matrix am atmega8


von Jan (Gast)


Angehängte Dateien:

Lesenswert?

Hey,
da ich einen umrechner bauen wollte, inklusive Display und keymap,
habe ich mir nun aus ebay eine 4*4 Keymap bestellt.
Diese hat 8 Anschlüsse 4 für die y-Reihe und 4 für die x-Reihe,
ich habe mir also Gedanken gemacht wie ich das Teil nun am Avr 
anschließen kann.
Denn wenn ich 4  ports auf high setze und 4 Pins auf low, weiß der 
Atmega dann ja nicht welchen von 4 schaltern einer Reihe ich gedrückt 
habe.
So nun habe ich ne Zeichnung erstellt, könnt Ihr mir sagen ob das so 
geht? Und werden die internen Pull ups immer aktiviert wenn ich die Pins 
auf low setze?
Habe davor jetzt einfach mal einen 10k Widerstand.
Und ja das Tutorial habe ich gelesen weiß aber nicht wirklich wie ich es 
hier anwenden kann.
MfG und wie immer besten Dank :)

K1-K3 sind 3 Schalter. merke grade das ich die Basis mt dem emmitter am 
Transistor vertauscht habe :) einfach gedanken mäßig ändern :) sorry!
Und naja wenn es klappt kann ich ja ne einfache abfrage machen,
heißt grob: "wenn PB0&PD7=1 dann gebe 1 aus, wenn PB0&PD6 dann gebe 2 
aus" usw.

von Jan (Gast)


Lesenswert?

ah und den basis widerstand habe ich auch vergessen^^,
wenn ich da jetzt noch dne basis widerstand hinzufüge sind die 10k dann 
nicht zu viel für den pull up?
MfG

von Mikel (Gast)


Lesenswert?

Normal verbindest du einfach die 8 Pins mit einem Port vom Atmega, ohne 
irgendwas dazwischen. 4 werden als eingang geschaltet die anderen 4 als 
ausgang, durch geschicktes anlegen der signale, bekommst du dann raus 
welche taste gedrückt sind, als pullup kannst du die internen 
widerstände verwenden.

von Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite


Angehängte Dateien:

Lesenswert?

Meine 4x4 Tastatur habe ich über 470 Ohm Widerstände an einen ATMega32
angeschlossen und mit dem angehängtem BASCOM Programm getestet.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Jan schrieb:
> Diese hat 8 Anschlüsse 4 für die y-Reihe und 4 für die x-Reihe,

Hallo! Ich geh jetzt mal nicht auf den Schaltplan ein, ich glaub, es war 
schon spät. :-)

Wen ich dich richtig verstehe, hat die Tastatur keine aktiven Bauteile, 
sondern intern nur die 16 reinen Schalter. Angeschlossen hab ich sowas 
selbst noch nicht, aber ich würd Tasten matrixartig abfragen:

Nacheinander an jede Zeile ein High anlegen und "schauen", welche der 
vier Spalten dieses High zurückliefert. Beispiel:

PB0 out ----+---+---+---+
PB1 out ----+---+---+---+
PB2 out ----+---+---+---+
PB3 out ----+---+---+---+
            |   |   |   |
            |   |   |   |
           in  in  in  in
           PC0 PC1 PC2 PC3

Am besten läufts, wenn du dazu einen Timer-Interrupt verwendest.
Zwischen die einzelnen PBx-Ausgänge und die Tastatur jeweils einen 
Widerstand einbauen (1 bis 4,7 kOhm), sonst kanns Ärger geben, wenn du 
übereinander liegende Tasten gleichzeitig drückst.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Markus W. schrieb:
> Nacheinander an jede Zeile ein High anlegen und "schauen", welche der
> vier Spalten dieses High zurückliefert.

Da die Megas ja interne Pullups haben, ist es vllt. praktischer, die 
Logik umzudrehen. Also nacheinander ein 'Low' durch die Spalten wandern 
lassen und schauen, welche Zeile auf low gezogen ist. Das zusammensetzen 
des Spaltenzählers und des Zeilenergebnisses liefert dir den Tastencode.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Matthias Sch. schrieb:
> Da die Megas ja interne Pullups haben, ist es vllt. praktischer, die
> Logik umzudrehen. Also nacheinander ein 'Low' durch die Spalten wandern
> lassen und schauen, welche Zeile auf low gezogen ist. Das zusammensetzen
> des Spaltenzählers und des Zeilenergebnisses liefert dir den Tastencode.


Stimmt! Danke, hatte ich übersehen.

von Mikel (Gast)


Lesenswert?

Wenn man es richtig programmiert, brauch man keinerlei Widerstände oder 
sonstige Beschaltung, es kommt dann zu keinerlei Kürzschlüssen auch beim 
drücken von mehreren Tasten.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Nun, da gibt es natürlich mehrere Strategien:
* Du brichst bei der ersten erkannten Taste ab, meldest einen 
Tastendruck ( Vom Scan/Timer Interrupt) und lieferst den Keycode.

* Du schiebst die erkannte Taste in einen FIFO-Stapel, meldest den 
Tastendruck und scannst weiter. Hauptprogramm arbeitet den Stapel ab.

* Du packst sämtliche erkannten Tasten in ein Bitfeld ( das ist beim 
8051 sehr praktisch) und vergleichst beim nächsten Scan Tasten und 
Bitfeld. Das ermöglicht ein 'N-Key Rollover' und solche Sachen wie bei 
der PC-Tastatur, a la 'Sende eine neu gedrückte Taste' und 'sende eine 
gerade losgelassene Taste'.
Das führt bei einem 4x4 Keypad wahrscheinlich zu weit, hehehe.

von Peter D. (peda)


Lesenswert?

Du scheinst erhebliche Probleme mit Elektronikgrundlagen zu haben.
Die Transistoren sind nicht nur überflüssig, sondern auch vollkommen 
unsinnig verschaltet. Ein npn mit Basis an GND sperrt immmer.

Ein Signal an einen Pin reicht völlig. Du mußt nicht PB0, PD5..7 
miteinander kurzschließen.

Ansonsten, für 4x4 Matrix gibt es schon haufenweise funktionierende 
Lösungen, z.B.:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=519870#519870


Peter

von Jan (Gast)


Lesenswert?

@albert m. Ja das ist die keymap genau die habe ich auch :),
leider wollte ich aber in c programmieren.

@Peter dannegger Sie sind nicht an GND angeschloßen ich weiß das habe 
ich doof gezeichnet habe aber keine Stromquelle im Programm gefunden.

@Alle anderen, danke für eure Hilfe :)
Leider ist das mit den interups noch zu kompliziert für mich,
ich fange grade erst an und naja bisher habe ich einen funktionierenden 
LED-Cube geplannt, gebaut und über c programmiert.
Und halt das Display wobei ich hier einen fremden Bauplan genommen habe 
der mir ziemlich sicher schien.
Naja aber er funktioniert das was ich bisher damit gemacht habe waren 
Wörter in Strings auszugeben und über die sprintf funktion einen integer 
dauerhaft über die while schleife zu addieren.

Ihr seht so viel kann ich einfach noch nicht, ich suche mir aber 
Projekte aus die immer ein bisschen komplizierter sind damit ich dazu 
lerne,
und so wie jetzt habe ich nach einen weg gesucht ohne einen interupt,

Den das große Problem ist einfach das in Tutorials einfach zu viel mit 
Fachwörtern rum geschmissen wird da kann ein Anfänger nicht viel 
verstehen :/

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.