Taster Hardware debouncen für mehrere Taster

Hallo zusammen.

Für mein Projekt benötige ich einen Rotary Switch mit Taster Funktion. Nach einigem hin und her suchen habe ich rausbekommen, dass für meine Bedürfnisse am besten eine hardwaremäßiges Debouncen an effektifsten ist (Der Rotary muß über Interrupts angeschlossen sein, weil er das laufende Programm ggef unterbrechen muß).

Nun habe ich eine Hardware Debounce für einen Taster realisiert. An einer 5V Quelle ist ein 10K Wiederstand, an diesem Dann der Switch und parallel dazu ein 10 uf Elko, und den Schaltmechanismuß greife ich über einen invertierten Schmitt trigger an den Arduino Mega angeschlossen habe (Siehe Anhang).

Nun wollte ich daraus eine Platine machen und stolpere darüber, das ich ja diese Schaltung 3mal machen muß, und daher die Elkos und die Wiederstände im Prinzip parallel hängen. Kann ich das einfach so machen, oder bekomme ich dann Probleme weil Spannung und Wiederstände dann nicht mehr stimmen?

Steve

Die hängen nicht parallel, weil jeder Taster seinen eigenen braucht.

Schau Dir mal den MC14490 an http://www.onsemi.com/pub_link/Collateral/MC14490-D.PDF

Grüße Uwe

Hi Uwe,

danke für die schnelle Antwort. Im Prinzip macht hier der IC alles was ich per Hand gemacht habe, wenn mein englisch soweit ausreicht um das zu verstehen, sprich ich gebe an Pin 1 mein Signal vom Schalter und erhalte an 2 das saubere Eckige Signal :smiley:

ein paar Sachen verstehe ich aber dabei noch nicht:

  1. VSS = GND? oder wo schließe ich GND an dem Teil an?
  2. wenn ich von den 6 Ports nur 3 Verwende, muß ich die inputs von 4, 5 und 6 auf VSS schalten richtig?
  3. Wie berechne ich den Kondensatot. Wenn ich den Text am Anfang richtig verstehe, wird über den Kondensator ein interner Zeitgeber gesteuert. jedes fünfte Signl wird dann als neuer Input gewertet?
  4. In meiner Schaltung sorgt ja der Schmitt Trigger dafür, das ich aus dem ankommenden abgerundetem Signal ein "Eckiges" erhalte. Dieses benötige ich in meiner Schaltung invertiert. Der IC hat ja ebendalls einen Trigger drin aber nur auf Pin7? Das ist ja der OSC Eingang? Oder muß ich die Signale, die aus dem Teil kommen trotzdem nochmals in eine externen Trigger leiten?

Fragen über Fragen :frowning: Sorry aber ICs sind leider neuland für mich und ich benutze den Arduino um mehr drüber zu lernen und mein altes Wissen wieder aufzufrischen, welche fast 15 Jahre alt ist)

Danke für alle Infos

Steve

  1. Ja, Vss = GND
  2. Wenn Du an den Ausgängen 4,5,6 nichts anschliesst ist es egal ob Du die Eingange 4,5,6 mit GND verbindest oder nicht. Da sich dies nicht auf die Eingänge/Ausgänge 1,2,3 auswirkt.

Eingänge sollten immer auf ein definiertes Potetial geschaltet werden da sie unbeschaltet störungen einfangen könnten und da schwingen und so eine große Verlustleistung (auch bei CMOS ICs) produzieren.
Einfach auf GNd schalten.
Grüße Uwe

Der IC hat ja ebendalls einen Trigger drin aber nur auf Pin7? Das ist ja der OSC Eingang? Oder muß ich die Signale, die aus dem Teil kommen trotzdem nochmals in eine externen Trigger leiten?

Die Ausgangssignale sind eh Rechtecke. Die kannst du direkt verwenden, wenn du mit Vcc = 5V arbeitest.
Der Pin 7 ist der Takteingang, und braucht daher als einziger eine schöne Flanke.

Schön, dass man sich so eine ganze Reihe Bauteile spart ( und nur 1 kleinen statt viele große Kondensatoren braucht )
Ergibt sich daraus der stolze Preis ?
http://www.reichelt.de/ICs-M-MN-/MC-14490-P/3//index.html?ACTION=3&GROUPID=2914&ARTICLE=39635&SHOW=1&START=0&OFFSET=16&

Da hast Du noch den günstigsten Anbieter gefunden. RS und Distrelec sind jenseits der 6€ wenn man die MwSt berücksichtigt.

Grüße Uwe

uwefed:
Da hast Du noch den günstigsten Anbieter gefunden.

Na ja, Reichelt hat seine Mindestbestellmenge, bei der dann auch das Porto keinen soo großen Anteil mehr hat ...

RS hat keine Mindestabsatzmenge aber unter einer bestimmten Summe gibt es transpotspesen.
Grüße Uwe

Hallo,

danke erstmal für die Antworten. War paar Tage auf Fortbildung, daher melde ich mich erst jetzt.

Wenn ich das also richtig verstanden habe, kann ich die Bounce Frequenz aus der Docu vom Schalter rauslesen:

Wenn ich die Docu richtig lese, dann habe ich eine Bounce-Zeit von 5ms (Siehe Anhang). Diese muss ich dann durch 4 Teilen und erhalte dann die Frequenz, die ich zum D-Bouncen benötige. Diese kann ich dann ja in die Formel bei dem IC einsetzen, und nach dem Kapazitator auflösen =

C = 1,5/(1/(5*10^3)/4)) = 1875, somit würde ich einen 2200pF Kondensator benötigen (das ist zumindest der nächst größere den ich gefunden habe).

Wenn denn meine Rechnung nun stimmt, wie schliesse ich denn das Teil an? Einwach vor den OSC eingang hängen?

Danke schon mal
Steve

B400-STEC11B.pdf (542 KB)

Chaos_Lord:
C = 1,5/(1/(5*10^3)/4)) = 1875, somit würde ich einen 2200pF Kondensator benötigen (das ist zumindest der nächst größere den ich gefunden habe).

Wenn denn meine Rechnung nun stimmt, wie schliesse ich denn das Teil an? Einwach vor den OSC eingang hängen?

Laut Datenblatt den Kondensator an die beiden Oszillator-Anschlüsse hängen und Dioden auf Masse bzw +5V

Grüße Uwe

Hallo zusammen,

ok wenn ich Deine Antwort und auch das Datenbaltt richtig verstehe "Schaut der IC ob zwischen OSCin und OSCout was eingebaut ist, und wenn ja dann wird der interne Oscilator verwendet". Sprich durch den Kapazitator zwischen den beiden Anschlüssen sage ich dem IC nimm deinen eigenen. Durch die Rechnung (wie oben aufgeführt, wobei ich hoffe das ich mich da nicht vertan habe) stelle ich die Frequenz ein.

Reicht denn da z.B. ein Folienkondensator FKS2-400 2,2N: FKS2 PET-Puls-Kondensator, 2,2 nF, 10 %, 400 VDC, RM 5 bei reichelt elektronik aus?

Die Beiden Dioden sind ja nur dafür da, um den IC vor einer Überspannung beim Abschalten zu schützen. Warum wernden die aber beide an VDD angeschlossen? einfach nur als Ableiter von einem Signal welches von Innerhalb des ICs kommt? Dann würde ich damit ja den Kondensator und nicht den IC schützen?

Hier müßte ich doch mit einer Schottky Diode, 20V, 1A mehr als ausreichend auf der sicheren Seite sein.

MFG

Steve

Hi zusammen,

so Teile sind nun da und ich habs ausprobiert und bin begeistert. Funktioniert wunderbar :smiley: Danke nochmals für den Tip Uwe

Steve

Reicht denn da z.B. ein Folienkondensator

Der scheint mir sogar noch überdimensioniert mit 400 V Spannungsfestigkeit.
2,2nF gibts auch als Keramik, 50-100V sollte ja auch weit jenseits aller Anforderungen sein
(zum halben Preis gar, obwohl das nu echt nicht drauf ankommt)
http://www.reichelt.de/Vielschicht-bedrahtet-X7R-10-/X7R-2-5-2-2N/3/index.html?;ACTION=3;LA=446;ARTICLE=22855;GROUPID=3162;artnr=X7R-2%2C5+2%2C2N;SID=13Tx2K8X8AAAIAAHRo9ZU0ba49f873497407e1bee6e42872b1e7c

Oder nach welchen Kriterien wählt man eigentlich am besten solche Teile aus?

Mal einen fertigen Thread ein bisschen missbrauchen

Hi,

Bei mir kam die Entscheidung danach, was ich da hatte :smiley: und den hatte ich hier rumliegen :smiley: ansonsten keine Ahnung :frowning:

Steve

Hallo zusammen,

ich verzweifle hier gerade an dem MC 14490P. Zunächst lief alles wunderbar. Nun aber erhalte ich am Arduino keinerlei Signal. Daher erstmal eine Verständnissfrage:

VDD = +5V (vom Arduino)
VSS = GND (vom Arduino)

Ain = +5V vom Taster Kommend
Aout = Pin2 der mittels attachInterrupt abgefragt wird.

Alle anderen Ain habe ich an +5V gehängt.

Als Zeitgeber habe ich einen Externen Zeitgeber, aktuell mit 1sec (nur für Testzwecke aus verzweifelung)an OSCin angeschlossen. OSC out ist offen

Wenn ich nun alles richtig verstanden habe müßte beim Drücken des Taster ein +5V signal am Ain liegen. Dieses wird an Aout weitergeleitet. Alle innerhalb der nächsten 4 Sekunden ankommenden Signale werden ignoriert.
Am Arduino müßte dann ein High Signal ankommen.

Leider kommt garnichts an. Kann es sein, dass der IC nen schaden hat, oder habe ich was falsch verstanden oder was könnte noch sein?

Wäre für alle Infos dankbar

Steve

Das sind alles sehr schöne Fragen, nur würde ich vorschlagen das Du erst mal deinen Schaltplan und den Sketch postest.

Dann ist es auch wesentlich leichter die Fehlerquelle zu finden !

Hallo,

ok also das Programm ist extremst simpel, wie gesagt bin am verzweifeln also alles auf so minimal wie möglich gestellt:

int dummyCounter = 0;

void setup() {
   attachInterrupt(0, countUP, RISING);
  //attachInterrupt(0, countUP, FALLING);
  Serial.begin(9600);
}

void loop() {
     Serial.println(dummyCounter,DEC);
  delay(2000);
}

void countUP() {
    Serial.print("Counter up: ");
    dummyCounter++;
    Serial.println(dummyCounter);
}

Leider finde ich kein übersichtliches Schaltbild (Fritzing kennt den MC 14490P nicht) daher ein wenig aus der Hand

+5V ------ Taster -------     Pin1          Pin16 --------------- +5V
                              Pin2          Pin15 --------------- Pin 2 des Arduino
+5V ------------------------- Pin3          Pin14 --------------- +5V
                              Pin4          Pin13
+5V ------------------------- Pin5          Pin12 --------------- +5V
                              Pin6          Pin11
 NE555 mit 1 Sec Takt ---     Pin7          Pin10 --------------- +5V
GND ------------------------  Pin8          Pin9

Hoffe das das so verständlich ist :astonished: . Der Tacktgeber funktioniert einwandfrei und liefert, wenn am Arduino interrupt0 angeschlossen brav jede Sekunde ein Count up. Die gesamte STromversorgung kommt momentan vom Arduino.

Nach dem Code müste auch wenn ein nicht gefiltertes Signal kommt wenigstens in der Console was erscheinen, tut es aber nicht :frowning:

Hoffe das ich so ein wenig klarheit reinbringen konnte.

MFG

Steve