Forum: FPGA, VHDL & Co. Messwertkonvertierung, Rechnen in VHDL


von Torben S. (torben_s)


Lesenswert?

Hallo,

beim Versuch Messwerte zu konvertieren, stehe ich momentan auf dem 
Schlauch...

Mein Problem:

Ich lese auf einem Nexys4 Board mit dem XADC zwei Messwerte ein. Das ist 
zum einen der Wert des internen Temperatursensors und der Wert eines 
externen Sensors. Diese Werte möchte ich nun konvertieren, sodass ich 
sie über eine Sieben-Segment-Anzeige darstellen kann.

Für die Sieben-Segment-Anzeige und die Ansteuerung des XADC habe ich 
bereits Module geschrieben, die wie ich meine, auhc funktionieren. Um 
sicherzugehen, dass es nicht am XADC liegt, gebe ich konstant den 12-Bit 
Wert "101010101010" aus und versuche damit meine Konvertierung zu 
erstellen.

Ich glaube, das Problem liegt in meiner Umrechnung, die wie folgt 
aussieht:
1
-- i_data_adc_1 = integer, Data_In 12 Bit Standard Logic Vector
2
i_data_adc_1 <= (CONV_INTEGER(Data_In) / 8) - 273;
3
-- Wert der 100er Stelle bestimmen
4
count := 0;
5
for i in 1 to 9 loop
6
 if i_data_adc_1 > 99 then
7
  i_data_adc_1 <= i_data_adc_1 - 100;
8
  count := count + 1;
9
 else
10
  exit;
11
 end if;
12
end loop;
13
-- data_adc_1_100s 6 Bit Vector der 100er Stelle enthält
14
data_adc_1_100s <= std_logic_vector(to_unsigned(count, data_adc_1_100s'length);
15
.
16
.
17
.

Genauso wie die 100er Stelle lese ich die 10er und 1er Stelle ein... 
Allerdings erscheint auf meiner Anzeige immer der Wert "0" für alle drei 
Stellen...

Ich hoffe jemand versteht mein Problem und kann mir aufzeigen, wo ich 
falsch denke...

Danke!

Gruß, Torben

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


Lesenswert?

Torben S. schrieb:
> Ich hoffe jemand versteht mein Problem und kann mir aufzeigen, wo ich
> falsch denke...
Ja, ich weiß genau welches Problem du hast: du denkst nicht in Hardware, 
sondern schreibst etwas so dahin wie in einer Programmiersprache.
Nur ist VHDL eben keine Programmiersprache, sondern eine 
Hardwarebeschreibungssprache. Du brauchst aber, um etwas beschreiben zu 
können, eine konkrete Vorstellung oder ein geistiges/reales Bild von dem 
was du machen willst.

So. Genug der Theorie: du willst eine Binärzahl in Dezimalstellen 
umwandeln. Dein Stichwort ist BCD-Umwandlung. Sieh dir mal an, wie ich 
das mache und überlege dir, warum ich das so mache:
http://www.lothar-miller.de/s9y/categories/44-BCD-Umwandlung

: Bearbeitet durch Moderator
von Torben S. (torben_s)


Lesenswert?

Lothar Miller schrieb:
> Torben S. schrieb:
>> Ich hoffe jemand versteht mein Problem und kann mir aufzeigen, wo ich
>> falsch denke...
> Ja, ich weiß genau welches Problem du hast: du denkst nicht in Hardware,
> sondern schreibst etwas so dahin wie in einer Programmiersprache.
> Nur ist VHDL eben keine Programmiersprache, sondern eine
> Hardwarebeschreibungssprache. Du brauchst aber, um etwas beschreiben zu
> können, eine konkrete Vorstellung oder ein geistiges/reales Bild von dem
> was du machen willst.

Allerdings dachte ich, dass die Vorstellung so funktioniert...

Lothar Miller schrieb:
> So. Genug der Theorie: du willst eine Binärzahl in Dezimalstellen
> umwandeln. Dein Stichwort ist BCD-Umwandlung. Sieh dir mal an, wie ich
> das mache und überlege dir, warum ich das so mache:
> http://www.lothar-miller.de/s9y/categories/44-BCD-Umwandlung

Vielen Dank! Es funktioniert! Falls jemand ein ähnliches Problem hat, 
hier https://www.youtube.com/watch?v=VKKGyOc4zRA wird es auch gut 
erläutert.

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.