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?
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.
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€!
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.
>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.
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.
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?
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); }
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.
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?
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...
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.
>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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.