Hallo, als erstes möchte ich erstmal sagen, dass ich bei Google schon geuscht habe. Finde nur codes für PICs. Ich such einen Schaltplan + Beispiel-Programm für einen Atmega(32) zu einer 4x4-Matrix. (am besten mit softwareseitiger entprellung) Es soll ich möglich sein, dass man mehrere Tasten auf einmal drücken kann, ohne dass irgendwie ein Kurzschluss oder so entsteht. Falls jemand so etwas hat, würde ich mich sehr über einen Link oder ähnliches freuen. Mfg Simon
Google ist gut, aber uch hier gibt es eine Suchfunktion. Beitrag "Tasten-Matrix entprellen" Beitrag "Matrixtastatur am AVR"
danke. das ist jetzt in C, gibts das noch wo in Basic? Und noch was: PB4 PB5 PB6 PB7 | | | | | | | | PB0----T-----T-----T-----T--10k--VCC | | | | PB1----T-----T-----T-----T--10k--VCC | | | | PB2----T-----T-----T-----T--10k--VCC | | | | PB3----T-----T-----T-----T--10k--VCC ist ja so, dass PB4-PB7 jeweils als ausgang konfiguriert werden, wenn man die Spalte abfragen will. Könnte man das auch so machen, dass die PB4-PC7 immer Eingang bleiben? Also dass man dann, wenn man z.B. den ersten Taster drückt, ein High an PB0 und PB4 hätte. Wenn ja, wie? Ich steh grad voll aufm Schlauch
Die Dioden sollte man nicht vergessen, wenn mehrere gleichzeitig gedrückte Tasten nicht zu Geistertasten führen sollen: pro Schalter eine Diode in Serie. Ohne Diode sollte man immer nur einen Ausgang nach dem anderen als Ausgang aktivieren, weil's sonst ein Kurzen bei gleichzeitig aktiven Schaltern geben kann.
Simon Hat einen nick wrote: > Hallo, > > als erstes möchte ich erstmal sagen, dass ich bei Google schon geuscht > habe. > Finde nur codes für PICs. > > Ich such einen Schaltplan + Beispiel-Programm für einen Atmega(32) zu > einer 4x4-Matrix. (am besten mit softwareseitiger entprellung) Bei www.atmel.com gibt es kostenlos eine Sammlung mit AppNotes. Da ist auch eine dabei, die den Anschluss von einer Matrix-Tastatur 4x4 und einer mehrstelligen Ziffernanzeige an einem einzigen 8-Bit-Port beschreibt. Dein Projekt mit einem dreistelligem (oder auch 6-stelligem) Taschenrechner ist daher durchaus auf einem Tiny2313 oder Mega48 realisierbar. Als externe Hardware werden außer den Tasten und 7-Segment-Displays (mit Segmentwiderständen) nur ein paar Transistoren als Digit-Treiber benötigt. > > Es soll ich möglich sein, dass man mehrere Tasten auf einmal drücken > kann, ohne dass irgendwie ein Kurzschluss oder so entsteht. Man drückt auf einem Taschenrechner nicht mehrere Tasten zugleich. Und bei ordentlicher Software stört versehentliches Drücken mehrerer Tasten auch nicht weiter. > > Falls jemand so etwas hat, würde ich mich sehr über einen Link oder > ähnliches freuen. > > Mfg Simon ...
Danke für die Posts. Jetzt verstehe ich es auch. Ich war nur iritiert, weil man bei dem Beispiel hier immer einen Port als Ausgang schalten muss. PB4 PB5 PB6 PB7 | | | | | | | | PB0----T-----T-----T-----T--10k--VCC | | | | PB1----T-----T-----T-----T--10k--VCC | | | | PB2----T-----T-----T-----T--10k--VCC | | | | PB3----T-----T-----T-----T--10k--VCC Und in der Datei http://www.mikrocontroller.net/attachment/353/matrix.txt steht noch: "T" bedeutet, dass die kreuzenden Leitungen über einen Taster verbunden sind. Wie soll ich an einen Schalter 4 Leitungen löten?
Simon Hat einen nick wrote: > danke. > das ist jetzt in C, gibts das noch wo in Basic? > > > Und noch was: > > PB4 PB5 PB6 PB7 > | | | | > | | | | > PB0----T-----T-----T-----T--10k--VCC > | | | | > PB1----T-----T-----T-----T--10k--VCC > | | | | > PB2----T-----T-----T-----T--10k--VCC > | | | | > PB3----T-----T-----T-----T--10k--VCC > > > ist ja so, dass PB4-PB7 jeweils als ausgang konfiguriert werden, wenn > man die Spalte abfragen will. > Könnte man das auch so machen, dass die PB4-PC7 immer Eingang bleiben? > Also dass man dann, wenn man z.B. den ersten Taster drückt, ein High an > PB0 und PB4 hätte. Nein. Du hast noch nicht kapiert wie (im Grunde eigentlich simpel) das ganze funktioniert. Ich ersetze mal die T (für Taster) in der Matrix mit Kleinbuchstaben, damit ich einzelne Tasten ansprechen kann: PB4 PB5 PB6 PB7 | | | | | | | | PB0----a-----b-----c-----d--10k--VCC | | | | PB1----e-----f-----g-----h--10k--VCC | | | | PB2----i-----j-----k-----l--10k--VCC | | | | PB3----m-----n-----o-----p--10k--VCC Was ist der Grundzustand? Also wenn keine Taste gedrückt ist. Durch den Vcc Anschluss, über den Widerstand wird jede Zeile auf einer 1 gehalten. D.h. an PB0, PB1, PB2, PB3 wird jeweils eine 1 auftauchen und zwar unabhängig davon was an den Ausgängen PB4, PB5, PB6, PB7 für ein Potential ausgegeben wird. Denn: Es ist ja kein Taster geschlossen. Jetzt drück einfach mal den Taster k und es wird angefangen die Matrix abzuscannen: PB4 wird auf Ausgang geschaltet und eine 0 ausgegeben. Da keiner der Taster a, e, i, m gedrückt ist, gibt es auch keine Verbindung von PB4 nach PB0, PB1, PB2 oder PB3. D.h. dort wird weiterhin jeweils eine 1 eingelesen. PB4 wieder auf Eingang schalten, damit er hochohmig wird und den weiteren Scanverlauf nicht stört. PB5 wird auf Ausgang geschaltet und eine 0 ausgegeben. Auch hier: keiner der Taster b, f, j, n ist gedrückt. Damit gibt es auch keine Beeinflussung von dieser Spalte zu den Zeilen und PB0, 1, 2, 3 stehen auf 1 PB5 wieder auf Eingang (hochohmig) PB6 auf Ausgang schalten und eine 0 ausgeben. Diesmal gibt es einen gedrückten Taster, nämlich k. Der stellt eine Verbindung von PB6 zu PB2 her und damit wird die Leitung PB2 auf 0 Potential gezogen (der 10k Widerstand sorgt dafür, dass es keinen Kurz- schluss gibt, den der versucht ja die Leitung auf Vcc zu halten. Kann er aber nicht) Also wird in dieser Konfiguration auf den Eingängen PB0, PB1 und PB3 auf 1 stehen und PB2 auf 0 sein. PB6 wieder auf Eingang PB7 aus Ausgang und eine 0 ausgeben. Da in dieser Spalte kein Taster gedrückt ist, lesen PB0, 1, 2, 3 wieder jeweils eine 1 ein. Jetzt muss das ganze nur noch ausgewertet werden. Über die Kombination, dass PB2 zu 0 wurde, wenn PB6 die 0 vorgab, ergibt sich dann dass Taster k gedrückt gewesen sein muss. Viel Spass bei der Umsetzung in BASIC.
danke für die Erklärung. Jetzt hab ichs verstanden. Kann ich die 10k WIderstände auch durch 100k ersetzen? Habe keine 10er da.
Simon Hat einen nick wrote: > > danke für die Erklärung. Jetzt hab ichs verstanden. > > Kann ich die 10k WIderstände auch durch 100k ersetzen? Habe keine 10er > da. Ja, kannst du.
dann noch 1 frage: wie muss ich die 3 bzw. 4 kabel, die an jeden schalter kommen verbinden? welche kommen an Pin 1, welche an Pin2? Ich blicks grad echt überhaupt nicht
hättest du auf den link geklickt hättest du die fette zeichnung in farbe gesehen
Probiers einfach aus: Der Taster muss eine Verbindung zwischen der Spalte und der Zeile machen, wenn der Taster gedrückt ist. Jetzt nimmst du dein Multimeter in der Stellung Widerstandsmesser (manche haben auch einen Durchgangs- prüfer der piepst) und probierst aus bei welchen 2 Beinchen es der Fall ist, dass es einen Durchgang gibt (der Widerstand also 0 Ohm beträgt) wenn der Taster gedrückt wird. Das eine Beinchen kommt dann an die Spalte, das andere an die Zeile.
>Ich steh grad voll aufm Schlauch.
Kommst du da auch noch mal runter?
Liest dir mal alles noch einmal durch, alle Postst und alle Links.
Karl heinz Buchegger wrote: > Probiers einfach aus: > Der Taster muss eine Verbindung zwischen der Spalte und > der Zeile machen, wenn der Taster gedrückt ist. > > Jetzt nimmst du dein Multimeter in der Stellung > Widerstandsmesser (manche haben auch einen Durchgangs- > prüfer der piepst) und probierst aus bei welchen > 2 Beinchen es der Fall ist, dass es einen Durchgang > gibt (der Widerstand also 0 Ohm beträgt) wenn der > Taster gedrückt wird. > > Das eine Beinchen kommt dann an die Spalte, das andere > an die Zeile. Ach ja: Zeile und Spalte sind jeweils einfach nur ein Draht, der von einem Taster zum nächsten durchgeschleift wird. Also: PB0 -> Draht -> Beinchen vom Taster 'a' -> Draht -> Beinchem vom Taster 'b' -> Draht -> Beinchem vom Taster 'c' -> Draht -> Beinchem vom Taster 'd' -> Widerstand -> Vcc PB4 -> Draht -> das andere Beinchem vom Taster 'a' -> Draht -> das andere Beinchem vom Taster 'e' -> Draht -> das andere Beinchem vom Taster 'i' -> Draht -> das andere Beinchem vom Taster 'm' Uff. Soll ich das ganze jetzt auch noch aufbauen und ein Photo machen?
AVR wrote: > hättest du auf den link geklickt hättest du die fette zeichnung in farbe > gesehen hab ich, aber die zeichnung hab ich dann wohl übersehen. liegt wohl daran, dass ich jetzt schon seit gestern morgen um 9 wach bin... >>Ich steh grad voll aufm Schlauch. >Kommst du da auch noch mal runter? ich hoffs doch... >Liest dir mal alles noch einmal durch, alle Postst und alle Links. OK >Das eine Beinchen kommt dann an die Spalte, das andere >an die Zeile. das wollte ich hören. Danke! >Uff. >Soll ich das ganze jetzt auch noch aufbauen und ein Photo machen? Nein, das brauchst du nicht ;-) Ich geh jetzt ne Runde pennen, dann müsste das schon klappen.
http://bascom-forum.de/index.php?action=dlattach;topic=10.0;attach=143;image auf dem Bild hier sind keine WIderstände an der Matrix. >Also: PB0 -> Draht -> Beinchen vom Taster 'a' -> > Draht -> Beinchem vom Taster 'b' -> > Draht -> Beinchem vom Taster 'c' -> > Draht -> Beinchem vom Taster 'd' -> > Widerstand -> Vcc da schreibst du aber von nem Widerstand. Ist das ein Pullup? Wenn ja, da könnte ich ja auch den internen des Mega32 nehmen, oder?
Simon Hat einen nick wrote: > http://bascom-forum.de/index.php?action=dlattach;topic=10.0;attach=143;image > > auf dem Bild hier sind keine WIderstände an der Matrix. Viele Wege führen nach Rom. > > > >>Also: PB0 -> Draht -> Beinchen vom Taster 'a' -> >> Draht -> Beinchem vom Taster 'b' -> >> Draht -> Beinchem vom Taster 'c' -> >> Draht -> Beinchem vom Taster 'd' -> >> Widerstand -> Vcc > > da schreibst du aber von nem Widerstand. Ich bezog mich auch die ganze Zeit auf das von dir gepostete Schaubild. Hier ist es nochmal PB4 PB5 PB6 PB7 | | | | | | | | PB0----T-----T-----T-----T--10k--VCC | | | | PB1----T-----T-----T-----T--10k--VCC | | | | PB2----T-----T-----T-----T--10k--VCC | | | | PB3----T-----T-----T-----T--10k--VCC > Ist das ein Pullup? Wenn ja, da könnte ich ja auch den internen des > Mega32 nehmen, oder? Geh erst mal schlafen. Das hat heute keinen Sinn mehr.
Hallo, ja, man kann die internen PullUp nehmen. Ich habe jetzt nicht in Software-Beipiele geschaut, aber früher war mein Ansatz so: Zeilen alle Eingang mit PullUp. Spalten alle Ausgang und auf L. Die Abfrage hat alle Zeilen geholt, wenn alle 1 sind -> keine Taste gedrückt -> nichts machen. Wenn eine 0 dabei dann wie oben, also 3 Spalten als Eingang, schauen ob die 0 noch da ist usw. Verkürzt die IRQ-Routine, wenn keine Taste gedrückt ist. Man kann auch die Matrix-Abfrage noch kürzen: wenn eine 0 erkannt, dann Spalten alle als Eingang mit PullUp setzen und Zeilen alle auf Ausgang L, dann Spalten einlesen und die 0 auswerten. Bei der ersten Abfrage hat man die Spalte, bei der zweiten die Zeile. Mehrere gleichzeitig gedrückte Tasten werden ohne zusätzlichen Aufwand ohnehin falsch erkannt. Ich habe die Ergebnisse jeweils geschoben, bis eine 0 im C ankam. Damit kommen dann zumindest immer gültige Codes raus. Gruß aus Berlin Michael
AVR wrote: > hättest du auf den link geklickt hättest du die fette zeichnung in farbe > gesehen Liegt vielleicht auch daran, dass man sich dort erstmal registrieren muß, um überhaupt was zu sehen..
Holger Krull wrote: > AVR wrote: >> hättest du auf den link geklickt hättest du die fette zeichnung in farbe >> gesehen > > Liegt vielleicht auch daran, dass man sich dort erstmal registrieren > muß, um überhaupt was zu sehen.. Eben, das hält mich auch davon ab, da mal nachzuschaun. Aber ich vermute mal, dass "der einen nick hat" sich auch die Atmel-AppNote AVR242 nicht angesehen hat... Gruß über'n Bach, Hannes
registriert hab ich mich da nicht. vorher ging es aber.... jetzt soll ich mich einloggen ---> kein bedarf hab jetzt die matrix gelötet. kann ich mich drauf verlassen, dass das mit internen pullups klappt? (hab echt keine lust nachher wieder die kabel wegzulöten) Simon
Na? Ausgeschlafen?? Simon Hat einen nick wrote: > registriert hab ich mich da nicht. > vorher ging es aber.... jetzt soll ich mich einloggen ---> kein bedarf Es ist aber ein kleiner Unterschied, ob ich mich da nicht anmelden möchte, oder ob Du darauf verzichtest. Denn ich bin in der Lage, meine Programme in ASM zu schreiben. Du aber möchtest (wie ich oben gelesen habe) in BASIC mit BASCOM programmieren und stehst noch gaaaaaanz am Anfang Deines Lernprozesses. Da meine ich schon, dass das BASCOM-Forum für Dich ergiebiger sein könnte als dieses Forum hier. Hier findest Du eher die ASM- oder C- Programmierer. Und die meisten davon verzichten freiwillig auf den Baukasten BASCOM. > > > hab jetzt die matrix gelötet. kann ich mich drauf verlassen, dass das > mit internen pullups klappt? Nööö... Denn es kommt immer darauf an, wie man die Abfrage programmiert und unter welchen Bedingungen das Gerät betrieben werden soll. Für kurze Leitungen zu den Tastern unter normalen Bedingungen (also nicht gerade im Schaltschrank einer Industrieanlage) sind die AVR-internen PullUps ausreichend. > (hab echt keine lust nachher wieder die > kabel wegzulöten) Deshalb plant man ja eine Schaltung bevor man drauflos lötet. > > Simon ...
Simon Hat einen nick wrote: > registriert hab ich mich da nicht. > vorher ging es aber.... jetzt soll ich mich einloggen ---> kein bedarf > Das ist aber schade. Demnach weist du auch nicht, das BASCOM bereits eine fix fertige Ansteuerung für die Matrix hat. Ein Befehl, der die Auswertung macht. Schade.
>Na? Ausgeschlafen?? not really :-D >Es ist aber ein kleiner Unterschied, ob ich mich da nicht anmelden >möchte, oder ob Du darauf verzichtest. Denn ich bin in der Lage, meine >Programme in ASM zu schreiben. Du aber möchtest (wie ich oben gelesen >habe) in BASIC mit BASCOM programmieren und stehst noch gaaaaaanz am >Anfang Deines Lernprozesses. Da meine ich schon, dass das BASCOM-Forum >für Dich ergiebiger sein könnte als dieses Forum hier. Hier findest Du >eher die ASM- oder C- Programmierer. Und die meisten davon verzichten >freiwillig auf den Baukasten BASCOM. Ok, überredet ;-) >Nööö... Denn es kommt immer darauf an, wie man die Abfrage programmiert >und unter welchen Bedingungen das Gerät betrieben werden soll. Für kurze >Leitungen zu den Tastern unter normalen Bedingungen (also nicht gerade >im Schaltschrank einer Industrieanlage) sind die AVR-internen PullUps >ausreichend. Ich hab ca. 30cm lange Leitungen. Ich denke, dass das nicht zu lange ist. >Das ist aber schade. >Demnach weist du auch nicht, das BASCOM bereits eine fix >fertige Ansteuerung für die Matrix hat. Ein Befehl, der >die Auswertung macht. >Schade. wenn ich das gewusst hätte.... gleich mal schauen
Das Bild im Anhang ist vom dem Forum. Da hat man an allen 8 Ports Widerstände dran. Braucht man die alle? Oder reichen auch nur 4? also für jede zeile einen.
Simon Hat einen nick wrote:
> Das Bild im Anhang ist vom dem Forum.
Also das ist alles, aber kein Bild.
Simon Hat einen nick wrote: > Da hat man an allen 8 Ports Widerstände dran. Braucht man die alle? Oder > reichen auch nur 4? also für jede zeile einen. Plagt Dich etwa wegen 4 Widerständen der Geiz?? Der Autor dieser Schaltung hat sich sicherlich etwas dabei gedacht. Aber vielleicht hat der Autor das mit den Widerständen nur hier (Anhang) abgeguckt und sich nichts weiter dabei gedacht?? Ob Du die Widerstände einsparen kannst, musst Du schon mit dem Programmierer des BASCOM-Bausteins für die Tastenabfrage klären, denn der lässt uns nicht in seine ASM-Quelltexte hineinschauen (einer der Gründe, warum ich BASCOM meide). ...
@Hannes Lux das ist so nicht ganz richtig-alle pakete existieren in einer sogenanten lib datei die mit einem eingebauten editor in bascom verändert werden können.
Das ist aber eine schwere Geburt, wie wäre es mit etwas Einfacheren wie zum Beispiel mit LEGO-Steinen spielen? ;-)
AVR wrote: > @Hannes Lux das ist so nicht ganz richtig-alle pakete existieren > in einer sogenanten lib datei die mit einem eingebauten editor in bascom > verändert werden können. Ich brauche diesen Quatsch trotzdem nicht... ...
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.