Forum: Mikrocontroller und Digitale Elektronik Suche 3-polige Taster


von Markus R. (maggggus)


Lesenswert?

Hallo!

Ich bin auf der Suche nach Tastern mit 3 Anschlüssen, also sozusagen 
gleichzeitig ein Öffner und ein Schließer. Wenn ich auf die Taste 
drücke, will ich auf Pin 1 und Masse eine steigende Flanke haben und auf 
Pin 2 und Masse eine fallende Flanke.
Somit könnte ich Tastendrücke sicherer detektieren als wenn ich nur 
einen Taster mit einem Pol verwende. Mein Problem ist, dass mein µC oft 
viele Flanken erkennt, obwohl ich den Taster dauerhaft gedrückt halte, 
der Kontakt also öfter öffnet und schließt.
Es geht hierbei NICHT um Prellen, da mein Problem auch auftritt, wenn 
ich die Taste 10 sec gedrückt halte. Es liegt meiner Meinung nach an der 
mangelhaften mechanischen Qualität, ich habe schon viele verschiedene 
Taster getestet.

Wo gibt es Taster mit 3 Polen oder wie bezeichnet man diese?

von Sparki (Gast)


Lesenswert?

Das was du suchst bezeuchnet man als WEchselschalter /-Taster.
Dabei ist der mittlere Kontakt die Zuleitung und jeweils ein Kontakt 
dient als Öffner bzw. als Schließer.

von Sparki (Gast)


Lesenswert?


von Markus R. (maggggus)


Lesenswert?

Vielen Dank für die schnelle Antwort! Das ist im Prinzip genau das was 
ich Suche. Unter Wechseltaster finde ich aber nur so 
Standardlichtschalter.

Gibts so was vielleicht auch etwas günstiger? Brauche 7 Stück. Ein 
Standardtaster kostet bei Reichelt 9ct, dieser vom Conrad über 6€!

von Peter (Gast)


Lesenswert?

wo hängt denn der taster dran?

wenn er an einem µC dran hängt dann sollte es soch auch per software zu 
lösen sein. Wenn der taster nicht schnell reagieren muss kann eventuell 
auch ein C und R helfen.

von Frank N. (arm-fan)


Lesenswert?

>Es liegt meiner Meinung nach an der mangelhaften mechanischen Qualität,

Kann gar nicht sein. Sooo oxidiert kann dein Taster gar nicht sein,
dass er einen dermaßen schlechten Kontakt hätte, wenn er dauerhaft
gedrückt ist. Oder betreibst du ihn unter Wasser oder im Sand?

Überprüf mal lieber den Rest deiner Schaltung / deines Programms.

von Markus R. (maggggus)


Lesenswert?

Die Taster hängen an einem IOWarrior40 µC. Ich habe die beiden 
Anschlüsse der Taster mit Masse/mit einem Eingangspin des IOW verbunden. 
Ich habe leider nix gefunden, wie man Taster an den IOW korrekt 
anschließt (ob man da noch einen Widerstand braucht - ich war der 
Meinung der IOW hat sowas intern und ich brauche es nicht). Die 
Schaltung funktioniert soweit, nur wenn ich halt längere Zeit einen 
Taster drücke, habe ich Flanken wo keine sein sollten. Die Taster waren 
neu, die Spannung ist 5V.
Ich glaube der IOW entprellt auch automatisch.

von Frank N. (arm-fan)


Lesenswert?

Also deinem Krieger nen Pullup zu spendieren kann ja schonmal nicht
schaden. Wobei der auch nichts zur Sache tut, wenn du den Taster
gegen Masse schaltest. Ich würde dann eher im losgelassenen Zustand,
wenn der Eingangspin evtl. floatet, Impulse erwarten.

Ebensowenig hat Entprellung damit zu tun, wenn du den Taster nur
gedrückt hälst und wechselnde Signale erhälst.

Ansonsten kenn ich mit mit dem Ding nicht aus - außer dass ein Kollege
damit seine Gleise auf der Modelleisenbahn steuert ;-)

Wenn ich das richtig sehe, dann hast du mit der Firmware des Teils
nichts zu tun, sondern bedienst den nur vom PC aus über USB?

Vielleicht doch ne Macke in deinem Programm?

von Markus R. (maggggus)


Lesenswert?

Genau, die Firmeware des µC schreibe ich nicht selbst.
Wie groß wäre denn so  ein Pullup?
Wie groß wären denn das R und das C  (wie oben Peter geschrieben hat)?


Ein Stück meines Codes (der an sich prima funktioniert):

  for(;;) {
    rc = IowKitRead(iows[0], IOW_PIPE_IO_PINS, &rep40, 
IOWKIT40_IO_REPORT_SIZE);
    if(rc) {
      int status;
      status = (int)rep40.Bytes[1];
      printf("Momentaner Status: 0x%x\n",status);
      //printf("Momentan gedrueckt: ");

      if (!(status & (1 << PICK)) && pick_old) {
        //Pick war vorher gedrückt und ist jetzt nicht gedrückt
        sendKey(PICK_KEYCODE,0);
        pick_old = 0;
      }
      if (!(status & (1 << FRET1)) && f1_old) {
        sendKey(FRET1_KEYCODE,0);
        f1_old = 0;
      }
      if (!(status & (1 << FRET2)) && f2_old) {
        sendKey(FRET2_KEYCODE,0);
        f2_old = 0;
      }
      if (!(status & (1 << FRET3)) && f3_old) {
        sendKey(FRET3_KEYCODE,0);
        f3_old = 0;
      }
      if (!(status & (1 << FRET4)) && f4_old) {
        sendKey(FRET4_KEYCODE,0);
        f4_old = 0;
      }
      if (!(status & (1 << FRET5)) && f5_old) {
        sendKey(FRET5_KEYCODE,0);
        f5_old = 0;
      }

      if ((status & (1 << PICK)) && !pick_old) {
        pick_old = 1;
//        printf("PICK ");
        sendKey(PICK_KEYCODE,1);
      }
      if ((status & (1 << FRET1)) && !f1_old) {
        f1_old = 1;
//        printf("FRET1 ");
        sendKey(FRET1_KEYCODE,1);
      }
      if ((status & (1 << FRET2)) && !f2_old) {
        f2_old = 1;
//        printf("FRET2 ");
        sendKey(FRET2_KEYCODE,1);
      }
      if ((status & (1 << FRET3)) && !f3_old) {
        f3_old = 1;
//        printf("FRET3 ");
        sendKey(FRET3_KEYCODE,1);
      }
      if ((status & (1 << FRET4)) && !f4_old) {
        f4_old = 1;
//        printf("FRET4 ");
        sendKey(FRET4_KEYCODE,1);
      }
      if ((status & (1 << FRET5)) && !f5_old) {
        f5_old = 1;
//        printf("FRET5 ");
        sendKey(FRET5_KEYCODE,1);
      }
//      printf("\n");
        }
        usleep(1000*10);
  }

von AVRFan (Gast)


Lesenswert?

Was ist, wenn Du den Taster testweise durch einen anderen ersetzt? Zeigt 
sich dieses unerwünschte Verhalten dann immer noch?  Wenn ja, wäre das 
als Indiz darauf zu werten, dass der Fehler in der Beschaltung 
(Pullup-Widerstand vorhanden/nötig?) oder der µC-Software (wie wird der 
Taster abgefragt?) liegt.

von Markus R. (maggggus)


Lesenswert?

Ja das war auch mit einem Taster von einem anderen Typ so. Beider 
verwendeten Tastersorten kosteten aber 10ct oder weniger, drum habe ich 
es auf die billigtaster geschoben.... Ich würde gerne mal einen 
Widerstand oder einen Kondensator einlöten und dann nochmal probieren, 
weiss aber nicht genau wie die Schaltung aussehen muss...  Den 
Kondensator (welcher Wert?) einfach zwischen die beiden Pins des Tasters 
löten?
Den Widerstand (welcher Wert?) in Reihe in die Verbindung µC <=> Taster?

von Schwurbl (Gast)


Lesenswert?

Ja Leute, wie geil ist das denn? Das kann doch nicht sein, dass man 
nicht mal eben mit eine Voltmeter den Pegel am Eingangspin des 
Controllers nachmisst? Oder mit einem Ohmmeter den Taster prüft? Ich 
glaub's nicht...

von Peter (Gast)


Lesenswert?

also so wie es sich anhört, wird wohl auch nicht eine R C Kommbination 
reichen. Ich vermute auch mal ein software oder anschluss fehler. Löte 
doch mal testweise die kontakte einfach zusammen oder bau einen schalter 
ein.

von AVRFan (Gast)


Lesenswert?

>Ja das war auch mit einem Taster von einem anderen Typ so.

Ahja.

>Beider verwendeten Tastersorten kosteten aber 10ct oder weniger, drum habe >ich 
es auf die billigtaster geschoben....

Billige Taster haben eine kürzere Lebenserwartung (Betätigungsvorgänge), 
können  stärker prellen, eine geringere Strombelastbarkeit und einen 
höheren Kontaktwiderstand aufweisen, nicht so hübsch aussehen, und 
allgemein weniger robust sein, z. B. gegen hohe Temperaturen, 
Feuchtigkeit, Staub, Aerosole und Erschütterungen. Aber wenn sie neu 
sind, dann kann man auch von den billigsten Tastern erwarten, einen 
sicheren Kontakt beim Schließen herzustellen, und ebenso keinen Kontakt 
mehr nach dem Öffnen.  Was auch immer Deinen Fehler verursacht, ich 
vermute stark, dass es nicht der billige Taster ist.

Was haben die Eingangspins Deines Controllers für eine elektrische 
Charakteristik, insbesondere bezüglich interner Pullup-Widerstände?

von Markus R. (maggggus)


Lesenswert?

Der Tipp von Peter hat mir weitergeholfen, nachdem ich die Pins neu 
angelötet habe scheint das Problem behoben. (Anscheinend hatte ich nicht 
sorgfältig genug gelötet - schande über mich!)

Mit elektrischen Charakteristiken kenne ich mich zu wenig aus, hier wäre 
das Datenblatt:
http://www.codemercs.de/Downloads/IOWarriorDatasheet.pdf


Ein Problem bleibt: Wenn ich die Taster nicht ganz durchdrücke, sondern 
nur leicht, dann habe ich andauernd Flanken (ist ja auch klar - die 
Kontakte berühren sich nur kurz ... usw).
Kann ich das mittels eines Kondensators etwas mindern?

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
Noch kein Account? Hier anmelden.