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

Błędna zamiana wartości z ADC na float - wynik 0 zamiast 18,82

mwojcie3 08 Gru 2017 07:43 576 9
  • #1 16875829
    mwojcie3
    Poziom 10  
    Cześć
    Mam taki problem, mianowicie dokonuje zamiany wartości z przetwornika na float. Uruchomiłem debugger i podejrzałem zmienne.
    capVoltage = 0x14 (hex)
    Po zamianie na float wg poniższego równania:

    capVF = (capVoltage * VREF * 10 * 4.82) / 256

    capVF = 0, a powinno być 18,82.

    capVoltage jest typu unsigned char
    capVF jest typu float

    O co chodzi??
  • #2 16875838
    czareqpl
    Poziom 33  
    A zmienna VREF jaką ma wartość?

    Polecam sobie wyprowadzić wzór przekształcenia sprowadzający się do jednej operacji typu:
    capVF = (float) (capVoltage * COEFFICIENT);
  • #3 16875839
    JacekCz
    Poziom 42  
    wróżka jeszcze nie przyszła do pracy.
    Podaj pełniejszy kod, ze wszystkimi deklaracjami, a nie jakieś odpryski, być może przekopiowane źle
    kod się formatuje z użyciem 'Syntax'
  • #4 16875843
    BlueDraco
    Specjalista - Mikrokontrolery
    Nie zamieniaj na float... To w 99% przypadków nie ma żadnego sensu.
  • #5 16875846
    mwojcie3
    Poziom 10  
    VREF = 5

    Co ciekawe:
    Pomiar na drugim kanale: tresholVoltage=0x26
    tresholdVF = tresholdVoltage * VREF * 10 * 4.82 / 256 = 35.77
    wyznacza się normalnie.
  • #7 16875854
    JacekCz
    Poziom 42  
    czareqpl napisał:
    Ale liczysz go inaczej. Popatrz na nawiasy.


    to nie jest realny kod, to sa dywagacje kolegi nt kodu
    W scenariuszach 'co jest naprawdę' wróżka mi powiedziała o kilku możliwych błędach (przy których nawiasy to elementarz)
  • #8 16875861
    mwojcie3
    Poziom 10  
    Akurat testowałem z nawiasami i bez i to nie ma znaczenia. Nie widzę zasypywać wróżki całym kodem, bo w reszcie jest obsługa klawiatury i wyświetlaczy 7-segmentowych, obsługa ADC, porównywanie napięć, która nie jest w tym momencie istotna, bo pomiary się wykonują ok, jedna zmienna wyznaczona jest dobrze tylko z tą drugą jest nie tak
  • #9 16877038
    Konto nie istnieje
    Poziom 1  
  • #10 16877205
    JacekCz
    Poziom 42  
    emarcus napisał:
    mwojcie3 napisał:

    obsługa ADC, ..........
    , jedna zmienna wyznaczona jest dobrze tylko z tą drugą jest nie tak


    Bo odczyt z ADC dla tej drugiej zmiennej jest pewnie większy od 255...

    e marcus


    Let me guess ...

    Sugerujesz dzielenie całkowitoliczbowe? Wg fragmentu, nad którym dywagujemy jak rabini nad przeniesieniem kamienia - nie zachodzi.
    Różnica signed / unsigned char, propagacja do długości integera też mi się nie widzi ...

    Puszczę Ci na priv moją hipotezę, jest nieco odjazdowa, ale potwierdziłem ją sobie. Jak się potwierdzi w wątku, super.
REKLAMA