STEROWANIE JOYSTICKIEM

Wszelkie sprawy związane z LabVIEW i komunikacją ze sprzętem. Problemy i ciekawe rozwiązania.
dabek63
Posty: 11
Rejestracja: 09 wrz 2010 10:02
Wersja środowiska: LabVIEW 2010

STEROWANIE JOYSTICKIEM

Post autor: dabek63 »

Witam,
mam odpalony zgodnie z przykładem dostępnym w LabView joystick. Zwraca mi wartości od -32k do +32k z groszami. Informacje o
wartości dla osi X i Y chcę przesłać w jakiejś ramce do mikroprocesora AVR. I tu pojawia się problem, ponieważ nie mogę odpowiednio zinterpretować tego
na uC. Wartości podane dzielę przez 257, tak żeby uzyskać nie przekroczyć wartości od -128 do 127 (-127 do 127 otrzymuję). Nawet konwertuję to na wartość I8. Chodzi o to, żeby w jednej ramce - 8 bitów przeszła informacja o stanie jednej osi. To konwertuję na stringa ( próbowałem już różnych opcji, do wartości dziesiętnych, heksadecymalnych itp. ), ale daje mikroprocesor tego nie wykrywa. Robiłem podgląd tego co otrzymuję na porcie wirtualnym, czy w samym labview poprzez indicator i powinno być ok. Program wygląda tak:

Obrazek

Miałem już robota, którym sterowałem po RS-232 po wciśnięciu klawisza, jeśli był jakiś klawisz wciśnięty wysyłał stringa jako literkę np. w - oznaczało to jazdę do przodu i na mikroprocesorze jest to interpretowane jako hex 0x77 zgodnie z tabelą ascii.. Cztery warunki znaków np. w,s,a,d i robot jeździł w każdą stronę. Wtedy to było na module radiowym z Wobitu (port szeregowy). :
Obrazek

Gdy zrobię coś takiego:

Obrazek

to odpowiedni warunek na mikroprocesorze zaświeca mi diodę gdy wartość X joysticka przekroczy 0 ( wysłany znak zostaje odpowiedni odczytany).

Jak przesłać konkretnie wartość od -128 do 127 tak żeby mógł to odebrać mikroprocesor - jaki powinien to być string. Zmienna odbierana na
procesorze jest typu signed char, więc wszystko powinno być ok.
I tak jak mówię jeśli wyślę literkę np. w to mam wartość 0x77 i względem tego mogę podejmować jakieś działania.

Potem, żeby wykonać ramkę danych, najprościej jest skleić stringi i wrzucić po prostu sklejony string na VISA Write ?
Załączniki
joy3.vi
(20.85 KiB) Pobrany 331 razy
joystick.vi
(20.93 KiB) Pobrany 349 razy
de80
Posty: 90
Rejestracja: 02 sty 2011 22:46
Wersja środowiska: LabVIEW 2014
Lokalizacja: KRK

STEROWANIE JOYSTICKIEM

Post autor: de80 »

witam,
jako że robię podobny projekcik wysyłam stringa w postaci np "M1R1000" co na mikrokontrolerze(ATmega16) za pomocą przerwania "ISR(USART_RXC_vect)" interpretuje- tzn. do momentu gdy odebrany znak jest różny od 13(koniec linii) składam odebrane znaki w tablice. Następnie z tej tablicy wybieram wartości które mnie interesują np. "M" odpowiada za sterowanie silnikiem "1" jest to numer silnika, 1000 jest to wartość PWM. Na uc używam funkcji atoi() do zamienienia tablicy charów(np. {1,0,0,0}) na int.
pozdrawiam
Obrazek
dabek63
Posty: 11
Rejestracja: 09 wrz 2010 10:02
Wersja środowiska: LabVIEW 2010

Re: STEROWANIE JOYSTICKIEM

Post autor: dabek63 »

Witam,
dzięki za odpowiedź. No co do ramki to rozumiem idę. Znak końca linii musisz jeszcze rozumiem jakoś dodać to ciągu "M1R1000" ?
No u mnie problem leży w tym, że jak wysyłam mu liczbę w ten sposób, który pokazałem to on mi tego nie interpretuje ; /, a wysyłam tylko jeden znak co 50 ms. I tu nie ma znaczenia czy w przerwaniu czy nie, bo jeśli wpiszę konkretnie literkę "w", czy nawet znak "1" to on mi to zinterpretuje zgodnie z tablicą ascii. ale jak
przesyłam wartość od -127 do 127 tak jak w podanym programie , to konwertuje na stringa to nic. Wciskam potem na procka warunek, że jeśli odebrany znak większy np. od 60 ( czyli jakieś tam wychylenie w np. osi X) to zapal diodę, a jak nie to gasi. I to niestety nie działa. A działa jeśli np. wysyłam te literki 'q' lub '9'.

Ja tutaj mógłbym przesyłać np. "X18000Y25000". Tutaj rozumiem robisz jakiś prosty bufor kołowy, tzn. jak napotkał znak końca linii po wysterowaniu zaczynasz od nowa zapisywać na początku tablicy ?

gdybym np. wartość 18000 chciałbym wpisać do rejestru OCR ustawiającego wypełnienie PWM ( zakładam że ICR mam ustawione na te 32 k - czyli wpisuję bezpośrednio ) , to jak te 18000 wyjąć z tej tablicy ? Ja u siebie założyłem, że wartość -127 + 127 to 8 bitów czyli jedna ramka, a u w tym przypadku, pierwszym elementem tablicy jest X, potem drugim elementem tablicy jest '1' ascii itd. ? czy jak ?
Mógłbyś podać jakieś fragmenty kodu ?
z góry dzięki za pomoc :)
AGF
Posty: 109
Rejestracja: 26 lut 2010 13:41
Wersja środowiska: LabVIEW 2010
Lokalizacja: Bydgoszcz

Re: STEROWANIE JOYSTICKIEM

Post autor: AGF »

J ak widzę zanim wpiszesz twoją liczbe I8 do portu szeregowe to konwertujesz ją do stringu, potencjalnie 4 znaki ASCII np.: liczba 127 daje 3 znaki "1","2","7". Myślę że tutaj tkwi błędne działanie w odpowiedzi na twoje komendy. Proponuje zbudować jednoelementową tablicę z twoją I8 wartością i konwertować ją za pomocą String->String/Array/Path conversion->byte array to string.
Ostatnio zmieniony 08 lut 2011 18:13 przez AGF, łącznie zmieniany 1 raz.
dabek63
Posty: 11
Rejestracja: 09 wrz 2010 10:02
Wersja środowiska: LabVIEW 2010

Re: STEROWANIE JOYSTICKIEM

Post autor: dabek63 »

hm no faktycznie, a jak zrobić żeby liczbę 127 zamienił mi na POJEDYŃCZY znak ascii,
myślałem, że liczbę np. 119 dziesiętnie on zamieni na literkę 'w' którą prześle na port szeregowy, a on faktycznie wysyła 3 znaki, '1', '1', '9' ? Co z tym zrobić ?:p
AGF
Posty: 109
Rejestracja: 26 lut 2010 13:41
Wersja środowiska: LabVIEW 2010
Lokalizacja: Bydgoszcz

STEROWANIE JOYSTICKIEM

Post autor: AGF »

Dopisałem w 4. poście :D
dabek63
Posty: 11
Rejestracja: 09 wrz 2010 10:02
Wersja środowiska: LabVIEW 2010

Re: STEROWANIE JOYSTICKIEM

Post autor: dabek63 »

ok dzięki, ma to sens :), jutro będę z tym dalej walczyć :)
fajnie jakby jeszcze de80 coś opisał więcej :d
ODPOWIEDZ