Hallo,
das Auslesen eines Spektrometers über rs232 funktioniert anscheinend, jedenfalls bekomme ich nach senden eines Befehls Daten.
In der Anleitung steht folgendes zu den Daten:
GSP (=Befehl) --->Antwort: 32768 equidistant spectrum values as a row of 65536 byte with the following structure:
1. byte
00 _HEX .. FF _HEX
high byte of 1. Spectrum value
2. byte
00 _HEX .. C0 _HEX
low byte of 1. ACF value
(only bit 7 and 6 significant)
.
.
.
usw.
Da ich momentan nur das Spektrum haben will, würde es im Prinzip reichen, jedes 2. Byte zu konvertieren. Da. abwechselnd ein Spektrumwert und Autokorrelationswert ausgegeben wird.
Leider kenn ich mich mit der Konvertierung nicht aus, nehmen wir das erste byte: dieses ist in hexadecimal kodiert, welcher den Bereich 00 bis FF hat?
was nützt mir noch die Aussage, dass es ein high byte ist?
Vielen Dank
' schrieb:Da ich momentan nur das Spektrum haben will, würde es im Prinzip reichen, jedes 2. Byte zu konvertieren. Da. abwechselnd ein Spektrumwert und Autokorrelationswert ausgegeben wird.
Leider kenn ich mich mit der Konvertierung nicht aus, nehmen wir das erste byte: dieses ist in hexadecimal kodiert, welcher den Bereich 00 bis FF hat?
was nützt mir noch die Aussage, dass es ein high byte ist?
Irgendwo muss noch das Low-Byte zum 1. Spektrumwert existieren (kommt das vielleicht als drittes Byte???).
Dazu sollte dir klar sein: eine 16-byte-Integer Zahl besteht aus 2 Byte, wobei eines als High-Byte, eines als Low-Byte bezeichnet wird. Von jedem der Bytes kannst du dir dann die Binär-Darstellung anschauen, also z.B. 3 dezimal = 00000011 binär. So, das kann man sich natürlich auch Hexadezimal anschauen, Bsp: 10 dezimal = 0A Hexadezimal.
MfG, Jens
' schrieb:Irgendwo muss noch das Low-Byte zum 1. Spektrumwert existieren (kommt das vielleicht als drittes Byte???).
Dazu sollte dir klar sein: eine 16-byte-Integer Zahl besteht aus 2 Byte, wobei eines als High-Byte, eines als Low-Byte bezeichnet wird. Von jedem der Bytes kannst du dir dann die Binär-Darstellung anschauen, also z.B. 3 dezimal = 00000011 binär. So, das kann man sich natürlich auch Hexadezimal anschauen, Bsp: 10 dezimal = 0A Hexadezimal.
MfG, Jens
ich sehe grad, dass die einen fehler in der anleitung gemacht haben. das "low byte of 1. ACF value" muss ein "low byte of 1. spectrum value sein.
...und für die Umwandlung HEX-String zu Zahl gibt es in LV eine Funktion:
[
attachment=10930]
' schrieb:...und für die Umwandlung HEX-String zu Zahl gibt es in LV eine Funktion:
[attachment=37996:Konvert.png]
diese funktion ist mir bekannt, aber was bedeutet: high byte of 1. spectrum value?
Ich dachte, das mit High- und Low-Byte hätte ich zu Genüge erklärt?
Dein Spektrometer (welches..., wie wäre es mal, etwas mehr Anleitung hochzuladen?) gibt 32768 Werte zurück. Jeder dieser Werte besteht aus 2 Byte (deshalb 65536 Bytes).
Jeweils 2 Bytes (1x High byte, 1x low Byte) musst du dann aus der Hexadezimal-Darstellung zusammenfassen zu einer 16-bit Zahl. Wie die Reihenfolge genau aussieht, und wieviele Bits von dem Low Byte signifikant sind, ist mir auf Grund deiner dünnen Beschreibung auch nicht klar.
Und was das mit 1st spectrum value bedeuten soll, kann ich dir auch nicht sagen.
MfG, Jens
ja, jetzt hab ich es auch verstanden:)vielen dank. mir war nicht mehr so klar, dass das low byte die genauigkeit der zahl erhöht . im prinzip würde es ja reichen, um eine schnelle datenauswertung zu haben das high byte auszuwerten.
' schrieb:ja, jetzt hab ich es auch verstanden:)vielen dank. mir war nicht mehr so klar, dass das low byte die genauigkeit der zahl erhöht . im prinzip würde es ja reichen, um eine schnelle datenauswertung zu haben das high byte auszuwerten.
Das ist aber eher ein Irrtum. Die CPU-Rechenregister Register haben alle mindestens 16 bit, das Verarbeiten von 8bit Daten ist bestimmt ist nicht schneller als 16bit.