www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik c51, AT89S8252, kommazahlen


Autor: Nico (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: Nico (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
übel, float und double sind gesperrt in der eval version von keil vision
3 wenn ich mich recht entsinne:)

Autor: Nico (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat jemand ne alternative ?

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...).

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Nico (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Nico (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh, für den Atmel 89S8252...

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na klar, SDCC. Oder MIDE51 herunterladen und du hast ne komplette IDE
mit ASM und C.

Gruß

Joe

Autor: Roland Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier's mal mit der Demo des µc/51 von http://www.wickenhaeuser.de/

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anbei noch einige Samples für den AT89S8252.

Joe

http://sdccokr.dl9sec.de/resources.htm

Autor: Nico (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey vielen danke leute ! :)

Autor: Cri Gri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und???gehts schon????
Bin neugierig :)

mfg Cri

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.