hi, ich habe einen 24bit (max. wert 0x00FFFFFF) adc an einem at91sam7xc128 laufen und möchte den gewandelten wert gerne in einem spannungswert am hyperterminal sehen. soweit so gut; durch irgendwelche fehler hab ich ne nichtlineare abweichung der messwerte bzw der werte die als spannung angezeigt werden(verwende ne sehr,sehr präzise referenzspannungsquelle als eingang und vergleich damit die darstellung am hyperterminal). ok dacht ich mir mach ne einfache regressionsgerade rein und korrigiere so die werte. im excell funktioniert dass noch wunderbar aber im keil (µcvision3 v2.32) passiert natürlich ein überlauf da "int" da doch einwenig klein ist. klar könnt ich einfach n paar stellen weg kürzen da aber mein adc genau, will sagen sehr sehr genau ist möcht ich schon sehen wann das rauschen beginnt (ca bei 0,3µV). mein problem ist also dass "int" (signed / unsigned) zu klein ist und "float" -größen zur besseren verrechnung (die zahlen würden nicht soo groß werden und würden ins "int" passen) nicht laufen oder ich überseh da was. hab auch mal n "int64_t" oder "quadword" probiert da passiert aber auch n überlauf... :-( sry ich kenn mich leider noch nicht wirklich gut in diesem controller aus und vllt ists ne dumme sache ich da frag... fürn tipp bin ich wie immer sehr dankbar. gruß constantin
Servus, zuerst solltest Du Deine Berechnung so elementar auflösen wie möglich und die Schritte einzeln mit den jeweiligen Grenzwerten durchgehen, dann müßte leicht zu erkennen sein, wo der Überlauf passiert (das geht alles nochim Kopf/Taschenrechner). Damit das auch der µC so versteht, würde ich der Einfachheit halber die Berechnung ebenso elementar hinschreiben und im Zweifelsfall halt ein paar temporäre Variablen verwenden, so kannst Du dann auch noch sinnvoll debuggen, falls doch noch was nicht hinhauen sollte. Ach ja, nachdem Du wohl eine Ganzzahlrechnung verwendest ist es besser vor einer Division zu multiplizieren - das belastet zwar eher Deine Zahlenbereichsgrenze, ist aber wesentlich genauer.
...mit einem 32 Bit Interger kannst Du die Strecke New York - Los Angeles auf Millimeter genau auflösen, 64 Bit sollten definitiv nicht notwendig sein ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.