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 :)
@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.
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 :)
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
@ 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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.