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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Mark W. (kram) Benutzerseite


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
...
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)


Bewertung
2 lesenswert
nicht lesenswert
PLUS 0x8000

von Wolfgang (Gast)


Bewertung
1 lesenswert
nicht 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)


Bewertung
2 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.