Umwandlung 16-Bit-Vektor nach 8-Bit-Vektor??

Gast #1968881
Hallo allerseits,

ich würde gerne den Inhalt eines 16-Bit-Vektors mittels Terminal am PC 
anzeigen. Dazu habe ich Uart im FPGA eingebaut (Code von Lothar Miller). 
Ich will jetzt nicht Vektor->BCD->ASCII Umwandlung machen. Es geht nur 
darum, den 16-Bit-Vektor ungefähr zu sehen, zur Kontrolle. Dazu würde 
ich den Vektor in ein 8-Bit-Vektor (also Byte) umwandeln und das Byte 
als Zeichen über ser. Schnittstelle an PC schicken und dort hexadezimall 
in einem Terminal anzeigen.

Das Problem ist noch, den 16-Bit-Wert in ein 8-Bit-Zeichen für den Uart 
hineinzubekommen. Wie kann man so eine Umwandlung machen? Ich habe da an 
so eine Möglichkeit gedacht, allerdings weiß ich nicht ob es 
synthesefähig ist und ob dabei das passiert was ich will:
1
signal receive_buff  : std_logic_vector(15 downto 0);
2
signal tx_data_s     : std_logic_vector(7 downto 0);
3
.
4
.
5
.
6
-- Umwandlung
7
tx_data_s <= std_logic_vector(to_unsigned(to_integer(unsigned(receive_buff)),8));
Gast
> Nein, um alle Bits des Vektors.

naja, so stimmt es natürlich nicht, weil 8-Bit-Wert viel ungenauer ist. 
Ich meine der Wert des 16-Bit-Vektors soll umskaliert im 8-Bit-Vektor 
erscheinen.

16-bit(hex)    --->    8-bit(hex)

 0000          --->      00
 1000          --->      10
 FFFF          --->      FF
Gast
> Du willst also nur die 8 MSB?

mmm, nein. Ich kanns irgendwie nicht erklären was ich meine. Also wenn 
der 16-bit-vektor zur Hälfte "belegt" ist, dann soll auch 8-Bit-Vektro 
zur Hälfte belegt sein, das Gleiche gilt auch bei einem Viertel, Achtel 
und allen denkabaren Verhältnissen. Ich hoffe, dass das jetzt 
verständlich ist!
Moderator (Firma: Titel) Persönliche Seite
noips schrieb:
> Ich hoffe, dass das jetzt verständlich ist!
Nein.

Aber ich meine, dass du da einen kapitalen Denkfehler hast:
Du wirst sowieso einen Genaugkeitsverlust bekommen, denn die Information 
von 16 Bits passt ganz einfach nicht in 8 Bits...

> Ich kanns irgendwie nicht erklären was ich meine.
Probiers und fülle die Tabelle aus:
 0000          --->      00
 0080          --->
 00FF          --->
 0180          --->
 1000          --->      10
 1001          --->
 1000          --->
 2000          --->
 8000          --->
 8001          --->
 8181          --->
 FFFF          --->      FF
Gast
noips schrieb:
>> Nein, um alle Bits des Vektors.
>
> naja, so stimmt es natürlich nicht, weil 8-Bit-Wert viel ungenauer ist.
> Ich meine der Wert des 16-Bit-Vektors soll umskaliert im 8-Bit-Vektor
> erscheinen.
>
> 16-bit(hex)    --->    8-bit(hex)
>
>  0000          --->      00
>  1000          --->      10
>  FFFF          --->      FF

Du willst also die "oberen" 8 Bits von deinem 16 bit Vektor ! Damit hat 
dir Lothar die Lösung schon verraten.
Gast
Erstmal Danke für eure Antworten!!

> Aber ich meine, dass du da einen kapitalen Denkfehler hast:

Ich meine nicht.

> Du wirst sowieso einen Genaugkeitsverlust bekommen, denn die Information
> von 16 Bits passt ganz einfach nicht in 8 Bits...

Das ist mir ja klar. Genau das habe ich hier gemeint:

noips schrieb:
>> Nein, um alle Bits des Vektors.
>
> naja, so stimmt es natürlich nicht, weil 8-Bit-Wert viel ungenauer ist.
Gast
Ich probiere es mal so:

Bekannt ist das 16-Bit-Ergebnis einer AD-Wandlung von einem anlogen Wert 
mit 16-Bit-Wandler.

Gesucht ist der 8-Bit-Wert, den ein 8-Bit-Wandler bei gleichem analogen 
Wert ausgeben würde.

Das 8-Bit-Wandler nicht so fein auflöst wie der 16-Bit verstehe ich 
schon. Aber, wie gesagt, es geht mir um eine grobe Darstellung.
Gast
noips schrieb:
> Bekannt ist das 16-Bit-Ergebnis einer AD-Wandlung von einem anlogen Wert
> mit 16-Bit-Wandler.
>
> Gesucht ist der 8-Bit-Wert, den ein 8-Bit-Wandler bei gleichem analogen
> Wert ausgeben würde.

Das wären dann die oberen 8 Bit.

Stells dir so vor, für jede ungenaue Stufe des 8-bit-ADCs hätte der 
genaue ADC 256 Abstufungen (8bit).
:-)
Moderator (Firma: Titel) Persönliche Seite
>> Aber ich meine, dass du da einen kapitalen Denkfehler hast:
> Ich meine nicht.
Oh, doch.... :-o

noips schrieb:
> Gesucht ist der 8-Bit-Wert, den ein 8-Bit-Wandler bei gleichem analogen
> Wert ausgeben würde.
Wenn beide AD-Wandler den selben Messbereich haben (z.B. o..5V), dann 
sind das die 8 MSB.
Nur kann eben der 16-Bit ADC kleine Änderungen noch besser aufteilen. 
Das sind die 8 LSB.
Gast
OK, überredet :-)

Ich sehe meinen Fehler jetzt. Ich habe die AD-Wandlung mit der 
13-Segment-Kennlinie in digitaler Form verwechselt. Da durfte man nicht 
einfach so die unteren Bits weglassen. Aber da ist die Kennlinie auch 
nicht linear.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.