How to convert 0xffff to -1?

I'm controlling a DAC with Matlab. I want to display the voltage that I'm setting the DAC to. The DAC voltage range is from -10 to 10v and the DAC treats the input value as a signed integer. If I cast 0xffff into int16 Matlab gives me maxint (32767) or if I cast into int32 I get 65535.
For example:
DACsetting = hex2dec('ffff')
%Display the setting
fprintf('%d\n', DACsetting * 10/(2^15 -1));
I can write buch of extra code to work around this, but this should be a very simple thing for a language to do.
DACsetting = hex2dec('ffff')
DACsetting =
65535
>> fprintf('%d\n', DACsetting * 10/(2^15-1))
2.000031e+01
fprintf('%d\n', int16(DACsetting) * 10/(2^15-1))
1
Thanks in advance.

 Risposta accettata

Walter Roberson
Walter Roberson il 25 Giu 2019
typecast(uint16(hex2dec('ffff')), 'int16')

5 Commenti

I want to use the contents of the variable DACSetting as the source rather than the string 'ffff'. DACSetting will be an array of values the DAC will be set to.
James Tursa
James Tursa il 26 Giu 2019
So, instead of using 'ffff' use DACSetting. Is DACSetting a char array, a cell array, or ...?
DACtext = 'ffff';
DACSetting = 10 * (double(typecast(uint16(hex2dec(DACtext)), 'int16')) / 32768);
Thank you all. It looks like I'm going to have to store the DAC commands as a char array and convert when I need them. This was my work around but I had hoped their was some way to make Matlab convert 0xffff to -1. It looks like there isn't.
Thank you once again.
? You showed your input as character vector so that is what I programmed.
MATLAB has no direct 0xffff only '0xffff' or 'ffff' or binary values equivalent to 65535 integer, or double precision representation of 65535. What is your actual input?

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su MATLAB in Centro assistenza e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by