Hallo, ich hab eine Hardware-Entprellung mir RC-Glied aufgebaut. Siehe: http://blog.cc-robotics.de/wp-content/uploads/2007/03/entprell.png, die linke Version habe ich. Ich frage den PIN 2 per Interrupt ab und zähle einen Zähler hoch. Leider funktioniert die Entprellung nicht immer richtig. So dass sich der Zähler verzählt Ich habe den 100nF Kondensator schon durch Kondensatoren von 68nF bis über 300nF verändert. Es ist aber keine spührbare Besserung eingetreden (bei zirka 5% bis 10% der Betätigungen wird Zähler um mehr als 1 erhöht). Ich verwende diesen Taster, Link: http://www.reichelt.de/Kurzhubtaster/TASTER-9302/3/index.html?;ACTION=3;LA=2;ARTICLE=44579;GROUPID=3278;artnr=TASTER+9302 Was kann ich an meiner Schaltung verändern, so dass die Schaltung nicht mehr prellt? Laut Datenblatt beträgt die Prellzeit des Tasters max 10ms. Vielen Dank für eure Hilfe Marcel
10ms @ 1MHZ = biszu 10 Impulse 1. Sollte man nicht mit dem Taster einen Kondensator (auch einen kleinen nicht) kurzschließen oder anklemmen, sonst fängt er mit der Zeit an zu prellen, weil die Kontakte hinüber sind. Versuche mal das hier: VCC | [R] | µC-----+--[R]----+ | | --- \ <- Taster --- | | | GND GND Am besten ist es einen Taster per Polling ab zu fragen, bzw. wenn es per Interrupt sein muss diesen nach einem Input eine bestimmte Zeit z.B. 15ms lang zu sperren.
Marcel S. schrieb: > ich hab eine Hardware-Entprellung mir RC-Glied aufgebaut. Der Taster schließt den geladenen Kondensator kurz, d.h. es fließen etwa 10000A! Je nach Leiterzugführung können diese 10000A allen möglichen Unsinn mit der CPU veranstalten. Nimm daher besser SW-Entprellung, die funktionert zuverlässig.
Peter Dannegger schrieb: > Nimm daher besser SW-Entprellung, die funktionert zuverlässig. Anfangs habe ich SW-Entprellung verwendet, die Funktion die ich mir dazu ausgedacht, habe hat super Funktioniert. Aber leider hab ich es nicht geschaft das ganze mit einem Interrupt am PIN 2 zu kombinieren. Deshalb hab ich es jetzt mit HW-Entprellung versucht. Hat jemand Tipps wie ich SW-Entprellung mit Interrupts kombinieren kann. Vielen Dank für die Unterstützung Marcel
Marcel S. schrieb: > Hat jemand Tipps wie ich SW-Entprellung mit Interrupts kombinieren kann. Gar nicht. Taster pollt man mit einem Timer. mfg.
Interrupts machen Sinn, wenn ein externes Ereignis (z.B. eine Schaltung wie ein Blitzdetektor, Nulldurchgangsdetektor)eine Aktion auslösen soll. Wenn ein Mensch eine Taste drückt, da spielt in der Regel eine Verzögerung von ein paar Millisekunden keine Rolle. Pollen und gut.
Ich habe dir sowohl eine Info gegeben zu: HW Entprellung Entprellung mit Interrupt Entprellung mit Polling Wenn du nicht lesen willst selber schuld.
Marcel S. schrieb: > Hat jemand Tipps wie ich SW-Entprellung mit Interrupts kombinieren kann. Hmm. Ich bin versucht zu sagen, dass da wieder mal _delay_ms und Warteschleifen in unbekannter aber viel zu langer Zeitdauer dahinter stecken, warum du unbedingt meinst, für die Tasten einen Interrupt zu benötigen. Wenn dem so ist, dann sitzt das Problem tiefer, weil der ganze Programmaufbau dann nicht vernünftig ist.
Peter Dannegger schrieb: > Marcel S. schrieb: >> ich hab eine Hardware-Entprellung mir RC-Glied aufgebaut. > > Der Taster schließt den geladenen Kondensator kurz, d.h. es fließen etwa > 10000A! > Je nach Leiterzugführung können diese 10000A allen möglichen Unsinn mit > der CPU veranstalten. > > Nimm daher besser SW-Entprellung, die funktionert zuverlässig. Also wenn da wirklich 10'000 Ampere fliessen würden könnte er sein uC Board jetzt Löffeln.. oder mit nem Strohhalm aufsaugen Meinst du das ernst?
Pirmus schrieb: > Also wenn da wirklich 10'000 Ampere fliessen würden könnte er sein uC > Board jetzt Löffeln.. oder mit nem Strohhalm aufsaugen Der fließt ja nur sehr kurz (wenige ns), hat also wenig Energie. Die 10000A sind vielleicht etwas hoch gegriffen, die Leiterzüge bilden ja Spulen, die den Stromfluß verzögern. Aber 100A sind durchaus zu erreichen (wenige ns lang). Auch bilden die Leiterzüge mit dem Kondensator einen Schwingkreis und mit +5V angeregt, schwingt der bis -5V durch, d.h. der Eingangspin sieht kurz mal -5V, was dem MC auch nicht gefallen wird.
Marcel S. schrieb: > Hat jemand Tipps wie ich SW-Entprellung mit Interrupts kombinieren kann. SW-Entprellung benutzt in der Regel einen Timerinterrupt. Wenn man also will, kann man das Ereignis in diesem Interrupt auch schon auswerten (z.B. Not-Taster). Klarer und deutlich einfacher wird der Programmfluß allerdings, wenn der Timerinterrupt das Ereignis nur erkennt (ein Flag setzt) und es erst die Mainloop auswertet. Daher sieht man in der Praxis fast immer nur diesen Weg.
Hallo, als erstes möchte ich mich für die vielen Tipps bedanken. Ich bin gerade dabei die Tastenabfrage per Timer-Interrupt zu programmieren. In der Schule arbeiten wir mit dem 68HC11 im Vergleich dazu ist das Datenblatt vom ATmega 2560 sehr komplex. Wobei mir dort auch keine Interrupts und dergleichen verwenden. // Timer1 konfigurieren TCCR1A = 0x00; TCCR1B = 0x01; // Interrupt Initialisieren TIMSK1 = 0x01; Hier im Forum hab ich aber noch eine andere Möglichkeit gefunden die Timer zu konfigurieren. Ich habe sie auf meinen Fall abgeändert: TCCR1A = (0 << CM1A1) | (0 << CM1A0) | (0 << COM1B1) | (0 << COM1B0)| (0 << COM1C1) | (0 << COM1C0) | (0 << WGM11) | (0 << WGM10); TCCR1B = (0 << ICNC1) | (0 << ICES1) | (0 << WGM13) | (0 << WGM12)| (0 << CS12) | (0 << CS11) | (1 << CS10); Ich hab noch nicht so genau verstanden was das für ein Konstrukt ist: TCCR1A ist meiner Meinung nach ein 8 Bit Register das für die Verschiedenwertigen Bits Namen wie z.B. CM1A1 hat, den Namen kann man dann den Wert 1 oder 0 zuweisen. Aber für was steht das oder ( | ) und warum wird ein „<<“ verwendet? das bedeutet doch Links-Shift. Ich hab unter http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Anforderungen_an_Interrupt-Routinen ein schönes Tutorial gefunden. Aber ich darf Atmel Studio nicht verwenden, da unser Lehrer für das Projekt nur die Verwendung der Arduino Umgebung oder des 68HC11 erlaubt. Die Befehle sei() und cli() sind denke ich über die Bibliothek avr/io.h oder avr/interrupt.h eingebunden. Gibt es irgendeine Anleitung oder Tutorial in dem gezeigt wird, wie ich ohne diese Bibliotheken auskomme? Vielen Dank Marcel
Da gehört noch ein Widerstand, ungefähr R/10, zwischen Taster und Kondensator. Joe
Marcel S. schrieb: > Was kann ich an meiner Schaltung verändern, so dass die Schaltung nicht > mehr prellt? Verwende einen Taster mit Umschaltkontakt und nimm ein RS-Flip-Flop (2 NAND-Gatter) je Taster. http://www.reichelt.de/Eingabetaster-Digitast-/DIT-1-RT/3//index.html?ACTION=3&GROUPID=3280&ARTICLE=7141&SHOW=1&START=0&OFFSET=500& Gruß Anja
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.