Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

float w WinAVR

Śledziu 31 Sie 2006 21:26 2352 6
  • #1 31 Sie 2006 21:26
    Śledziu
    Poziom 12  

    Witam

    generalnie mam jakis problem z liczbami typu float

    np

    Code:

    float liczba;
    liczba=(p_gora_1/100)*(1024/50);   

    gdzie p_gora_1=4600


    wynik powinienem otrzymac 942,08 a otrzymuje 920 dla czego?

    kolejny problem to, jak wyswietlic liczbe typu flaot na LCD

    Code:

     float yy=3.4;
     lcd_puts("Ilosc modulow: ");   
    utoa(yy,buf,10);
     lcd_puts(buf);


    utoa spwoduje ze wyswietli sie 3, no wlasnie a jak zrobic zeby pojawila sie liczba z przecinkiem?

    pozdrawiam
    [/quote]

    0 6
  • Pomocny post
    #2 31 Sie 2006 23:28
    adamusx
    Poziom 27  

    ODp2: Zeby wyswietlic folat na LCD musisz uzyc funkcji printf lub dtostrf ( polecam ta druga bo zajmuje znacznie mniej pamieci ) . Itoa i ltoa konwertuja tylko liczby staloprzecinkowe. Funkci dtostrf szukaj w stdlib.h w katalogu WinAVR, jest tam opisana.

    ODP1:

    Jak masz zadeklarowana zmienna p_gora_1?? Jesli nie float to zadeklaruj ja jako float, albo zrób rzutowanie :

    Code:

    float liczba;
    liczba=((float)p_gora_1/100)*(1024/50);   




    pozdrawiam

    0
  • #3 31 Sie 2006 23:54
    Śledziu
    Poziom 12  

    Dzieki wielkie

    zadziałało :) alez to pozera pamieć 1.67kB mniej :/

    pozdrawiam

    0
  • #4 01 Wrz 2006 00:22
    adamusx
    Poziom 27  

    dtostrf chyba mniej pozera niz 1.67kB :)

    0
  • #5 01 Wrz 2006 08:39
    Śledziu
    Poziom 12  

    Witam

    to juz pokazuje dowod :) :

    bez funkcji dtostrf();

    Code:
     //dtostrf(3.4,3,2,buf);
    
     lcd_puts(buf);


    program zajmuje:
    Code:
    section     size      addr
    
    .data        588   8388864
    .text       5702         0
    .bss          55   8389452
    .noinit        0   8389507
    .eeprom        0   8454144
    .stab      13008         0
    .stabstr    4578         0
    Total      23931


    z funkcja dtostrf();
    Code:
     dtostrf(3.4,3,2,buf);
    
     lcd_puts(buf);


    Code:
    section     size      addr
    
    .data        588   8388864
    .text       7390         0
    .bss          55   8389452
    .noinit        0   8389507
    .eeprom        0   8454144
    .stab      13020         0
    .stabstr    4578         0
    Total      25631


    aha porównuje wielkosci .text (jesli jestem w bledzie to prosze mnie naprostowac :) )

    pozdrawiam

    0
  • #6 28 Lip 2008 11:18
    jareks91
    Poziom 21  

    adamusx napisał:
    ODp2: Zeby wyswietlic folat na LCD musisz uzyc funkcji printf lub dtostrf



    Czy mogbys podać dzialający przyklad ktory wyswietla flota uzywajac printf ? bo ja pisze cos takiego i mi nie dziala...

    double a = 12.05;

    printf_P(PSTR("a(%%f)=%f\r\n"), a);

    wyświetla mi znak "?" czy ktos wie dlaczego?

    0