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.
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
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.
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.
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.
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.
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.
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.
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
@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 :/