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

TMS320C6713 DSK - knowersja między typami zmiennej

cavendish 06 Lis 2008 17:54 1575 4
REKLAMA
  • #1 5708506
    cavendish
    Poziom 17  
    Potrzebuję zrobić na płytce startowej z tytułu, wyposażonej w procesor texas'a 6317 pewien filtr. Program piszę w C. O ile algorytmy splotu itd. zrealizowałem, to problem stanowi konwersja zmiennych. Jestem w stanie odczytać wartości z przetwornika a/c w formacie Int16 , gdzie wartości wejściowe są zapisane w kodzie U2. Potrzebuję je przekonwertować do float a po wykonaniu obliczeń zamienić ponownie na Int16(w kodzie U2) aby można było je wysłać do adc. Zetknął się ktoś z takim problemem i wie jak to zrobić?

    P.S. Konwersja float x; int y; x=(float)y; raczej nie zdawała egzaminu. Poza tym jak "przyciąć" float'a do zwykłego int?
  • REKLAMA
  • Pomocny post
    #2 5713569
    misiekjr
    Poziom 11  
    Witam!

    w załączniku zamieszczam kod programu w którym obsługiwany jest przetwornik. jeżeli będzie coś niejasne to chętnie pomogę.

    pozdrawiam serdecznie!!
  • REKLAMA
  • #3 5726213
    cavendish
    Poziom 17  
    Cześć,

    Znalazłem w kodzie:

    if ( IN_L>=0x00008000 ) IN_L |= 0xffff0000;

    Czyli: jeśli liczba ma znak "-" to robimy OR'a tej liczby z 0xffff0000
    przez co mamy tę samą liczbę, także w kodzie U2 tyle, że zapisaną na 32 bitach (jeśli jest dodatnia to starsze 16 bitów defaultowo wypełni się zerami) - czyli zmienna typu int jest w C traktowana jako zmienna zapisana w kodzie U2. Przy konwersji nie muszę więc martwić się o znak, lecz o to by zmienna zajmowała 32 bity - dobrze rozumuję? Jeżeli tak, to mamy zrealizowany odczyt.
    Co jednak z wysyłaniem danych do przetwornika? Po operacjach na float'cie mogę zrobić konwersję:
    x=(int)y;
    która powinna zmienić sposób kodowania danej ze zmienno na stałoprzecinkowy (obcinając przy okazji część ułamkową). Będzie to jednak int 32-bitowy.

    Czy jeśli wpiszę w kodzie:
    DSK6713_AIC23_write(hCodec,x);
    gdzie x to wlaśnie zmienna int 32 bitowa, to czy np. przetwornik odczyta młodsze 16 bitów ignorując starsze? W związku z tym należałoby programowo zadbać by informacja o znaku była na 16 a nie na 32-gim bicie itp.
  • REKLAMA
  • #4 5762820
    cavendish
    Poziom 17  
    Witam,

    W załączniku kod działającego,sprawdzonego (na laborkach) programu realizującego filtrację typu FIR. Filtracja odbywa się na kanale prawym, lewy "przepisywany" jest bez zmian na wyjście.

    Podziękow dla misiekjr za wrzucony kod - przydał się.
  • #5 5763490
    misiekjr
    Poziom 11  
    Witam!

    Ciesze się że mogłem pomoc, przepraszam, że wcześniej nie odpisałem ale miałem ograniczony dostęp do internetu. Temat więc można uznać za zamknięty. Pozdrawiam serdecznie!!
REKLAMA