USB'den bir dizinin en fazla ilk 8 elemanını gönderebiliyorum yardım.

Başlatan Balcı, 20 Ağustos 2015, 10:09:13

Balcı

Merhabalar.
USB ile labview'i haberleştirdim veri gönderip alabiliyorum fakat maximum 8 elemanlı bir dizi gönderebiliyorum 9. elemanı gönderemiyorum sınırı bumu yoksa arttırabiliyormuyuz.
HID standartını kullanıyorum.
Teşekkürler.

ziyaretci

HID'ler için sınır 64 byte. Kullandığınız kütüphanede ilgili ayarı 64 'e ayarlarsanız sorununuz çözülecektir.

  CCS C kütüphanesini kullanıyorsanız; programınıza dahil ettiğiniz ilgili USB kütüphanesin başına aşağıdaki satırları eklemeyi deneyin.
https://320volt.com/pic18f4550-ccs-c-usb-termometre/
#define USB_EP1_TX_SIZE    64                 //Uçnokta1 için maksimum alınacak ve gonderilecek
#define USB_EP1_RX_SIZE    64

Balcı

Alıntı yapılan: erkantr67 - 20 Ağustos 2015, 16:25:52
HID'ler için sınır 64 byte. Kullandığınız kütüphanede ilgili ayarı 64 'e ayarlarsanız sorununuz çözülecektir.

  CCS C kütüphanesini kullanıyorsanız; programınıza dahil ettiğiniz ilgili USB kütüphanesin başına aşağıdaki satırları eklemeyi deneyin.
https://320volt.com/pic18f4550-ccs-c-usb-termometre/
#define USB_EP1_TX_SIZE    64                 //Uçnokta1 için maksimum alınacak ve gonderilecek
#define USB_EP1_RX_SIZE    64


İlginiz için teşekkürler.
Fakat sorun o değil :)  64 byte veri gönderebiliyorum.

int16 giden_veri [8]; mesela bundaki veriler 64byte zaten o iş tamam .
Ama benim amacım dizide 8 elemandan fazla göndermek o olmuyor.
int16 giden_veri[64]; mesela 64 eleman göndermek istiyorum tek seferde .
Sorun tam burada sadece 8 eleman gönderebiliyorum.
Bunu nasıl çözebilirim ?
Teşekkürler.

sadogan

int16 giden_veri[64]; 64 eleman gibi görüyorsun. int16 oldugu için her eleman 2byte.
Bu durumda 128 byte lık veri oluyor.

Balcı

Alıntı yapılan: sadogan - 27 Ağustos 2015, 10:41:02
int16 giden_veri[64]; 64 eleman gibi görüyorsun. int16 oldugu için her eleman 2byte.
Bu durumda 128 byte lık veri oluyor.

Peki 8 eleman sınırmı 8 elemandan fazla gönderemiyorum.
int16da olsa int8 de olsa int32 de olsa Dizinin 8. elemanından sonrakileri alamıyorum

Karamel

eger dogru anladiysam. gondermek istedigimiz bilgi 64 byte tan fazla. mesela cok byte. ama usb hid sadece karsi tarafa 64 byte veri gonderebiliyor?

ben bu sabah bunun deneyini yaptiydim.

soyle bir algorithm dusundum. (mantikli olmayabilir. hocalar bir teyid etsin)

biz bir seferde max 64 byte gonderebiliyoruz ama bu 64 byte lik paketi bir kere gondermiyoruz. yani istersek. saniyede bunu max. 1000 kere gonrebiliyoruz.

hemen aklima su geldi. 64 byte in ilk 4 byte ini page variable larina adarim. sonra 256*256*256*256 kadar page im olur. istedigim kadar bilgiyi karsi tarafa gonderirim. ama  sonra dusundum ki bu cok fazla. gereksiz yani.

deneyi soyle yaptim. sifirinci byte a "P" character ini yerlestirdim. sonrakilerede "000" "001" ...... seklinde page address lerini yaptim. deney icin 3 page gonderdim. (3 tane 60 byte yani) microcontroller bu 180 byte i alabildi.

simdi bu algorithm usb hid systemine ters dusebilir belki. bunu bilemiyorum ama ben bunu deney yapmak icin yapmistim. hocalara bir danisin. benim theory im tutarli ise. boyle yapilabilir. 

Balcı

Alıntı yapılan: Karamel - 27 Ağustos 2015, 10:57:09
eger dogru anladiysam. gondermek istedigimiz bilgi 64 byte tan fazla. mesela cok byte. ama usb hid sadece karsi tarafa 64 byte veri gonderebiliyor?

ben bu sabah bunun deneyini yaptiydim.

soyle bir algorithm dusundum. (mantikli olmayabilir. hocalar bir teyid etsin)

biz bir seferde max 64 byte gonderebiliyoruz ama bu 64 byte lik paketi bir kere gondermiyoruz. yani istersek. saniyede bunu max. 1000 kere gonrebiliyoruz.

hemen aklima su geldi. 64 byte in ilk 4 byte ini page variable larina adarim. sonra 256*256*256*256 kadar page im olur. sonra dusundum ki bu cok fazla.

deneyi soyle yaptim. sifirinci byte a "P" character ini yerlestirdim. sonrakilerede "000" "001" ...... seklinde page address lerini yaptim. deney icin 3 page gonderdim. (3 tane 60 byte yani) microcontroller bu 180 byte i alabildi.

simdi bu algorithm usb hid systemine ters dusebilir belki. bunu bilemiyorum ama ben bunu deney yapmak icin yapmistim. hocalara bir danisin. benim theory im tutarli ise. boyle yapilabilir.

Ben picten veri gönderiyorum PC ye ve gönderdiğim verinin boyutu byte bile değil bit. Buton durumlarını gönderiyorum. Birde bir elemanı ile ADC gönderiyorum.

Timucin

Merhaba
Interrupt transfer'de Low speed'de Max  pack 8 byte dır. Full speed'de ise Max 64 byte'dır.
UCFG'den USB'nin fullspeed'e configure olduğundan emin olun
Endpoint descriptorlerde in ve out'da maximum pack size'in 64byte olduğundan emin olun
Report descriptor'de input ve output count'unun 64 byte olduğundan emin olun.

Çok etkisi olmayabilir ancak device descriptorde usb versiyonunu 2.00 ve hid descriptordeki hid versiyonunu 1.11 yapmakta fayda var.

Saygılarımla
Timuçin
Ediyorum : yazıları Detaylı okumamışım. Kusuruma bakmayın. Tek seferde 64 byte'dan fazlasını gonderemezsiniz