überlaufproblem

Gast #514935
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
Gast #515563
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.