hi Mr Bean,
ein 16bit integer kann ja (unsigned) nur zahlen bis 2^16=65536 darstellen. wenn ein zwischenergebnis einer berechnung einen groesseren wert ergibt, läuft der 16bit int über (1111 1111 1111 1111 (binär für 65536) + 1 = 0!!). bei..
Code:
si_temp=((result-399)*460)/70;
..ist das bereits der fall, wenn result > 541 ist. du solltest also (da es sich eh kürzt) *46 und geteilt durch 7 rechnen. bei uint16_t´s bist du dann auf der sicheren seite.

gruesse von der katz