Hallo zusammen,

ich ein sehr dubioses Problem und zwar rechnet eine Funktion falsch..

Hier ist erstmal die Funktion:

Code:
#define SENSOR_SHUNT 61.9

int16_t calculate_pump_current (uint16_t Ua, uint16_t Ua_cal)
{
    float diff;
    diff = Ua - Ua_cal;

    
    return (int16_t)(diff / (SENSOR_SHUNT * 8.0) * 1000);
}
Ua und Ua_cal sind Spannungen, in Millivolt zwischen 0 und 5000 (also 0V und 5V)

Nun zum Problem:

Wenn diff negativ ist, rechnet er einen Blödsinn zusammen.

Beispiel für falsche Berechnung:
Ua = 750
Ua_cal = 1500
Berechneter Wert ist: -222
Erwarteter Wert: -1515

Beispiel für korrekte Berechnung:
Ua = 3000
Ua_cal = 1500
Berechneter Wert ist: 3029
Erwarteter Wert: 3029

Ich habe es mit Excel gegengerechnet.

Hat jemand eine Idee, was da schief läuft?

Danke Euch!

EDIT:
MCU: Atmega2560
IDE: Mcrochip Studio 7.0.2542