ADC Daten von 2er Komplement in Integer wandeln

Persönliche Seite #6311812
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.
Angehängte Dateien:
#6312193
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren