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.