Forum: FPGA, VHDL & Co. Portierung Raspberry zu Zynq: Multiplexing klappt nicht


von Rüdiger (Gast)


Angehängte Dateien:

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Rüdiger (Gast)


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.

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
Noch kein Account? Hier anmelden.