VHDL Matrix Duo LED´s

Gast #2876364
Lesenswert?

Hallo,
ich bräuchte bitte eure Hilfe.

Ich muss für die FH ein Projekt machen. Dabei bekommen wir ein Altium 
Live Design Board.
Ich möchte eine 7x6 Duo LED Matrix ansteuern um dann Vier Gewinnt darauf 
zu programmieren.

Ist es besser, zwei MAX7219 Displaytreiber dafür zu verwenden oder das 
Multiplexing Softwaretechnisch zu regeln, da ja 36 I/O´s vorhanden sind?

Wenn ich die MAX7219 verwende, muss ich dann die gemeinsamen Kathoden an 
beide Treiber anschließen oder wie ist dann der Ablauf?

Wenn ich die LED´s direkt betreibe reichen ja Transistoren vor allen 
Reihen und Spalten. Aber auf was muss ich dann bei der Programmierung 
achten?


Vielen Dank
Patrick
Moderator (Firma: Titel) Persönliche Seite #2876381
Lesenswert?

Patrick schrieb:
> Ist es besser, zwei MAX7219 Displaytreiber dafür zu verwenden oder das
> Multiplexing Softwaretechnisch zu regeln, da ja 36 I/O´s vorhanden sind?
Soso softwaretechnisch also... hmmm...
Warum willst du diese schnuckelige kleine Matrix nicht einfach direkt 
als VDHL-Beschreibung ins FPGA machen?

> Aber auf was muss ich dann bei der Programmierung achten?
Dass du eine Hardware beschreibst. Mit welcher Sprache eigentlich?
Oder willst du einen Softcore verwenden?
Ich schlage vor, du malst einfach mal ein Bildchen, wie du dir das 
vorstellen könntest...
Gast #2876426
Lesenswert?

Danke für die schnellen Antworten,
Die Matrix besteht aus Duo LEDs mit gemeinsamer Kathode.
Programmiert wird in vhdl.

Wie kann ich denn die Matrix über die Ausgänge definiert werden? Dann 
muss doch auch gemultiplext werden oder?
Moderator (Firma: Titel) Persönliche Seite #2876449
Lesenswert?

Patrick schrieb:
> Wie kann ich denn die Matrix über die Ausgänge definiert werden?
Wie nochmal? Da stimmt was orthografisch nicht...

Es ist doch so, dass du eine Matrix hast, bei der z.B. die Kathoden von 
jeweils 7 LED gemeinsam in den 6 Zeilen hängen. Damit hast du eine 14x6 
Matrix und damit auf dem FPGA 20 Ausgänge.
Etwas weniger Ausgänge brauchst du, wenn du jeweils 6 Kathoden pro 
Spalte zusammenfasst: 12+7 = 19.

> Dann muss doch auch gemultiplext werden oder?
Ja klar, eine Matrix muss gemultiplext werden...

Mal eine grundlegende Frage: Was hast du mit VHDL bisher gemacht?
Gast #2876460
Lesenswert?

Du hast geschrieben, warum ich es nicht als vhdl-Beschreibung mache.
Und genau das war ja meine frage. Ob es so besser ist oder ob ich die 
beiden displaytreiber nehmen soll.
Ich habe nur die Grundlagen von vhdl drauf. Wir sind aber eine Gruppe 
mit mehreren, die programmieren können.
Ich versuche derzeitig nur, das Projekt auf die eine zu stellen und 
möglichst viele fragen zu klären.

Und ich entschuldige mich für meine Unprofessionalität Ausdrucksweise 
aber ich stehe eben noch am Anfang der microcontroller und fpga 
Programmierung
Moderator (Firma: Titel) Persönliche Seite #2876485
Lesenswert?

Patrick schrieb:
> Du hast geschrieben, warum ich es nicht als vhdl-Beschreibung mache.
> Und genau das war ja meine frage.
Du hast ja z.B. ein FPGA-Board bekommen. Damit ist klar, dass du die 
Aufgabe mit einem FPGA lösen sollst. Hat dir dein Prof da nicht noch ein 
paar Hinweise gegeben, wie er es gerne möchte? Hast du in dem Fach, in 
dem die Projektarbeit verfasst wird, eher was mit "Programmieren" oder 
eher was mit "Hardware" zu tun?

Denn du könntest
1. das alles mit VHDL auf ein FPGA packen,
oder du könntest
2. einen Mikrocontroller aufs FPGA klatschen und das alles in Software 
machen,
oder du könntest
3. die Displayansteuerung in Hardware mit VHDL machen und den 
Algorithmus in Software.
Gast #2876495
Lesenswert?

Wir sollen mit Hilfe des Boards ein Spiel programmieren. Eine sehr 
offene Aufgabenstellung also.

Ok, unter deinen genannten Bedingungen handelt es sich dann wohl um die 
Nummer 1 bei der wir das Programm in vhdl aufs fpga klatschen und damit 
unsere Matrix ansteuern.

Also vor die Reihen und Spalten Widerstände und Transistoren löten.
Und vhdl technisch die Matrix ansteuern?
Moderator (Firma: Titel) Persönliche Seite #2876620
Lesenswert?

Patrick schrieb:
> Also vor die Reihen und Spalten Widerstände und Transistoren löten.
> Und vhdl technisch die Matrix ansteuern?
Das wird wohl die Absicht sein. Und so würde ich das auch machen.

Und dann kommt die Frage:
Und wie gebe ich meine Züge ein?
Wer SPIELT das Spiel?
Mensch gegen Mensch auf dem LED-Speilbrett, oder auch Mensch gegen FPGA?
Denn wenn das FPGA auch nocht die Spiellogik abhandeln muss, dann wirds 
knackiger...
Moderator (Firma: Titel) Persönliche Seite #2877111
Lesenswert?

Patrick schrieb:
> Die Züge werden mit Tastern unter jeder Spalte gesetzt.
Also: 7 Eingänge entprellen und Flankenerkennung.
Zurücksetzen könnte man ein Spiel dann z.B. über das gleichzeitige 
Betätigen der äusseren beiden Taster.

> Gespielt wird im Zweispieler Mensch gegen Mensch Modus
Musst du dann im FPGA den Gewinner ermitteln, oder macht du nur eine 
simple Anzeige?
Gast #2877238
Lesenswert?

Müssen die Taster hardwareseitig entprellt werden?

Zum Zurücksetzen haben wir einen 8. Taster eingeplant.

Und sobald eine Viererreihe erkannt wurde blinkt die Viererreihe 
abwechselnd in der Spielsteinfarbe und der Mischfarbe Gelb.
#2877451
Lesenswert?

Patrick schrieb:
> Wie kann ich denn die Matrix über die Ausgänge definiert werden? Dann
> muss doch auch gemultiplext werden oder?

Ich weiss nicht, was Dir an HW zur Verfügung steht. Und was Du für Duty 
Cycles Du einhalten musst, um die LED's des Displays mittels 
multiplexing sinnvoll zum Leuchten zu bringen weiss ich ebenfalls nicht.

Aber wie wäre es, wenn Du ein SPI-Register einsetzt und jede LED 
statisch ansteuerst?
Gast #2882347
Lesenswert?

Hallo,
ich habe jetzt einen Schaltplan erstellt. Ist der in Ordnung oder habe 
ich einen Fehler gemacht?

Ich habe auch die Vorwiderstände der Reihen berechnet:

Nennstrom: 20mA
Vorwärtsspannung: rot 2,0V / grün 2,2V
Spalten: 1:7
Zeilen: 12

Zeilenstrom: 140mA
Spaltenstrom: 1680mA
Vorwiderstand: rot 11,43 Ohm / grün 10 Ohm
Verlustleistung: rot 224W / grün 196W

Die LED´s vertragen aber nur einen Pulsstrom von 150mA. Wie muss ich die 
Werte verstehen und was muss ich an meiner Schaltung ändern?
Und 200W als Verlustleistung der Widerstände ist auch komisch oder?

Könnt ihr mir auch sagen ob man das Platinenlayout so machen kann?


Danke für eure Hilfe
Patrick
Moderator (Firma: Titel) Persönliche Seite #2882518
Lesenswert?

Patrick schrieb:
> Die LED´s vertragen aber nur einen Pulsstrom von 150mA. Wie muss ich die
> Werte verstehen und was muss ich an meiner Schaltung ändern?
Das bedeutet, dass keine einzelne Led im Pulsbetrieb mehr als 150mA 
abbekommen darf.

> Und 200W als Verlustleistung der Widerstände ist auch komisch oder?
Das ist entweder Bedenklich oder Falsch. Hoffentlich das Zweitere...

> Vorwiderstand: rot 11,43 Ohm / grün 10 Ohm
Zum Glück: falsch...

> Ich habe auch die Vorwiderstände der Reihen berechnet:
> Zeilenstrom: 140mA
Es steht nirgends, dass eine LED mit 20mA betrieben werden muss.
> Spaltenstrom: 1680mA
Wie kommst du auf diese Werte?
Zeig mal deinen Rechenweg...
Als Tipp: du wirst niemals alle LEDs einer Zeile gleichzeitig 
ansteuern.

Die Beschaltung der Transistoren für die Zeilen solltest auch noch mal 
überdenken. Überleg mal, welche IO-Spannung das FPGA hat, und wie gut 
oder schlecht damit diese Transistoren angesteuert werden können...
Gast #2882624
Lesenswert?

Ich habe mir den LED Matrix Artikel schon mehrmals durchgelesen und habe 
nach gegebener Rechnung folgende Werte für Rot erreicht:

Izeil=Inenn*N=20mA*7=140mA
Ispl=Inenn*N*S=20mA*7*12=1680mA
Rv=U/I=(Vcc-Usat-Ube-Uf)/(Inenn*N)=(5V-0,7V-0,7V-2,0V)/(20mA*7)=11,43Ohm
Pv=Ispl²*Rv=140mA*140mA*11,43Ohm=224,03W


Was meinst du mit überdenken, der Zeilenbeschaltung?
Das FPGA schaltet 5V an den I/O Pins.

Verstehe leider nicht auf was du raus willst und vorallem welche Werte 
ich erreichen, berechnen muss

Danke
Patrick
Moderator (Firma: Titel) Persönliche Seite #2882772
Lesenswert?

Patrick schrieb:
> Pv=224mW
Ok, das passt jetzt. Deine Annahmen stimmen soweit, nur die Leistung war 
um den Faktor tausend zu hoch.

> Das FPGA schaltet 5V an den I/O Pins.
Bist du sicher? Wie geht das.
Heutige FPGAs haben bestenfalls noch 3,3V am IO-Pin. Wenn das FPGA z.B. 
nur 3,3V ausgibt, dann bleiben nach dem Zeilentransistor gerade noch 
2,8V und dann nicht mehr viel für die grüne LED...
Gast #2882802
Lesenswert?

Lothar Miller schrieb:

> Bist du sicher? Wie geht das.
> Heutige FPGAs haben bestenfalls noch 3,3V am IO-Pin. Wenn das FPGA z.B.
> nur 3,3V ausgibt, dann bleiben nach dem Zeilentransistor gerade noch
> 2,8V und dann nicht mehr viel für die grüne LED...

Habe im Datenblatt nachgelesen. Das FPGA Board hat einen Spartan 3 von 
Xilinx und schaltet 4,4V.

Ich habe den Schaltplan jetzt geändert.
Nur die Widerstandswerte muss ich noch richtig berechnen.

Ist der Schaltplan dann so korrekt?
Welche Basiswiderständen benötigen die Spaltentreiber dann?


Danke
Patrick
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #2882900
Lesenswert?

Patrick schrieb:
> Das FPGA Board hat einen Spartan 3 von Xilinx und schaltet 4,4V.
Ein Spartan3 kann keine 4,4V am Ausgang treiben.

> Habe im Datenblatt nachgelesen.
Wo?

> Ich habe den Schaltplan jetzt geändert.
Uups, das ist schon gewagt, einem FPGA-Pin direkt die 150mA zuzumuten. 
Da war die Lösung mit den Zeilentreibern nicht schlechter (evt. sogar in 
Emitterschlatung mit pnp-Transistoren). Nur müsste da noch ein 
Pegelwandler dazwischen, um von den 3,3V auf 5,5V zu kommen. Mit 
normalen CMOS Invertern ist da viel zu machen....
Gast #2882990
Lesenswert?

Wenn ich doch Transistoren verwende kann ich die 5V der 
Spannungsversorgung verwenden.

Was ist denn der Nachteil meiner ersten Schaltung mit den NPN 
Transistoren?

Wie viele mA kann denn ein Ausgang des Spartan 3 treiben und vorallem 
wie viel insgesamt?
Moderator (Firma: Titel) Persönliche Seite #2883004
Lesenswert?

Patrick schrieb:
> Wie viele mA kann denn ein Ausgang des Spartan 3 treiben und vorallem
> wie viel insgesamt?
Was steht denn im Datenblatt?

> Was ist denn der Nachteil meiner ersten Schaltung mit den NPN
> Transistoren?
Nachteil: unnötiger Spannungsabfall über den Zeilentransistoren.
Vorteil: schnelleres Schaltverhalten durch den linearen Betrieb.
Gast #2883055
Lesenswert?

Ich habe folgende Werte als wichtig empfungen im Datenblatt?!

Absolute Maximum Ratings:
Vcco(Output driver supply voltage relative to GND)= 3.75V
Iik(Input clamp current per I/O pin)= +-100mA

General Recommended Operating Conditioins:
Vcco(Output driver supply voltage relative to GND)= 3.465V
Moderator (Firma: Titel) Persönliche Seite #2883091
Lesenswert?

Patrick schrieb:
> Ich habe folgende Werte als wichtig empfungen im Datenblatt?!
> Absolute Maximum Ratings:
Die sind für die Entwicklung an sich unwichtig. Sie dürfen nur niemals 
erreicht oder überschritten werden!

> General Recommended Operating Conditioins:
> Vcco(Output driver supply voltage relative to GND)= 3.465V
Das ist die Empfehlung. Aber die Gretchenfrage ist: was hast du beim 
Nanoboard an Vcco tatsächlich? Denn maximal diese Spannung wird am 
IO-Pin herauskommen können.
Moderator (Firma: Titel) Persönliche Seite #2883946
Lesenswert?

Patrick schrieb:
> Aber in der ANleitung finde ich irgendwie nicht den passenden Wert
Du musst im Schaltplan des Livedesign Boards suchen...
http://www.altium.com/community/nanoboard-resources/livedesign-evaluation-boards/en/livedesign-evaluation-boards_home.cfm

Beim Xilinx-Board ist Vcco = 3,3V:
http://www.altium.com/files/livedesign/livedesign_eb_schematics-xilinx_spartan.pdf
Gast #2883980
Lesenswert?

Ok, danke
Das heißt, dass nicht genug Spannung für die Dioden übrig bleiben wird, 
wenn ich Bon Transistoren für die Zeilen verwende?!

Wäre es eine gute Lösung, meinen v1.1 Schaltplan zu verwenden und den 
Zeilenstrom auf 100mA zu begrenzen?

Welche Spaltentransistoren muss ich verwenden? Die müssen ja dann 1,2A 
schalten.

Danke
Patrick
Gast #2884079
Lesenswert?

Patrick schrieb:
> Wäre es eine gute Lösung, meinen v1.1 Schaltplan zu verwenden und den
> Zeilenstrom auf 100mA zu begrenzen?

Du erwartest wirklich, dass 100mA aus einem FPGA-IO rauskommen???

Such doch einfach mal nach LED-Matrix hier im Forum. Es gibt hunderte 
Beiträge die sich mit dem gleichen Problem beschäftigen. Ob es nun ein 
µC-IO oder ein FPAG-IO ist - bei normalen LEDs reicht der Strom nicht 
aus um eine komplette Zeile zu betreiben.

Gruss Christoph
Moderator (Firma: Titel) Persönliche Seite #2884141
Lesenswert?

Patrick schrieb:
> Welche Spaltentransistoren muss ich verwenden? Die müssen ja dann 1,2A
> schalten.
Nimm n-Kanal-Mosfets...

Ich würde Zeilentreiber so machen:
1
                     5V     5V
2
                     o      o
3
                     |      |
4
                    10k     Rv (22R)
5
                     |      |
6
                     |    |<
7
                     o----|    pnp
8
                     |    |\
9
 FPGA  --4k7---|<----'      '-------->> Zeile
10
0/3,3V      Led rot (Uf=1,5V)
Die rote LED nimmt quasi die "Pegelwandlung" vor...  ;-)

> Wäre es eine gute Lösung, meinen v1.1 Schaltplan zu verwenden und den
> Zeilenstrom auf 100mA zu begrenzen?
Wenn dir die Helligkeit dann noch ausreicht....

Peter K. schrieb:
> Transistorengrab weglassen und ein SPI-Schieberegister benutzen
Wenn man ein FPGA mit sehr vielen freien IO-Pins hat?
Gast #2884148
Lesenswert?

Patrick schrieb:
> Ok, und wenn ich an den Zeilen die npn Transistoren verwende und am
> Kollektor die 5V vom Board anschließe?

Lothar Miller schrieb:
> Heutige FPGAs haben bestenfalls noch 3,3V am IO-Pin. Wenn das FPGA z.B.
> nur 3,3V ausgibt, dann bleiben nach dem Zeilentransistor gerade noch
> 2,8V und dann nicht mehr viel für die grüne LED...

Wenn an der Basis 3,3V anliegen und über die Basis-Emitter-Diode ~0.6V 
abfallen kannst du am Kollektor 5V, 7V, oder 12V anschliessen - die 
Spannung am Emitter bleibt immer gleich!

Es gibt auch noch andere Transistoren als NPN!

Gruss Christoph
Moderator (Firma: Titel) Persönliche Seite #2884271
Lesenswert?

Patrick schrieb:
> Dann hat die LED 3,3V-0,7V-0,7V=1,9V
> Funktionieren würde es ja dann trotzdem oder?
Wie denn, wenn die erst bei 2,5V leuchtet...
Und vor Allem: LEDs werden nicht mit Spannung betrieben. Eine Spannung 
stellt sich nur ein, weil ein bestimmter Strom durchgeschickt wird.

> Dann hat die LED 3,3V-0,7V-0,7V=1,9V
Die zweiten 0,7V sind bezogen auf deinen ersten Plan mit npn-Transen 
nicht vorhanden. Der Fehler war schon oben in der Rechnung mit drin...

> Der Aufwand für zusätzliche Beschaltung ist schon groß.
Von nix kommt nix. Wenn du den LED-Strom auf 10mA reduzierst, dann 
kannst du die Zeilentransistoren auch ganz weglassen. Die Anzeige wird 
dann halt hübsch schummerig...
Moderator (Firma: Titel) Persönliche Seite #2884479
Lesenswert?

Uwe schrieb:
> Digitaltechnik wäre besser.
LEDs und Transistoren sind sogar analoge Bauteile...

Patrick schrieb:
> Wenn die zweiten 0,7V falsch sind dann reicht die Spannung doch oder?
Für was reicht die Spannung? Sie muss für einen halbwegs konstanten 
Strom reichen, wenn die sich LED-Spannung z.B. zwischen 2,5 und 2,8V 
(z.B. wegen der Temperatur) ändert...

> Wie viel mA kann denn der Controller direkt ausgeben?
Was sagt das Datenblatt zum FPGA?
Gast #2884598
Lesenswert?

> Wäre es eine gute Lösung, meinen v1.1 Schaltplan zu verwenden und den
> Zeilenstrom auf 100mA zu begrenzen?

Etwas Elektronik Kenntnisse wären auch von Vorteil.
RTFM ! Datenblätter lesen vom FPGA bzw. Handbuch und Schaltpläne vom 
Board !
Gast #2893320
Lesenswert?

Vielleicht versucht Ihr Euch erstmal an einer kleineren Matrix (z.B. 
4x4)?
Die ist schnell aufgebaut und umgeändert, wenn doch mal was nicht so 
geht wie berechnet. Außerdem: Das was Ihr dort an Erfahrung sammelt, 
könnt Ihr dann in die große Matrix einfließen lassen.

Duke
Moderator (Firma: Titel) Persönliche Seite #2896052
Lesenswert?

Patrick schrieb:
> Könnt ihr mir sagen, ob die Schaltung so funktionieren wird?
Sie wird genausogut wie deine 2x2 Martix funktionieren.

Aber trotzdem: Widerstände um 18..20 Ohm wären mir viel zu 
niederohmig. Als Hintergrund: eine ideale Stromquelle hat einen 
unendich großen Innenwiderstand (und LEDS sollten aus einer 
Stromquelle versorgt werden).
Gast #2897786
Lesenswert?

Ok jetzt hab ichs probiert und weiß was ihr meint.

Habe die Schaltung aufgebaut und ein bisschen rumgemessen.

...deswegen habe ich 2,5V an Kollektor Emitter?



Aber wie verhalten sich die Spaltentransistoren dann?

Da werden doch auch die 3,3V-0,6V an den Emitter geschaltet, welcher auf 
GND liegt?
Moderator (Firma: Titel) Persönliche Seite #2897808
Lesenswert?

Patrick schrieb:
> Da werden doch auch die 3,3V-0,6V an den Emitter geschaltet, welcher auf
> GND liegt?
Nein, es wird ein Strom in Höhe von (3,3V-0,6V)/3,3k = ca. 0,8mA in die 
Basis geschickt. Der Transistor verstärkt diesen Strom theoretisch um 
den Faktoer 300. Und schaltet damit so gut wie möglich durch. Fazit: der 
Kollektor (an dem ja die LED hängt) kommt (je nach Übersteuerung) bis 
auf 100mV an GND ran (Stichwort: Ucesat)...
Gast #2898770
Lesenswert?

Nach meinen bisherigen Berechnungen habe ich festgestellt, dass ich ein 
externes Netzteil benötige.

Kann ich ein 5V Netzteil einfach mit Stecker anschließen oder müssen 
noch Kondensatoren/ Spulen zur Stabilisierung verbaut werden?


Danke
Patrick
Gast #2966871
Lesenswert?

Für den Ausgang des FPGAs ist es unerheblich, wie sauber die Spannung 
ist. Trotzdem sollte sie stabil genug sein. Die DCDC Wandler haben 
Datenblätter, wie man das dimensionieren muss. Das passt dann schon.

Für Deine Matrix empfehle ich einen billigen FPGA mit gekoppelten 
Ausgängen als Teiber: Ein Spartan 3A 50 hat genug Ausgänge, um die 
gesamte Matrix zu treiben. Nimm einfach 2 Ausgänge parallel.

Die Ausgänge halten das locker aus, weil sie nur 5mA treiben (bei 10mA 
je LED). Der FPGA packt das bei 64 LEDs auch noch - gfs mit Kühlkörper.

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