Hallo zusammen, habe folgende Frage: Wie kann ich einen std_logic_vector nach ASCII wandeln. z.B: Ich messe binär "10101010" und möchte am LCD dez 170 sehen. Habe was über character'vol(conv_integer.... ) gefunden, aber komme grad nicht weiter. In den Conversion Functions steht auch nix drin. Vorab besten Dank! Gruss Stanko
> Ich messe binär "10101010" und möchte am LCD dez 170 sehen. Dann hilft dir ein character nicht unbedingt weiter, denn du kannst einen (VHDL-) character nicht auf FPGA-Portpins ausgeben. Vorher mußt du ihn wieder auf einen Vektor zurückwandeln. Damit das Ganze nicht in eine Konvertierungsorgie ausartet, solltest du es ein wenig binärer betrachten. Du mußt erst mal die einzelnen Dezimalstellen ermitteln. Das hatten wir schon ein paar mal, zuletzt im Beitrag "Durch 10 teilen" Wenn du dann die drei Dezimalstellen in BCD-Darstellung hast, dann stellt du dir die Frage: wie komme ich von binär 00000000 (=0) nach 00110000 (=ASCII-Null)? Hier eine Tabelle zum Thema: dez binär ASCII-binär 0 00000000 00110000 1 00000001 00110001 2 00000010 00110010 3 00000011 00110011 4 00000100 00110100 : Du kannst das Muster leicht erkennen: einfach vor die 4-Bit-BCD-Zahl noch "0011" hängen. Fertig.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
Die formale Beschreibung mit der expliziten Addition bringt gehörigen Mehraufwand in Form dreier Addiere mit ins Spiel (Screenshot). Die entfallen natürlich bei der direkten Concatenation von "0011".
Hallo Lothar, vielen Dank für die Antwort! Hab die Sache grad simuliert und es funktioniert. Die Einbindung ins FPGA ist nur noch Fleißarbeit. Ich sage nur Eins: "Yes, You can!" Gruss Stanko
Gast
#1390545
OffTopic: Mensch Lothar, ich bin ja immer wieder fasziniert, mit wie viel Elan du hier den Leuten die Aufgaben machst... Respekt! Mit deinem Wissen müsstet du ja eine Menge Geld als VHDL-Entwickler verdienen. Darf ich fragen, ob du das auch beruflich machst oder ist das nur ein Hobby?
> Mit deinem Wissen müsstet du ja eine Menge Geld ... verdienen. Ja, wie war das? Ich verdiene mehr als ich bekomme ;-) > Darf ich fragen, ob du das beruflich machst oder ist das nur ein Hobby? Sowohl als auch.
Gast
#3084534
Wenn ich den hier geposteten code verwende geht bei mir die Hunderter Stelle immer nur bis 2. Kann mir irgendwer erklären wieso? Danke mfg michael
Michael schrieb: > Wenn ich den hier geposteten code verwende geht bei mir die Hunderter > Stelle immer nur bis 2. Kann mir irgendwer erklären wieso? Weil die Tabelle nur Einträge bis 255 hat, oder? Konterfrage: WAS willst du machen?
Gast
#3084884
Eine integer bzw. std_logic_vector Zahl auf einem LCD Display ausgeben.
Michael schrieb: > Eine integer bzw. std_logic_vector Zahl auf einem LCD Display ausgeben. Welchen Bereich? 0..99, oder -9999..9999 oder ?...?
Gast
#3085536
Im Bereich von +/-32 Bit
Gast
#3085550
Bei Hexadezimal Anzeige ist das klein und einfach... bei Dezimal wär die Lookup-Tabelle aber 8Gbyte groß. Da ist rechnen besser ... also ne kleine Statemachine ist wohl das beste dafür
Gast
#3085584
Und wie Würde der Ansatz dafür aussehen, bin momentan etwas verwirrt.
Gast
#3085618
Reche doch mal selber auf nem Blatt Papier ... Beitrag "HEX2BCD Code - Frage zum Ablauf" Dann ne eigen Statemachine mit countern, Registern und Subtrahierern oder nen Picoblaze. Man muß halt gucken wie oft die einer(Milliarden) reingehen (Dividieren bzw. zählen wie oft 1.000.000.000 subtrahiert werden können ohne das das Ergebnis negativ wird, dann Zählstand notieren im Register und man hat die einer Miliarden) dann die Hunderter Millionen usw. das Ergebins sollte also nie größer als 9 sein. also brauchst du im worst case ca 100 durchläufe ... Ach ne du wilst ja auch negative Zahlen haben, na dann ... und jetzt bist du dran ...
Michael schrieb: > Im Bereich von +/-32 Bit Das passt nicht in einen "üblichen" Integer... Uwe schrieb: > Man muß halt gucken ... was schon dazu geschrieben wurde: https://www.mikrocontroller.net/search?query=bcd+umwandeln&forums[]=9&sort_by_date=1 > also brauchst du im worst case ca 100 durchläufe ... Es geht schneller: Beitrag "Schnelle Conversion bin2dec"
Gast
#3085794
>also brauchst du im worst case ca 100 durchläufe ... >>Es geht schneller: Beitrag "Schnelle Conversion bin2dec" Jupp aber ich meinte auf dem Papier bzw. so wie ebend geschrieben. Zudem soller erst mal das Grundlegende Prinzip verstehen und kein optimiertes Design vorgelegt bekommen. Selber nachdenken schadet nicht ...
Uwe schrieb: > Jupp aber ich meinte auf dem Papier bzw. so wie ebend geschrieben. > Zudem soller erst mal das Grundlegende Prinzip verstehen Ja, da könnte man selber draufkommen. Oder zumindest versuchen, zu verstehen, warum der obige Code nur bis 255 funktioniert, oder zumindest den Post und die Links darin (wie z.B. denjenigen im Beitrag "Re: std_logic_vector zu ASCII wandeln") zu lesen und nachzuvollziehen, um was es da geht...
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
