Forum: FPGA, VHDL & Co. ADC Daten von 2er Komplement in Integer wandeln


von Mark W. (kram) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,

Mein Ziel ist es 16 bit ADC Daten auf dem PC darzustellen.
Die Daten kommen von einem ADS1606 ueber einen ICE40 FPGA und landen 
dann in einer C# App.
Etwas laeuft schief mit den Daten, ich glaube es liegt an meiner 
Umwandlung vom Zweierkomplement zu binaeren Darstellung.

So liefert der ADC mir die Daten:
0x7FFF[FS]
0x0001[1]
0x0000[0]
0xFFFF[-1]
0x8000[-FS]


Und so wollte ich sie haben:
0xFFFF[FS]
0x0000[-FS]

So wandele ich die Daten mit VHDL um:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
...
5
TEMP <= std_logic_vector(unsigned(not(DATA_IN)) + 1);

Im Anhang sieht man, dass die negative Halbwelle um die Haelfte nach 
unten muss und die positive Halbwelle um die Haelfte nach oben.
Dann wuerde es stimmen.
Ich gebe einen Sinus auf den ADC.

von Salomux (Gast)


Lesenswert?

PLUS 0x8000

von Wolfgang (Gast)


Lesenswert?

Mark W. schrieb:
> Im Anhang sieht man, dass die negative Halbwelle um die Haelfte nach
> unten muss und die positive Halbwelle um die Haelfte nach oben.
> Dann wuerde es stimmen.

Dann invertiere einfach das oberste Bit.

von Achim S. (Gast)


Lesenswert?

Mark W. schrieb:
> So wandele ich die Daten mit VHDL um:

lass deine Umwandlung weg und schick die Daten so zum PC, wie der ADC 
sie liefert. Zweierkomplement passt zu dem, was der PC sehen will.

von K. S. (the_yrr)


Lesenswert?

Mark W. schrieb:
> So wandele ich die Daten mit VHDL um:
> ...
> TEMP <= std_logic_vector(unsigned(not(DATA_IN)) + 1);
Damit invertierst du doch alle Zahlen, auch die die schon "positiv" 
waren.

Also entweder ein signed Integer und
Salomux schrieb:
> PLUS 0x8000
das Ergebniss kannst du dann einfach als unsigned interpretieren.

Wenn du die Daten am PC als signed integer einliest, passt es auch 
wieder. Wenn dann wirklich noch ein offset drauf soll, kannst du das 
auch schnell vor dem Plotten machen.

von Mark W. (kram) Benutzerseite


Lesenswert?

Ja, Ihr habt recht. Ich werde das nochmal umbauen.
Das im FPGA funktioniert jetzt auch erstmal.
Jedoch gefaellt mir die Variante, es im PC zu machen auch besser.

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.