@Gnom67:

Habe den cast gerade rausgenommen, beeindruckt hat es ihn aber nicht.

Sieht jetzt so aus:

Code:
int16_t calculate_pump_current (uint16_t Ua, uint16_t Ua_cal)
{
    float diff;
    diff = Ua - Ua_cal;
    
    return ((Ua - Ua_cal) / (SENSOR_SHUNT * 8.0) * 1000);
}

Zitat Zitat von Holomino Beitrag anzeigen
Da...

diff = (int16_t)Ua - (int16_t)Ua_cal;

...musst Du casten.
Ansonsten subtrahierst Du zwei UINTs, was genauso schief geht, wie ein Addieren mit Überlauf.

BTW: Hast Du noch den Simulator im Microchip Studio? Damit lässt sich sowas debuggen.
Nein, da muss ich nichts casten und es geht auch nichts schief, der diff wird immer richtig gerechnet, ob positiv oder negativ. Die Variable diff ist ein float...