USING THE COMBISCOPE INSTRUMENTS

3 - 33

3.4.3.2Conversion of 16-bit samples to integer

As an example a conversion of a trace of 512 "16-bit" samples is shown. The format is as follows:

trace bytes

# 4 1 0 2 6 <16> <msb 1> <lsb 1> . . . <msb 512> <lsb 512> <checksum> <NL>

trace sample 512 trace sample 1

byte with decimal value 16 number of trace bytes (1026) number of digits of 1026

PROGRAM EXAMPLE:

In this example a trace acquisition of 2 byte samples is done. Thereafter, the trace data is read and converted to integer samples in the array "trace", and the number of trace bytes samples is printed. The conversion from double byte (byte1 = msb and byte2 = lsb) to integer is done as follows (refer to figure 3.12):

If byte1 < 128 then integer = byte1 * 256 + byte2.

If byte1 128 then integer = (byte1 - 256) * 256 + byte2.

Example: byte1 = 255 & byte2 = 32 --> integer = (255 - 256) * 256 + 32 = - 224.

DIM trace(512)

 

Array of 512 integers

DIM response AS

STRING * 1033

Trace response buffer

CALL Send(0, 8,

"*RST", 1)

Resets the instrument

 

 

Sets 16 bit sample data format

CALL Send(0, 8,

"INITiate", 1)

Single shot initiation

CALL Send(0, 8,

"*WAI;TRACe? CH1", 1)

Queries for channel 1 trace

CALL Receive(0,

8, response$, 256)

Reads the channel 1 trace

PRINT "Number of trace bytes ="; IBCNT%

IBCNT% = length of trace buffer

 

 

The contents of the response$ string of this example will be as follows: # 4 1 0 2 6 <16> <msb1> <lsb1> ... <msb512> <lsb512> <sum> <10>

nr.of.digits = VAL(MID$(response$, 2, 1))

nr.of.bytes = VAL(MID$(response$, 3, nr.of.digits)) - 2 PRINT "Number of trace bytes ="; nr.of.bytes sample.length = ASC(MID$(response$, 3 + nr.of.digits, 1)) nr.of.samples = nr.of.bytes / (sample.length / 8)

PRINT "Number of trace samples ="; nr.of.samples FOR i = 1 TO nr.of.samples

J = 2

* i + 2 +

nr.of.digits

Pointer to next sample

byte1

= ASC(MID$(response$, J, 1))

Most Significant Byte

byte2

= ASC(MID$(response$, J + 1, 1))

Least Significant Byte

IF byte1 < 128 THEN

trace(i) = byte1 * 256 + byte2

ELSE trace(i) = (byte1 - 256) * 256 + byte2

END IF NEXT i

Page 52
Image 52
Fluke PM-3370B, PM-3380B, PM-3390B, PM-3394B, PM-3384B user manual Byte1 = ASCMID$response$, J