Gast
#5899808
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
