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.
Meine 4x4 Tastatur habe ich über 470 Ohm Widerstände an einen ATMega32 angeschlossen und mit dem angehängtem BASCOM Programm getestet.
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 :/
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.