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.

Labview <-> Atmega - konwercja typu float

Rakieta1 04 Wrz 2013 18:53 1935 5
  • #1 04 Wrz 2013 18:53
    Rakieta1
    Poziom 8  

    Witam,

    Zrobiłem VI w Labview do komunikacji z Atmegą32 przez RS-232. Atmega wykonuję obliczenia zmiennoprzecinkowe i wysyła w czterech bajtach dane typu float. Labview zaś po otrzymaniu czterobajtowych danych typy string, powinno konwertować je na dane float przy pomocy funkcji Scan from string. Niestety, ale nie wiem czemu labview widzi gdzieś problem i pokazuję błąd o bardzo lakonicznej treści "scan failed" gdy odebrane dane przesyłane zostaną do bloczku scan from string. Odbiór danych przebiega prawidłowo, błąd pokazuję się podczas konwercji typów ze string na float.

    Fragment kodu co jest na Atmedze:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    W labview jest natomiast tak:

    Labview <-> Atmega - konwercja typu float

    Czemu jest błąd?

    0 5
  • Pomocny post
    #2 04 Wrz 2013 23:07
    McMonster
    Poziom 32  

    Ale ty nie wysyłasz tam stringa, tylko gołe dane binarne, skanowanie nie działa, bo spodziewa się tablicy znaków w formie np. "3.1415". Wypisz sobie w LabView otrzymane dane, to będziesz miał obraz sytuacji.

    Albo przekonwertuj w mikrokontrolerze na string za pomocą sprintf(), albo po stronie LabView złóż te wysłane cztery bajty do zmiennej float. Prawdopodobnie pierwsza opcja będzie prostsza, chociaż nie wiem, jakie możliwości ma LabView w tym zakresie.

    0
  • #3 05 Wrz 2013 12:36
    Rakieta1
    Poziom 8  

    No tak, komputer odbiera je jako "suche" bajty, ale Labview, niejako z miejsca interpretuję je jako dane string. Na wyjściu bloczku "VISA Read" [odpowiadający za odczyt danych z RS-a] masz typ danych String. W celu dalszej obróbki tych danych należy jest konwertować na typ float. Bo floata nie wyśle bezpośrednio bo 32-bitowy typ danych a RS wysyła porcje 8-bitowe.

    0
  • #4 05 Wrz 2013 18:17
    McMonster
    Poziom 32  

    VISA, to coś zupełnie innego, niż goły RS232, to specjalny standard do komunikacji z przyrządami laboratoryjnymi, stąd stringi na wyjściu. Poszukaj, czy nie masz dostępnych innych bloczków do portu szeregowego i jakiejś możliwości do poskładania floata z suchych danych binarnych. W przeciwnym wypadku musiałbyś w mikrokontrolerze dokonać formatowania zgodnego z VISA.

    Sam nie używałem nigdy VISA ani LabView, więc musisz sam poszukać, co jest prostsze do zastosowania.

    0
  • Pomocny post
    #5 05 Wrz 2013 21:09
    NdYAG
    Poziom 16  

    Rakieta1 napisał:
    No tak, komputer odbiera je jako "suche" bajty, ale Labview, niejako z miejsca interpretuję je jako dane string. Na wyjściu bloczku "VISA Read" [odpowiadający za odczyt danych z RS-a] masz typ danych String. W celu dalszej obróbki tych danych należy jest konwertować na typ float. Bo floata nie wyśle bezpośrednio bo 32-bitowy typ danych a RS wysyła porcje 8-bitowe.



    Mylisz stringi. To, czego spodziewa się klocek to string w postaci "3.1415". A string który dostajesz z atmegi to cztery bajty o jakiś tam wartościach które zostają zamienione na string w ten sposób, że każdy bajt zostaje przedstawiony w postaci jakiegoś znaku, zgodnie z tablicą ASCII.

    Co zrobić? Dowiedz się co oznaczają te bajty(bity) wysyłane przez atmega, tzn. które to cecha, mantysa, znak. I wyciągając bajty/bity z stringa odebranego i odtwórz z tego zmienną float.

    0
  • #6 06 Wrz 2013 16:39
    Rakieta1
    Poziom 8  

    NdYAG zrobiłem tak jak napisałeś tylko że sam wcześniej na to wpadłem, i się udało, ale to była droga przez mękę. 50 bloczków do operacjach na bitach i liczbach musiałem wstawić żeby otrzymać cechę , mantysę i znak oraz złożyć z tego liczbe.

    0