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

[atmega16][avr-gcc] Problem z float'em

szafek_ml 30 Sty 2010 16:34 1065 3
REKLAMA
  • #1 7616665
    szafek_ml
    Poziom 11  
    Witam.
    Mam pewien problem związany z konwersją zmiennej short do float.
    Moim zamiarem jest przeliczenie wartości z przetwornika AD na pewną wartość w postaci float.
    Schody zaczynają się na początku. Puki wartość ADC_out nie przekroczy 700 wszystko jest OK(ADCoutFLT przyjmuje wartość ADC_out). Powyżej 700, ADCoutFLT przyjmuje wartość 5130.

    A dziej się to w ten sposób:
    
    ADCL_tmp=ADCL;
    ADCH_tmp=ADCH;
    ADC_out=ADCH_tmp;
    ADC_out=(ADC_out<<8)+ADCL_tmp;
    	
    ADCoutFLT = ADC_out;
    	

    gdzie:
    ADC_out - unsigned short
    ADCout_FLT - float

    Pogrzebałem po forum i znalazłem coś o cast'owaniu.

    Niestety to tez nie pomogło
    
    float ADCoutFLT = (float)ADC_out;
    


    Co może być nie tak?
  • REKLAMA
  • #2 7617396
    rodzio
    Poziom 12  
    Hmm dziwne, debugg avrStudio pokazuje poprawną wartość. Może błąd jest gdzieś dalej?
  • REKLAMA
  • #3 7617600
    psine.pl

    Poziom 30  
    Dane są później wyświeltane na lcd czy wysyłane np. na uart ?
    Bo może nie jest błędem obsługa ADC tylko dalsza część programu.
    U mnie podczas debugowania też jest ok.

    Pozdrawiam
    Marek
  • #4 7622128
    szafek_ml
    Poziom 11  
    Rzecz się dziwna stała.
    Moim aktem desperacji była już zmiana nazwy "ADCoutFLT" na "bzzzz" i ruszyło :).
    W całym programie pozmieniałem na "bzzzz" i teraz smiga bezproblemowo.
    Rzecz w tym , że z teoretycznego pkt widzienia nie powinno mieć to rzadnego znaczenia :/.
    Mimo wszystko thx za pomoc.
REKLAMA