Auf der Suche nach einem Mehrkanal-Ereigniszähler-IC, um den Schalterbetrieb zu überprüfen

Im Rahmen eines Projekts möchte ich den korrekten Betrieb einer Reihe von SPST-Schalter-ICs (vielleicht 8 oder 16 oder so) testen. Jedes Gerät enthält sechs unabhängige Schalter, die über einen SPI-Bus gesteuert werden. Ich plane, die Schalter bei etwa 10 oder 20 kHz zu betreiben. Ich denke darüber nach, einen kostengünstigen Mikrocontroller (vielleicht einen Arduino MEGA) zu verwenden, um die Schalter zu betätigen und zu zählen, wie oft sie schalten.

Ich denke, ich könnte die 16-Bit-Timer/Zähler des Arduino verwenden, die extern von den zu testenden Schaltern getaktet werden, um zu zählen, wie viele Schaltzyklen tatsächlich auftreten. Die meisten MCUs haben jedoch eine begrenzte Anzahl von Timer-/Zähler-Peripheriegeräten. Der ATmega2560 im Arduino MEGA hat zum Beispiel vier 16-Bit-Timer (vorausgesetzt, ich kann sie alle verwenden).

Da ich mehr als vier Switches überwache (wir könnten etwa 50 einzelne Switches betrachten, die über 16 Geräte überwacht werden sollen), brauche ich eine andere Lösung. Dies mag eine Einkaufsfrage sein, und ich brauche möglicherweise nur den Namen dessen, wonach ich suche, aber gibt es Mehrkanal-Ereigniszähler-ICs, die unabhängig voneinander arbeiten können, mit internen Registern oder Speicher zum Speichern der Zählungen auf jedem Kanal und vielleicht einen Interrupt auslösen, wenn eine bestimmte Anzahl erreicht ist oder sie überlaufen? Danke!

Antworten (2)

Verwenden Sie am besten ein billiges FPGA-Entwicklungsboard. Hier ist eine Liste von ihnen bei Digikey, sortiert nach Preis . Es gibt mehrere im Bereich von 30 $.

Holen Sie sich einen mit genügend I/Os, um die Anzahl der Signale zu verarbeiten, die Sie zählen müssen. Zum Beispiel hat das Lattice MACHXO2-Board über 100 I/Os, die auf 0,1-Zoll-Pin-Header gehen. Es ist über USB programmierbar und die Entwicklungssoftware kann kostenlos heruntergeladen werden.

Was die Programmierung des FPGA betrifft, wäre es am besten, einen festen Takt zu verwenden, die externen Eingänge abzutasten und den Zähler zu inkrementieren, wenn eine steigende Flanke erkannt wird, anstatt zu versuchen, eine große Anzahl externer Takteingänge direkt ansteuern zu lassen . Eine ansteigende Flanke wird erkannt, wenn auf ein 0-Sample ein 1-Sample folgt. Die Taktfrequenz muss mindestens ~4x so groß sein wie die Eingangsfrequenz, und die abgetasteten Eingänge sollten mehrere Registerebenen durchlaufen, um Metastabilitätsprobleme zu vermeiden .

Sie können die FPGA-Logik auch verwenden, um eine SPI- oder I2C-Schnittstelle zu implementieren, um Zähler und Status zu lesen, die Zähler zurückzusetzen usw.

Danke. Dies wäre mein erster Ausflug in die Welt der FPGAs, aber Ihr Ansatz klingt gut. Es klingt also so, als sollte ich alles auf dem FPGA implementieren können. Ich muss mich mit der Programmierung von FPGAs vertraut machen und Verilog lernen, denke ich. Müsste ich zusätzlich zur Implementierung der gesamten Ereignisschleife das SPI-Protokoll manuell bitbangen, oder kann ich mein Projekt aus vorgefertigten Blöcken zusammenstellen? (Ich muss an dieser Stelle wahrscheinlich nur mehr recherchieren.)
Obwohl ich ein C-Programmierer war und Verilog mehr C ähnlich ist, fand ich VHDL leichter zu lernen. Es ist etwas ausführlicher, aber sobald Sie die grundlegenden Strukturen kennengelernt haben, die Register und Zustandsmaschinen synthetisieren, ist es wirklich nicht so schwierig. Sowohl in Verilog als auch in VHDL gibt es viele vordefinierte Funktionsblöcke, die Sie in Ihren Code aufnehmen können, wie z. B. SPI- und I2C-Schnittstellen. Der Lattice MACHXO2-Chip hat sogar eine fest codierte I2C-Schnittstelle eingebaut. Die Entwicklungsumgebungen unterstützen sowohl VHDL als auch Verilog, und Sie können in der Regel in Verilog definierte Blöcke in VHDL-Code einfügen und umgekehrt.

Wenn Sie wirklich versuchen, die Korrektheit zu überprüfen, wenn Sie beispielsweise die Geschwindigkeit erhöhen, können Sie den Ansatz der Signaturanalyse wählen.

Bei jedem Satz neuer Daten in Schieberegister einrasten (74hc165)

Schalten Sie alles durch einen CRC-Generator (74F401).

Wiederholen Sie dies, bis Ihr gesamter Test abgeschlossen ist.

Lesen Sie den Signatur-CRC in Arduinos SPI ein.

(74F401 ist veraltet, aber bei ebay) Der Silego-Teil unten könnte einen I2C-CRC-Generator implementieren


Silego / Dialog SLG46824 sind ein billiges einfaches logisches Gerät, das eine Reihe von Zählern implementieren kann (ich interpretiere es als 7 x 8 Bit + 1 x 16 Bit oder 4,5 x 16 Bit), die Sie vom I2C-Port lesen können.

Sie sind sehr einfach mit der schematischen Programmierung zu erreichen und haben eine 2-5-V-Versorgung.

Sie haben jetzt eine Dip-Adapter-Version, mit der es viel einfacher zu spielen ist als mit dem miserablen kleinen QFN.