WTF.... Du hast Recht.
Er tut jetzt so wie es sein soll.
Ich verstehe es trotzdem nicht, warum die Variable diff, ohne cast, richtig ausgegeben wird.
Hier der vollständige code:
Code:
int16_t calculate_pump_current (uint16_t Ua, uint16_t Ua_cal)
{
float diff;
diff = (int16_t)Ua - (int16_t)Ua_cal;
liveData[26] = low(diff);
liveData[27] = high(diff);
return ((diff) / (SENSOR_SHUNT * 8.0) * 1000);
}
Die Variable liveData[...] ist als uint8_t liveData[30] definiert, die dann per usart rausgeschoben wird. Der Empfänger sieht den diff-Wert aber korrekt...
Hab jetzt den ganzen Mist rausgeworfen und nun sieht es so aus:
Code:
int16_t calculate_pump_current (uint16_t Ua, uint16_t Ua_cal)
{
return (((int16_t)Ua - (int16_t)Ua_cal) / (SENSOR_SHUNT * 8.0) * 1000);
}
und rechnet auch richtig.
Danke schön!
Lesezeichen