c51, AT89S8252, kommazahlen

Gast #321202
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
>unsigned int exp3 = 3.763158;

Wie soll das denn gehen? Int ist eine Ganze Zahl, ohne irgendwelche
Nachkommastellen.
Was du brauchst, sind float oder double.
Gast
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...).
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
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 ?
Gast
Der Wickenhäuser ist 8k limited. SDCC ist frei und somit unlimited, ich
setzte seit mehreren Jahren nur noch auf Freeware und es gibt keine
Probleme.

Joe

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.