Rekenkracht

Hey,

is het normaal als je een berekening uitvoert in decimalen dat er zo veel systeemtijd gebruikt wordt?

if (sLS == HIGH && RT > 0 && HIB == LOW && S1 == HIGH && (millis() - debounceA) > 250 )
         {
           WT = millis();
           debounceA = millis();
           LCD1.setCursor(0,2);
           LCD1.print("debounce A :" + String(millis()- debounceA) );
           sWOK = ((WT - (RT+2)) / 1000.000);
           dtostrf(sWOK,5,3,W1_Ok);
           LCD1.setCursor(0,0);
           LCD1.print("#" + String(H) + " X " + String(W1_Ok));
           S1 = LOW;
         }

als ik de code op deze bovenstaande manier plaats dan heb ik ongeveer 1 duizendste verwerkingstijd nodig...

if (sLS == HIGH && RT > 0 && HIB == LOW && S1 == HIGH && (millis() - debounceA) > 250 )
         {
           WT = millis();
           debounceA = millis();
           sWOK = ((WT - (RT+2)) / 1000.000);
           dtostrf(sWOK,5,3,W1_Ok);
           LCD1.setCursor(0,0);
           LCD1.print("#" + String(H) + " X " + String(W1_Ok));
           LCD1.setCursor(0,2);
           LCD1.print("debounce A :" + String(millis()- debounceA) );
           S1 = LOW;
         }

als ik het zoals hierboven doe, dan heb ik ongeveer 13 duizendsten verwerkingstjd nodig...

kennelijk hebben de "dtostrf()" en de "float berekeningen" nogal wat verwerkingstijd nodig, dat zal waarschijnlijk te maken met work-arounds door het ontbreken van een mathprocessor denk ik dan

of zie ik dit verkeerd?

zijn er mogelijkheden om verwerkingen sneller af te handelen?

Grtz, Yves

floating point is bij dit soort processors inderdaad duur. wat sommigen doen als het kan is alles gewoon in 32bit long getallen doen en dan kan je bijvoorbeeld de decimaal 3 plekken opschuiven (als je deelt door 1000). Daarnaast is Floating point niet zo nauwkeurig op de atmels. De nauwkeurigheid is meestal rond de 6-7 cijfers. Dus als je een getal hebt van bijvoorbeeld 1234.5678 dan ga je al nauwkeurigheid verliezen.