10bit Wert => 4x 7 Segment

Gast #4566994
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 :)
#4567041
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.
Gast #4567058
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 
:)
Moderator (Firma: Titel) Persönliche Seite #4567082
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.