Hallo zusammen, ich möchte eine Schaltung, die bisher an einen Raspberry Pi angeschlossen war, an einem FPGA betreiben. Die Schaltung besteht im wesentlichen aus vielen LEDs (~90) und Schaltern (~25), die über ein Multiplex-Verfahren angesteuert werden, das ich in der Theorie leider nicht verstehe. Die LEDs blende ich mal aus, denn die kann ich alle erfolgreich ansteuern, nur beim Auslesen der Schalter hänge ich. Die Schalter sind in 3 Zeilen mit je 12 Spalten angeordnet, es gibt also 3 Zeilenpins, von denen jeweils nur einer aktiv ist, und 12 Spaltenpins. Elektronisch hängt an einem Spaltenpin ein Widerstand von 390 Ohm und an den Zeilenpins ein Widerstand von 1k Ohm. Ein Schalter schließt Zeilen- und Spaltenpin über die Widerstände und eine Diode pro Schalter kurz (siehe Anhang). Zum Auslesen soll genau ein Zeilenpin auf Low geschaltet werden, die anderen beiden auf TriState, was ich über je ein OBUFT steuere. Dann sollen die 12 Spaltenpins auf Input mit Pullup geschaltet werden, ein geschlossener Schalter zeigt sich dann als 0. Das funktioniert auch soweit, allerdings nur, solange ich maximal 5 Schalter beim ZynqBerry oder 4 Schalter beim Pynq aktiviere. Der nächste zieht dann alle Eingänge auf 1, manchmal auch mit einer sichtbaren Verzögerung im Bereich 100ms oder anderen Effekten. Da ich nicht verstehe, wie das Verfahren funktioniert - wenn col1 als Eingang geschaltet ist, wie soll die Diode durchbrochen werden, um row1 als GND zu sehen? - weiß ich auch leider nicht, woran es liegen könnte. Am VHDL-Code liegt es ziemlich sicher nicht, denn im Minimalbeispiel arbeite ich ohne LEDs, steure mit konstanten Signalen die Zeilenpins ein und zähle einfach nur die Signale der Spaltenpins. 4 bzw. 5 Schalter werden gezählt, danach passieren scheinbar zufällige Effekte, egal mit welchen Kombinationen der Schalter. Hat jemand eine Vermutung oder Erklärung? Liegt es daran, dass ein FPGA keine richtigen Pullups hat, sondern einen Stromspiegel o.ä. realisiert, wenn im Constraint ein Pullup gefordert ist? Könnte ich das irgendwie lösen, ohne die Schaltung zu ändern? Viele Grüße Rüdiger
Rüdiger schrieb: > um row1 als GND zu sehen? Dazu muss nichts durchbrochen werden: wenn row1 auf GND liegt und der Schalter geschlossen ist, dann Controller an col1 ein Low-Pegel raus...
Gelöst: Ich habe es heute einem Arbeitskollegen erklärt. Mein Denkfehler lag nicht bei der Diode, die Spannung muss tatsächlich ihre Durchlassspannung überschreiten. Allerdings habe ich nicht bedacht, dass die Pullup-Konfiguration eines Pins dafür sorgt, dass der Eingang auf VCC liegt. Ich habe den Widerstand von 1k auf 220 Ohm angepasst, damit funktioniert es nun auf beiden FPGA-Boards und weiterhin auf dem Raspberry.
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.