Also ich hab in der zwischenzeit bisl gegooglet und wies ausschaut ist der UNterschied schon kraß:
Hier :http://www.avrfreaks.net/index.php?n...=72923&start=0
hat einer ein paar tests mit unterschiedlichen Datentypen gemacht und anscheinend hat da ein float schon enorme nachteile und schlägt offensichtlich mit 1876 takten zu buche (vs 86 bei nem 32bit integer).
Also ich denke das da meine Lösung deutlich besser abschneidet:
#define MAX 3750
#define MIN 850
#define MULTI 4294967296/(RV_MAX-RV_MIN)

static inline uint16_t to10bit(uint16_t val)
{
if(val<MIN) val=0;
else if(val>MAX) val=max-min;
else val=val-min;
uint32_t t=val*multi;
t=t>>22;
return (uint16_t)t;
}
Ich weis zwar nicht genau wieviel takte das braucht aber weniger als 1800 sinds sicher
und die genauigkeit ist auf jedenfall ausreichend.

PS: Mir is klar das man das noch optimieren kann (max-min vorher ausrechnen) aber ich vertraue da in den Compiler da es ja geinlined wird und bereits zur compilezeit bekannt ist.

MFG Thalhammer