I have 9 signals that are read by my GPIO pins and assigned to different variables. I want to read these voltages and send them over CANBus. I thougth about using 8-bit as its first 4 byte to be a counter (to indicate which signal it is) and the last to be the read voltage. But I am confused about the float values. I read some blogs they say use its resolution (Vh-Vl)/2^n and convert them into binary values. I tried something but I am kinda new in embedded programming so I couldn't make it clear in my head.
const float32 TEST_ADC_RES = (float32) (5.0 / 16.0); // defining ADC resolution of 4 bit test message of voltage read
typedef struct
{ // defining my struct
uint32 untMsgCount;
uint32 untADCValue;
} tsTestMessage;
Controller_U.mkub_InArray_bdod.esi_InjCrntTiRaw_v = ((float32)g_ResultEQADCData[TE_ENJ1]) * ADC_RESOLUTION; //this is my first variable
signal_can_msg.untMsgCount = 1;
signal_can_msg.untADCValue = (uint32)Controller_U.mkub_InArray_bdod.esi_InjCrntTiRaw_v / TEST_ADC_RES;
transmitDTOMessage((uint8*)&signal_can_msg);
Controller_U.mkub_InArray_bdod.esi_OilPump1CrntRaw_v = ((float32)g_ResultEQADCData[TE_EOP1]) * ADC_RESOLUTION; //second variable
signal_can_msg.untMsgCount = 2;
signal_can_msg.untADCValue = (uint32)Controller_U.mkub_InArray_bdod.esi_OilPump1CrntRaw_v / TEST_ADC_RES;
transmitDTOMessage((uint8*)&signal_can_msg);
... //continues same for 9 variables.
transmitDTOMessage content:
void transmitDTOMessage(uint8* ptr_uchCCPMessageData)
{
uint8 uchDataIndex = 0;
for (uchDataIndex = 0; uchDataIndex < sizeof(s_sServiceTXBuffer.uchTXDataBuffer); uchDataIndex++)
{
s_sServiceTXBuffer.uchTXDataBuffer[uchDataIndex] = ptr_uchCCPMessageData[uchDataIndex];
}
// Determine transmit message length
s_sServiceTXBuffer.sBufferConfig.uchBufferIndex = sizeof(s_sServiceTXBuffer.uchTXDataBuffer);
transmitFlexCAN(&s_sServiceTXBuffer);
}
Is anyone able to help me? Thanks in advance.