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:
> 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 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!
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
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.
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.
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.
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).
:-)
>> 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.
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.