Hi Ich weis nicht ob ich hier richtig bin aber es wirkt sich halt auf das Programm aus. Bin gerade dabei ein Tastenfeld von Reichelt an mein Mikro anzuschließen. Das Tastenfeld hat 8 Pins. 4 für waagerecht und 4 für senkrecht. Draus ergibt sich immer eine der 16 Tasten. Leider muss ich durch die Bauart erst 4 auf High setzten und die anderen 4 auslesen und umgekehrt damit ich die Taste eingelesen habe. Das Problem ist das ich durch einstreuungen Signale bekomme wo keine sein dürften. Leider kann ich nichts über einen Wiederstand auf Masse legen um einen sauberen Low Pegel zu bekommen. Jemand nee Idee wie ich das Lösen kann? MFG Daniel
Öhh, wie lang sind die Leitungen vom µC zur Tastatur? Eigentlich ist das Auslesen einer Matrixtastatur relativ störsicher. Und Deine Auslese-Philosophie verstehe ich auch nicht ganz. Normalerweise legt man vier der Pins (entweder die Spalten- oder die Zeilenanschlüsse) über als Ausgang geschaltete µC-Pins auf Masse (Low) und fragt die jeweils anderen (die an als Eingang mit Pull-Up geschaltete Pins angeschlossen sind) ab. Als Beispiel: Die Spalten sind auf Ausgänge (Low-Pegel) gelegt. Die Zeilen liegen an Eingängen mit Pull-Up. Die Zeilen werden jetzt abgefragt. Ist irgendeine Taste gedrückt, dann wird der entsprechende Zeilen-Pin auf Low gezogen. Jetzt werden (in C z.B. in einer for-Schleife) die Spalten der Reihe nach auf High-Pegel geschaltet. Sobald sich der "verdächtige" Zeilenpin ändert (von Low auf High) hat man die richtige Spalte gefunden.
Ach ja, noch was: In den Leitungen zwischen den Spaltenanschlüssen und den als Ausgang geschalteten µC-Pins Strombegrenzungs-Widerstände (150 Ohm reichen) einbauen, damit nicht gleich der µC abraucht, wenn jemand mehrere Tasten gleichzeitig drückt ("dicke-Finger-Syndrom").
>Tastenfeld von Reichelt an mein Mikro anzuschließen Soll das Tastenfeld singen? (Singstar-Keyboard?) Wie man eine Matrix-Tastatur (mit einem AVR) ausliest, beschreibt Atmel in einer Application Note (AVR240). Wie das funktioniert hat JoHnny ja schon beschrieben.
OT: Kann mir mal jemand die Art.-Nr. des Tastenfeldes schreiben? Sowas suche ich schon länger bei Reichelt, habe aber offensichtlich nicht die richtigen Suchbegriffe. Danke.
Tasten*felder* habe ich bei Reichelt schon lange nicht mehr gesehen. Die letzten hab ich beim großen C bestellt. Hab auch im aktuellen Papierkatalog nichts dergleichen gefunden.
>Hab auch im aktuellen Papierkatalog nichts dergleichen gefunden.
Dafür gibt es doch auch die Ergänzungs-CD...(oder den Business-Katalog
;-)
@Rahul: Ich meinte natürlich (auch wenn es oben im Prinzip anders steht) den *Reichelt*-Papierkatalog...
@johnny.m > Ach ja, noch was: In den Leitungen zwischen den Spaltenanschlüssen und > den als Ausgang geschalteten µC-Pins Strombegrenzungs-Widerstände (150 > Ohm reichen) einbauen, damit nicht gleich der µC abraucht, wenn jemand > mehrere Tasten gleichzeitig drückt ("dicke-Finger-Syndrom"). Wieso sollte der uC abrauchen? Wenn ich die Spalten treibe (meinetwegen mit LOW) und die Zeilen per Pull-ups ah HIGH ziehe, dann kann der USER drücken was er will, es raucht rein gar nix ab. Been there, done this. MfG Falk
Wenn Du in einer Zeile mehrere Tasten gleichzeitig drückst und eine (oder mehrere) Spalten sind wegen der gerade laufenden Abfrage auf High-Pegel (Ausgang) und andere auf Low-Pegel, dann gibts Strom satt (Kurzschluss über die Zeilenleitung). Das lässt sich allerdings umgehen, wenn man nicht das Portregister sondern das Datenrichtungsregister umschaltet. Dadurch spart man sich tatsächlich die Widerstände und u.U. ne Menge Ärger...
@johnny.m > Wenn Du in einer Zeile mehrere Tasten gleichzeitig drückst und eine > (oder mehrere) Spalten sind wegen der gerade laufenden Abfrage auf > High-Pegel (Ausgang) und andere auf Low-Pegel, dann gibts Strom satt Die HIGH-Pegel sind aber nur duch (schwache) Pull-ups generiert, ala I2C. -> Alles im gruenen Bereich. > (Kurzschluss über die Zeilenleitung). Das lässt sich allerdings umgehen, > wenn man nicht das Portregister sondern das Datenrichtungsregister > umschaltet. Dadurch spart man sich tatsächlich die Widerstände und u.U. > ne Menge Ärger... Eben drum. Ergo. -> Es werden keine Serienwiderstände als Kurzschlusschutz benötigt. MFG Falk
> Die HIGH-Pegel sind aber nur duch (schwache) Pull-ups generiert Sind sie in dem Fall eben nicht. Wenn ich einen Ausgangspin auf High-Pegel schalte (zumindest bei µCs, die Push-Pull-Ausgänge besitzen, also z.B. AVR), dann ist da kein schwacher Pull-Up! Bei µCs mit Open-Collector-Outputs (z.B. 8051er) ist das kein Problem. Man muss nur daran denken, wenn man einen AVR o.ä. hat, muss man das Daten*richtungs*register umschalten und nicht das Datenregister.
> > Die HIGH-Pegel sind aber nur duch (schwache) Pull-ups generiert > Sind sie in dem Fall eben nicht. Wenn ich einen Ausgangspin auf In welchem Fall? Wenn mans falsch macht? > Daten*richtungs*register umschalten und nicht das Datenregister. Das hat doch keiner bestritten. MFG Falk
> Das hat doch keiner bestritten. Nö, aber bei µCs mit OC-Input kann man es eben auch gefahrlos mit dem Datenregister machen, bei Push-Pull aber nicht. Deshalb der Hinweis. Gibt vll. auch Leute, die bisher mit 8051ern gearbeitet haben (und die Umschaltung mit dem Portregister gemacht haben) und auf z.B. AVR umsteigen. Und genau die wundern sich dann...
>dann ist da kein schwacher Pull-Up! Doch. Wenn man das DDR und das Port-Register umschaltet, hat man auf der einen Seite die hochohmigen Pullups und auf der anderen Seite Masse, sofern ein Taster betätigt wurde. Die Atmel-Application-note beschreibt das ganz wurderbar. >Been there, done this. Me, too...
> Wenn man das DDR und das Port-Register umschaltet
Eben genau darum ging es doch! Bei µCs mit OC-Output muss man nämlich
nur das Portregister umschalten und braucht sich um das
Datenrichtungsregister gar nicht zu kümmern, was eben bei µCs mit
Push-Pull-Ausgängen u.U. fatal wäre. Und wer zum Teufel liest schon
Appnotes;-?
>Und wer zum Teufel liest schon Appnotes;-? Ich! (Zumindest die...) >Bei µCs mit OC-Output muss man nämlich nur das Portregister umschalten >und braucht sich um das Datenrichtungsregister gar nicht zu kümmern, was >eben bei µCs mit Push-Pull-Ausgängen u.U. fatal wäre. In einem anderen Thread schrieb jemand: "Man sollte wissen, was man tut" Das gilt wohl auch in diesem Fall...
> Das gilt wohl auch in diesem Fall...
Das gilt eigentlich immer, oder nicht;-?
Mal noch gaaanz was anderes: Das heißt SMOG (Wortkreuzung Smoke + Fog), natürlich gibt's auch noch den Schmock, das is aber wieder ne ganz andere Baustelle ;-)
@Dennis Danke für die Berichtigung. :) @johnny Ist ein Atmega 8 und die leitung ist ca. 20cm lang. Werde das mal so probieren wie du es geschrieben hast. Was mich schon wundert ist das auf den Eingängen ohne Pull up immer so um die 0,5V liegen je nachdem wie die Kabel liegen. Also ich geh jetzt mal sofort testen und danke für die Antworten.
> ...die leitung ist ca. 20cm lang. Das ist natürlich schon ne Menge... > ...probieren wie du es geschrieben hast... OK, aber beim AVR eben dran denken, das DDRx umzuschalten bei der Abfrage der Spalten (Also von Ausgang auf Eingang) und nicht das PORTx. Nicht, dass die obige Diskussion Dich jetzt völlig durcheinandergebracht hat. Die von Rahul erwähnte Appnote hab ich mir zwar noch nicht en détail angesehen, aber sich sowas anzuschauen ist in dem Zusammenhang sicher auch nicht verkehrt (steht allerdings glaub ich auch ne Menge drin, was Du momentan wahrscheinlich nicht brauchst).
@johnny Ok so klappt es. Muss halt gucken das ich die störungen so weg bekomme. Klappt auch sehr gut.
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.