Portierung Raspberry zu Zynq: Multiplexing klappt nicht

Gast #5899808
Lesenswert?

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
Angehängte Dateien:
Gast #5900912
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren