Simulink: 4 bytes to float
47 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hello!
I am sending with a microcontroller a float value (i.e. 145.2322308) as 4 bytes over Serial. I get the data in Simulink with " Serial Receiver" but I don't know how to combine the 4 bytes I am receiving in one variable of 32 bits and be able to scope the value 145.2322308.
With each serial package I send three values [float , float , long \CR]. I have tried different approaches but I can only scope the value of the bytes:
Thank you in advance for your help!
0 comentarios
Respuestas (2)
Jonas
el 16 de Feb. de 2021
Editada: Jonas
el 16 de Feb. de 2021
Another way is to construct your output manually with 'Shift Arithmetic' blocks and perform bitshifts:
The input to the left you see is a vector of 4 bytes of type uint8.
Inside the MATLAB function is the following code, since no block exists to perform a typecast:
function single_value = typecast_int32_to_single(int32_value)
single_value = typecast(int32_value,'single');
3 comentarios
Jonas
el 16 de Feb. de 2021
@Walter Roberson Yes, also works! I tested and found that the swapbytes() was necessary as you mentioned.
So the MATLAB Function becomes:
function single_value = typecast_int32_to_single(uint8_buffer)
single_value = swapbytes(typecast(uint8_buffer,'single'));
I do find the generated code of my first suggestion a bit nicer:
compared to the integrated MATLAB Function:
So personally I am going to keep using my implementation with the bitshifts because I generate code from it.
Jonas
el 16 de Feb. de 2021
Use the Byte Unpack block and feed those 4 bytes into it after you have muxed them. Set Output port data type to {'single'} if you want to reconstruct a 32-bit float.
0 comentarios
Ver también
Categorías
Más información sobre Messages en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!