logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega128 - Nieprawidłowe wyniki mnożenia float'ów dla dodatnich wartości

prociomen007 21 Sty 2015 19:12 900 6
  • #1 14354588
    prociomen007
    Poziom 18  
    Witam, napotkałem w swoim projekcie na dziwny wręcz dla mnie nie wytłumaczalny problem dotyczący mnożenia liczb zmiennoprzecinkowych. Poniżej kod który generuje problem:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Następnie zmienną dana wyrzucam sobie rs232 na komputer i otrzymuję jakiś kosmos. Dla error wynoszącego 0 i wszystkie liczby ujemne jest ok np tak:

    error = 0 ->> dana = 0
    error = -10 ->> dana = -40
    error = -50 ->> dana = -200

    kosmos się dzieje po podaniu liczby dodatniej. Wyniki robią się jakieś okropnie duże i zawsze ujemne. Np error =50 ->> dana = -26000.

    Używam kompilatora Atmel Studio 6.2 i programuje całość w C. Wszystko dosłownie wszystko w kodzie działa poza tym mnożeniem. Myślałem że może problem jest w transmisji wyniku do komputera ale ewidentnie jest źle mnożona bo potem dla ( error dodatniego ) cały kod wariuje przez tak duże ujemne wartości.
  • #3 14354770
    prociomen007
    Poziom 18  
    Zmienna jest typu:

    volatile float

    obrabiam ją w przerwaniu.
  • #4 14355080
    Piotr Piechota
    Poziom 22  
    Pokaż resztę programu. Jak wysyłasz floata do portu szeregowego ?
  • #5 14355400
    BlueDraco
    Specjalista - Mikrokontrolery
    No to w zasadzie wszystko jasne - podczas czytania zmiennej w programie głównym podmieniasz jej kawałki w przerwaniu. Zablokuj przerwania w pętli głównej na czas pobierania wartości zmiennej.
  • #6 14355420
    tadzik85
    Poziom 38  
    BlueDraco napisał:
    No to w zasadzie wszystko jasne - podczas czytania zmiennej w programie głównym podmieniasz jej kawałki w przerwaniu. Zablokuj przerwania w pętli głównej na czas pobierania wartości zmiennej.


    Jeśli to jest powodem to rozwiązaniem jest coś znacznie lepszego.
  • #7 14355623
    BlueDraco
    Specjalista - Mikrokontrolery
    Jest zapewne parę lepszych rozwiązań, ale na szybko to zadziała. Ja bym wyrzucił float całkiem ani nie robił żadnej "pętli głównej", bo same z tego kłopoty.
REKLAMA