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
>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.
übel, float und double sind gesperrt in der eval version von keil vision 3 wenn ich mich recht entsinne:)
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.
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 ?
na klar, SDCC. Oder MIDE51 herunterladen und du hast ne komplette IDE mit ASM und C. Gruß Joe
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
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.