Forum: Mikrocontroller und Digitale Elektronik Probleme mit einer "Funktion"


von Steffen H. (steve1990)


Lesenswert?

Hi ich benutze das c-controll mega 128 pro board von conrad.
Es funktioniert auch nur kann ich keine kommazahlen addieren.
Wenn ich + 1 schreibe geht die Funktion wenn ich aber + 0,5 oder so 
eingeben wird nicht hochgezählt.
Ich hoffe ihr könnt mir helfen.
Gruß steve

Die Funktion:

void warteAufSensor(word sollWert)
{
    word istWert;
    istWert = 0;

    while(istWert < sollWert)
    {
        if(Port_ReadBit(46) == 1)
        {
        istWert = istWert + 1;  //Diese plus eins soll zu einer 0,5 
werden
            LCD_CursorPos(0x42);
            LCD_WriteWord(istWert,2);
            LCD_WriteText("/");
            LCD_WriteWord(sollWert,2);
            while(Port_ReadBit(46) == 1);
        }

von engelmarkus (Gast)


Lesenswert?

Ich gehe mal davon aus, dass ein "word" ein uint16_t ist. Das ist ein 
Ganzzahlendatentyp, in dem hast du keine Nachkommastellen. Also wenns 
wirklich sein muss, nimm ein double oder ein float oder so. Das Problem 
dabei ist halt, dass der µC keine Kommazahlen verarbeiten kann, und der 
gcc das dann in Software simulieren muss, was das Programm langsam und 
groß macht. Schau dir mal Festkommaarithmetik an.

von Steffen H. (steve1990)


Lesenswert?

Also müsste ich wenn ich die kommazahlöen addieren will einfach 
schreiben:


void warteAufSensor(word sollWert)
{
    word istWert;
    istWert = 0;

    while(istWert < sollWert)
    {
        if(Port_ReadBit(46) == 1)
        {
        istWert = istWert + 0,5;  //Diese plus eins soll zu einer 0,5
werden
            LCD_CursorPos(0x42);
            LCD_WriteFloat(istWert,4);
            LCD_WriteText("/");
            LCD_WriteWord(sollWert,2);
            while(Port_ReadBit(46) == 1);

Oder?
In der hilfe steht:
Syntax



void LCD_WriteFloat(float value, byte length);



Sub LCD_WriteFloat(value As Single, length As Byte)





Beschreibung



Schreibt eine Fließkommazahl mit angegebener Länge auf das LCD Display.



Parameter



value  Fließkommawert

length  Ausgabelänge





Gruß steve

von Klaus W. (mfgkw)


Lesenswert?

Kommazahlen schreibt man in C auch nicht mit einem Komma, sondern einem 
Punkt.

von float (Gast)


Lesenswert?

Hallo,

und was steht ganz am Anfang vom Programm?
   float istWert;

sonnst wird da nie ein float daraus. Und "," kennt der Compiler auch 
nicht da musst du wohl "."

von spess53 (Gast)


Lesenswert?

Hi

>    word istWert;

Du kannst zu einem Word keine 0,5 addieren. Auch wenn du es tausend mal 
versuchst, wird sich der Wert nicht ändern.

MfG Spess

von Steffen H. (steve1990)


Lesenswert?

Okay danke schon für die hilfe:-)
Ich fasse dann mal zusammen:

void warteAufSensor(float sollWert)

{
    float istWert;
    istWert = 0;

    while(istWert < sollWert)
    {
        if(Port_ReadBit(46) == 1)
        {
        istWert = istWert + 0.5;
            LCD_CursorPos(0x42);
            LCD_WriteFloat(istWert,4);
            LCD_WriteText("/");
            LCD_WriteWord(sollWert,2);
            while(Port_ReadBit(46) == 1);

dann müsste es gehen oder?
Gruß steve

edit:
Was mir eingefallen ist, kann ich nicht einfach den istWert + 1 * 1/2
machen? Dann werden doch nur die ganzen zahlen angezigt oder?..
Bin leider nicht so gut bewandert mit c...

von Klaus W. (mfgkw)


Lesenswert?

1 * 1/2 ist einfach 0.

Grund: 1/2 ist eine ganzzahlige Division, der Divisionsrest wird also 
weggeworfen und 1/2 ist damit 0.
Das 1*... davor rettet auch nichts mehr.

-> Grundlagen C

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
Noch kein Account? Hier anmelden.