Störungen durch Elektrosmock

OP #472002
Lesenswert?

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
Gast #472044
Lesenswert?

Ö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.
Gast #472047
Lesenswert?

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").
Gast #472048
Lesenswert?

>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.
Gast #472249
Lesenswert?

@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
Gast #472252
Lesenswert?

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...
Gast #472259
Lesenswert?

@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
Gast #472267
Lesenswert?

> 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.
Gast #472269
Lesenswert?

> > 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
Gast #472275
Lesenswert?

> 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...
Gast #472278
Lesenswert?

>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...
Gast #472288
Lesenswert?

> 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;-?
Gast #472290
Lesenswert?

>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...
OP #472443
Lesenswert?

@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.
Gast #472461
Lesenswert?

> ...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).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren