Habe es jetzt wie folgt gelöst:

Code:
(...)

ZW0A=(KMZ0MAX-KMZ0MIN)/2;
ZW0B=KMZ0MIN + ZW0A;
KMZ0 = (((int16_t)adc0 - ZW0B)*100)/ZW0A; 

(...)
und für den Faktor 100 macht er das jetzt ganz brav, nur beim Faktor 1000 bekomme ich komische Werte (zwischen ca -104 bis 103)

habe mal überschlagen das er an den max Werten Zwischenwerte +/- 345.000 berechnen muss!!! Das fällt natürlich aus dem 16Bit Rahmen.

Kann ich mit dem type cast den irgendwie dazu bringen die Rechnung in 32Bit durchzuführen, sich das aber als 16Bit Variable zu speichern?
Oder muss ich mir für die Rechnung ne extra Variable in 32Bit einrichten?

mfg Axel