Forum: FPGA, VHDL & Co. 10bit Wert => 4x 7 Segment


von Andi (Gast)


Lesenswert?

Hallo zusammen,

ich habe einen 10bit Wert, den ich gerne auf vier 7-Segment Anzeigen 
ausgeben möchte.

0-1023 sind ja die Werte.

Mir fällt nur eine lange LUT ein, aber ich möchte ungern mir für 1024 
Werte die LEDs zusammen suchen und dann schauen, dass der korrekte Wert 
angezeigt wird.

Gibt es sowas vielleicht schon fertig für VHDL?
Bzw. gibt es vielleicht ein Script oder eine Website, die die LUT 
automatisch generiert?

Meine LEDs sind low-active...

Vielen Dank!
Andi :)

von Falk B. (falk)


Lesenswert?

@Andi (Gast)

>ich habe einen 10bit Wert, den ich gerne auf vier 7-Segment Anzeigen
>ausgeben möchte.

>0-1023 sind ja die Werte.

Scheint so.

>Mir fällt nur eine lange LUT ein, aber ich möchte ungern mir für 1024
>Werte die LEDs zusammen suchen und dann schauen, dass der korrekte Wert
>angezeigt wird.

Das wäre in der Tat mühsam.

>Gibt es sowas vielleicht schon fertig für VHDL?

Wahrscheinlich. Aber was lernst du dabei?

>Bzw. gibt es vielleicht ein Script oder eine Website, die die LUT
>automatisch generiert?

Eher nicht.

Man kann auch die Zahl in die 4 Dezimalziffern zerlegen und dann mit 
einem deutlich einfacheren Dekoder mit 10 Eingangscodes die 10 
7-Segment-Codes generieren. Das Ganze seriell mittels Statemachine 
spart auch noch Hardwareressourcen, da man nur 1 Dekoder braucht. Die 
Division/Modulo Operation muss man halt clever machen oder einfach per 
mehrfacher Subtraktion.

Oder man zeigt die Zahl hexadezimal an, dann muss man nicht die 
einzelnen Ziffern zerlegen, die sind schon da. Noch einfach ist eine 
binäre Anzeige ;-)

Eine schöne Übungsaufgabe.

von Andi (Gast)


Lesenswert?

Eine binäre Anzeige mittels LEDs habe ich schon.
Das Umrechnen zur Kontrolle nervt aber ;)

Ich habe mir jetzt die LUT gebaut, ging doch besser als gedacht mit 
Excel und der Spaltenbearbeitung im Editor.

0-1023 erst in binär umrechnen lassen und damit habe ich meinen Eingang 
der CASE Abfrage.

Das Ergebnis habe ich mir aus Kontanten zusammen gebaut.
1
c_null  : std_logic_vector  := "0000001"; -- low active LEDs
2
c_eins : std_logic_vector  := "1001111";
3
c_zwei : std_logic_vector  := "0010010";
4
-- usw.
5
6
CASE
7
WHEN "0000000000" => s_leds <= c_null & c_null & c_null & c_null;
8
WHEN "0000000001" => s_leds <= c_null & c_null & c_null & c_eins;
9
-- usw. 
10
11
LED0 <= s_leds( 5 DOWNTO  0);
12
LED1 <= s_leds( 6 DOWNTO 11);
13
LED2 <= s_leds(12 DOWNTO 17);
14
LED3 <= s_leds(18 DOWNTO 23);

So sollte das grob passen... mal sehen, ob ich das im FPGA unterbkomme 
:)

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


Lesenswert?

Andi schrieb:
> 0-1023 erst in binär umrechnen lassen und damit habe ich meinen Eingang
> der CASE Abfrage.
Auf gut deutsch also in eine BCD-Darstellung umwandeln. Und das für eine 
schnarchlangsame Anzeige fürs Auge? Da wäre mir ein ROM zu teuer. Mit 
dem Shift-Add-3 Verfahren geht das ressourcenschonender...
Siehe dort:
http://www.lothar-miller.de/s9y/archives/34-Vektor-nach-BCD.html
http://www.lothar-miller.de/s9y/categories/44-BCD-Umwandlung

: Bearbeitet durch Moderator
von Falk B. (falk)


Lesenswert?

@  Lothar Miller (lkmiller) (Moderator) Benutzerseite

>dem Shift-Add-3 Verfahren geht das ressourcenschonender...

Sicher, aber pädagogisch wertvoll war das jetzt nicht . . .

>Siehe dort:
>http://www.lothar-miller.de/s9y/archives/34-Vektor...
>http://www.lothar-miller.de/s9y/categories/44-BCD-Umwandlung

Vorsagen gibt ne Fünf in der Schule!

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


Lesenswert?

Falk B. schrieb:
> Vorsagen gibt ne Fünf in der Schule!
Mitdenken ist angesagt. Es muss ja auch nicht jeder den Pythagoras 
selber herleiten...

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.