Wie würden Sie alle eine einfache Verzögerung eines Signals implementieren?

Ich bin von Beruf Entwickler von Konsolenspielen und habe keine formelle Ausbildung in Elektronik / Elektrotechnik. Im Gaming-Jargon ein „Noob“, wenn man so will. Und doch habe ich eine neu entdeckte Leidenschaft für das Herumtüfteln mit diesem wunderbaren Handwerk.

Im Moment versuche ich zu lernen und Spaß zu haben, während ich ein 'scrollendes LED'-Spielzeug für meine Tochter herstelle. Meine Idee dafür ist ganz einfach, ich habe ein Schieberegister (SN74HC595) und 8 LEDs, die davon Eingaben erhalten. Es wird zwei Schaltflächen geben. Wenn Taste A gedrückt wird, fügt sie eine 1 in das Register ein, und wenn B gedrückt wird, schiebt sie eine 0 in das Register. Damit können Sie Ihr LED-Muster programmieren. Und dann wird mit einem weiteren Kippschalter das Schieberegister getaktet (unter Verwendung eines einfachen RC-stabilen Multivibrators) (Schleife von QH 'zu QA). Erstellen des Musters zum Scrollen. Einfach genug.

Aber mein Problem liegt an dem Teil, der das „Einfügen“ von Daten in das Register durchführt. Nehmen wir an, um eine 1 in das Register einzufügen, wenn Taste A gedrückt und losgelassen wird, muss ich zuerst die 'SER' (Daten)-Leitung des Registers hochziehen, dann nach einer kurzen Zeit (Setup-Zeit, 25 ns für die Datenblatt des Registers) ziehen Sie den SRCLK (Schieberegistertakt) hoch. Und das ist es. Jedoch..

Meine Schaltertasten sind entprellt. Ich habe in diesem wunderbaren Artikel etwas über das Entprellen gelernt: Entprellen . Ich hatte keine Teile, die mir bei Hysterese helfen würden, also musste ich es einfach ignorieren. Aber mit den dort angegebenen Methoden konnte ich die genauen Werte meiner Widerstände und meiner Kappe berechnen, um die Spannung genau richtig zu halten, während mein Schalter mit sich selbst klirrt und klopft. Der Schalter springt für 10 ms (habe mir ein billiges O-Scope besorgt, China. Aber macht den Job), also halte ich ihn für etwa 20 ms stabil. Meine Berechnungen und die Ergebnisse der Simulation mit Multisim.com stimmten überein. Meine Tastenentprellung funktioniert also wie erwartet.

Außer, wenn ich versuche, dieses „Signal“ zu verwenden. Ich muss zwei Dinge mit diesem Signal tun. Leiten Sie es zuerst zur SER-Leitung des Registers. Und dann nach einer kurzen Verzögerung (25 ns - ein paar ms?) Leiten Sie es zur SRCLK-Leitung, um es zu takten. Mit anderen Worten, ziehen Sie zuerst SER hoch, dann ziehen Sie SRCLK hoch. Und um diese „Verzögerung“ einzuführen, wandte ich mich dem einzigen Verzögerungsmechanismus zu, den ich kenne – dem RC-Netzwerk. Sobald ich also den entprellten Ausgang bekomme, lade ich eine Kappe über einen Widerstand auf, und diesen geladenen Ausgang verwende ich, um SRCLK anzusteuern.

In dem Moment, in dem dieser neue Kondensator und Widerstand zu meiner „Entprellschaltung“ hinzugefügt wird, gelten meine Berechnungen für den Teilewert nicht mehr, da der neue „Verzögerungs“-Kondensator und -Widerstand jetzt parallel oder seriell geschaltet ist (ich weiß es nicht einmal nicht mehr) mit meinem guten und vorher gut funktionierenden 'Entprell'-Kondensator.

Bei all dieser misslichen Lage frage ich mich, ob die Verwendung eines RC-Verzögerungstimers überhaupt das Richtige ist. Wie verbinde ich den Eingang von einem entprellten Schalter mit einem Knoten, der bereits einen Kondensator hat, ohne alle meine Berechnungen durcheinander zu bringen. Oder um es anders zu formulieren: Wie würden Sie alle eine einfache Verzögerung eines Signals implementieren, ohne alle ausgefallenen Mikrocontroller usw. .?

Hier ist das Schema der Kündigung und Verzögerung. Beachten Sie, dass dies nur die einzelne Taste adressiert (nicht sowohl A als auch B). SW2 im ersten Bild dient nur zum Debuggen.

Bildschirmfoto

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Warum streben Sie eine Einstellzeit von 10 ms an (100 k und 100 n)? Sie könnten 100 kOhm und 1 nF verwenden und immer noch meilenweit über der Mindestgrenze liegen. Elektronik ist übrigens kein Handwerk.
Warum sollte ich eine Einrichtungszeit von 10 ms verwenden? Weil ich dachte, dass es sicherer ist, nicht viel zu nahe an der tatsächlichen Setup-Zeit von 25 ns zu hängen, und diese zusätzlichen paar ms als Sicherheitsmarge hatte, wie ich schon sagte, Laie hier. Ich werde das überdenken. Beifall. PS: Elektronik ist kein Handwerk? :) notiert.
Nur als Referenz, eine Millisekunde ist 1.000.000 Mal länger als eine Nanosekunde. Das ist eine enorme Sicherheitsmarge.
Meine Güte ... Ähm, um ehrlich zu sein, habe ich mich hier sehr verwirrt. Angenommen m = Mikrosekunden. Jetzt verstehe ich, warum Andy „meilenweit entfernt“ gesagt hat. Danke für den Hinweis Michael.

Antworten (2)

Es gibt nur ein Problem: Die von Ihnen verwendete Entprellmethode erzeugt extrem langsam ansteigende und abfallende Signalflanken, und der 74HC595 kann deshalb nicht ordnungsgemäß funktionieren. Das Datenblatt des Chips besagt, dass sich Signalflanken bei einer 5-V-Versorgung schneller als 500 ns / V ändern müssen, sodass für eine 5-V-Änderung während des Übergangs nicht mehr als 2,5 Mikrosekunden benötigt werden dürfen (oder vielleicht 1,5 Mikrosekunden im Bereich zwischen 1,5 V und 3,5 V )

Der Ganssle-Artikel verwendet Widerstände und Kondensatoren, um kurze Spitzen in sich langsam ändernde Spannungen zu filtern, erwähnt aber auch, dass viele Chips es nicht mögen, wenn sie mit langsamen Flanken getriggert werden, und es wird mit einer Schmitt-Trigger-Logik in eine einzelne schnelle Flanke hochgerechnet Tor.

Abgesehen davon können Sie einen Schmitt-Trigger verwenden, um ein Signal für die Dateneingabe zu quadrieren, und danach einfach einen schnellen RC-Filter verwenden, um ein Signal um einige Nanosekunden zu verzögern, und einen weiteren Schmitt-Trigger, um den Taktimpuls zu quadrieren.

Danke für den Hinweis. Dieser Schmitt-Trigger war also aus einem bestimmten Grund da. Ich werde nachschlagen, wie man einen Schmitt-Trigger macht. Verlinken Sie mich mit Ressourcen zu diesem Thema, wenn Sie zufällig welche kennen. Schätzen Sie noch einmal Ihre Vorschläge.
Verwenden Sie für den Schmitt-Trigger zwei Gates von einem 74hc14 in Reihe (der Chip hat 6 Trigger, aber sie sind invertierend, verwenden Sie also den zweiten, um zu Ihrem ursprünglichen Signal zurückzukehren). Es sind nichtinvertierende Schmitt-Trigger verfügbar, aber nur entweder in TTL statt CMOS (z. B. 74ls541 hat Schmitt-Eingänge, aber 74hc541 nicht) oder modernere Chips, die nur in oberflächenmontierten Gehäusen geliefert werden (z. B. 74hc7014).

Ändern Sie Ihre Entprellschaltung um den Faktor 10 - dh verringern Sie die Widerstände um den Faktor 10 und erhöhen Sie den Kondensator auf 1 µF. Jetzt hat die "Entprell" -Schaltung eine (Art) Ausgangs-"Impedanz" im Bereich von 5k-10k, was bedeutet, dass Ihre darauf folgende 100k-Schaltung viel weniger Einfluss auf die Entprellschaltung hat. (Es wird einige haben, aber überschaubarer). Wenn Sie noch mehr Verzögerung benötigen, können Sie Ihrer 100k-Schaltung einen 1M-Widerstand und einen 0,01-µF-Kondensator nachschalten, da Sie HC-CMOS-Eingänge ansteuern, die extrem hohe Eingangsimpedanzen haben.

Ich werde Ihre Entprellschaltung nicht kommentieren, da sie basierend auf Ihren Kommentaren für Sie funktioniert. Ich werde jedoch nur sagen (und möglicherweise falsch sein), dass die Diode in Ihrer Entprellung für mich falsch aussieht (rückwärts). Mein Gedanke geht in die Richtung: "Der Schalter wird viele Male schnell hintereinander gegen Masse kurzgeschlossen", und der erste "Kurzschluss gegen Masse" entlädt den Kondensator durch die Diode (wenn Sie ihn umkehren), aber aufgrund der R's dauert es Zeit Damit der Kondensator zu V + zurückkehrt, bewirken nachfolgende Sprünge nur sehr wenig, da die Spannung an der Kappe immer noch nahe bei Null liegt. FWIW.

Danke für den Vorschlag. Ich weiß es zu schätzen. Korrigieren Sie mich jedoch in Bezug auf die Diode, wenn ich falsch liege, aber mit diesem Setup von Vcc - nach - Gnd ist sie in Vorwärtsrichtung vorgespannt, oder? Wenn der Schalter geschlossen ist und sich die Kappe entlädt, wird sie in Sperrrichtung vorgespannt und es würde kein Strom durch diesen Knoten fließen? Das dachte ich zumindest. Der Zweck der Diode bestand darin, die Ladezeit zu beschleunigen, indem R2 ignoriert wird, wenn der Knopf geöffnet ist.