c51, AT89S8252, kommazahlen

Gast #321202
Lesenswert?
• ▲
▼
Hi

ich hab folgendes problem...und zwar hab ich einen abstandsmesser(einer
von Sharp(sicher bekannt)) und dieser ist mit einem A/D-wandler
verbunden....da der abstand nicht ~ zur gemessenen spannung ist, brauch
ich eine funktion die die werte ausgibt...

jetzt hab ich eine funktion aufgestellt die kommazahlen beinhaltet...

so sieht mein code aus in C:
  unsigned int exp1 = 1;
  unsigned int exp2 = 1.017066;
  unsigned int exp3 = 3.763158;

                for(aa=0;aa<scanner_read_range;aa++){
        exp1 = exp1 * exp2;


    }
    scanner_read_range = exp1 * exp3;

bei der funktion handelt es sich um eine expotenzialfunktion..also der
form y=a*b^x (x ist hier die gemessene spannung) und y soll dann der
abstand in cm sein...

mein problem ist nun das er mir für z.b. exp2^100 = 1 ausgibt, was ja
normal 5.43142 ist....


wo liegt der fehler ? bzw ist es möglich mit so viel nachkommastellen
zu rechnen ? da es ja ein eigentlich ein binärsystem ist...

danke im voraus
Gast #321206
Lesenswert?
• ▲
▼
Mulipliziere die Zahlen so, dass keine Nachkommastellen mehr entstehen:
aus 1.017066 würde dann 1017066 werden. Dazu brauchst du dann natürlich
eine (noch) grössere Ganzzahl...
Andere Möglichkeit: Kauf dir die Vollversion, benutze einen anderen
Controller für den es kostenlose Vollversionen gibt oder benutze einen
kostenlosen Compiler für deinen Controller.
Hast du mal bei IAR geguckt? Vielleicht habe die eine Version für den
C51, die nur speicherbegrenzt ist (so wie die für den AVR...).
#321207
Lesenswert?
• ▲
▼
Welchen Wertebereich hat den scanner_read_range?
Ev. könnte man mit einer Tabelle arbeiten:

  y = Tabelle[x];

Dann brauchst Du nur noch die Tabelle geeignet anhand
der ursprünglichen Formel anlegen.
Ev. würde es auch reichen nur jeden 2.-ten oder 3.-en
Tabellenwert tatsächlich anzulegen und dazwischen zu
interpolieren.

Möglichkeiten gibts genug.
Gast #321208
Lesenswert?
• ▲
▼
naja, so hatte ich es schon probiert... leider hatte ich dann 20 zeilen
code oder mehr, dachte das muss kürzer gehn...deswegen die eine
funktion... naja, muss mal weiter schauen....

kennt evtl jemand nen c compiler der hex-files macht und kostenlos ist
? also nicht von keil ^^ und der float vars unterstützt ?

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.