Página 1 de 1

Interface USB HID PC. kkkkkkkkkkk

MensagemEnviado: 27 Mar 2009 10:31
por fabim
Ola pessoALL!

Este tópico foi movido do boteco a pedido do fabim, e muito correto,
por ser um post útil!

Qualquer colega/amigo que no tópico teve seu post deletado ou editado,
peço desculpas, se achar necessário, post novamente!

[]'s
Renie

Ps: a pedido do Jorge Francisco -RJ pela rotina ,seguem os posts!
Como foi disponibilizado aqui é válido, "mande pra mim" NÃO, leiam
as regras e o fórum INFORMAÇOES ADMINSTRATIVAS!

MensagemEnviado: 27 Mar 2009 13:19
por fabim
Cara tenho uma preguiça de mandar e-mail.
me add no msn, que eu mando procÊ.

OPS.: editando.
http://users.edpnet.be/rosseel01/DRO/PIC/index.htm?
Fica no primeiro quadro - PIC UNITS.
Lá embaixo,

USB HID C ANSI.rar
joystick_USB_HID_C_ANSI.rar

"o duro é aguentar a quantidade de gringo me mandando e1/2, sobre os meus comentários em português, os quais eles querem em inglês, ou em casteliano"" AFF

Cara sobre o ping pong buffer.

Seguinte não achei nada que explicasse exatamente como manipular isto.
Por isso com auda de um gringo amigo meu, eu fiz apenas para HID, e CDC.

Uma coisa que eu estava testando a um tempo, éra uma gangorra de 64bytes X 2.

Tipo. criei dois arrays de 64bytes.
Eu ficava enchendo 1, ao termino eu setava os FSR para este endereço e mandava bala pro pc pegar,
Nesse meio tempo em 1mS, eu ia enchendo novamente o outro array, quando enchia eu setava os SFR´s para o endereço desse outro array, e mandava bala.
Não sei qual o nome disso, mais na pratica parece uma gangorra.
tõen tuim tõen tuim.
PAra um osciloscopio. você não perde 1mS, porque dentro desse 1mS que o pc não quer conversa e esta lendo o 1° array, você ja esta preenchendo o segundo...

fabim

MensagemEnviado: 27 Mar 2009 13:43
por Jorge_Francisco
Vou dar uma olhada. Esse lance de encher um array enquanto está enviando eu faço.

Vlw

MensagemEnviado: 27 Mar 2009 14:00
por fabim
só que no caso.
É o seguinte.
Tipo essa liby aí que você vai fuçar.
Você cria um array no main certo ?
Tipo
Short dados[64].

Tanto essa aí quanto a do mikroC.
quando você fala USB_WRITE(&DADOS);
ele cai na rotina de envio de dados, pega esses 64bytes, transfere para o buffer EP alguma coisa que você esta utilizando..
Ou seja, ele gasta bastante processo para pegar um array e jogar para o buffer.
Certo ?
Porque isso ?! porque se emquanto o hw dedicado da usb DMA estiver mandando os dados, você tentar modificar algum, ele da erro de transmissão, isto ja é automatico!!
No meu caso.
LOOK THIS.

unsigned short USB_HID_Write(unsigned char *SrcPtr, unsigned short ByteCount){
// returns success as true
// false means: try later again
short I,E;
short *DstPtr;

asm nop;
E = BDEP1INStat & 0b10000000; // ja foram enviados os dados anteriores ?

if (!E){

DstPtr = &BuffEP1IN; // get destination address

if (ByteCount){ // fill the transmit buffer
I = ByteCount; //edit 10/11/08
while(I){
* DstPtr++ = * SrcPtr++;

I--; }
}

// clear the rest of the HID buffer (set arbitrary to zero, end of string)
if (ByteCount < HID_INPUT_REPORT_BYTES){
I = HID_INPUT_REPORT_BYTES - ByteCount; //edit 10/11/08
while(I){
*DstPtr = 0x00;
DstPtr++;
I--;
}
}

// prepare the buffer descriptor for sending
BDEP1INCnt = HID_INPUT_REPORT_BYTES; // bytes pra mandar bala
BDEP1INAdr = &BuffEP1IN; // buffer a ser enviado


BDEP1INStat &= USB_DTSMASk; // save only the data 0/1 bit
BDEP1INStat ^= USB_DTSMASk; // toggle the data 0/1 bit
BDEP1INStat |= USB_DTSEN; // set the DTS bit
BDEP1INStat |= USB_USIE; // set the UOWN bit (enable sending)

Não esquenta com o meu ingreis, é googleinglês.
Observe como funciona !!

Esse endereço do buffer, não é constante, você pode mudar ele.
Mais tem algumas artimanhas pra isso!! Simples mais tem.
Como eu fiz tudim na unha, e o dany me ajudando, e pesquisando juntos, descobrimos muitos detalhes juntos, que esses manuais por aí não dizem!!

Tipo, ao invés de mandar 64bytes, agora eu vou enviar apenas 8.
Se você tentar mover o valor de uma variavel, para BDEP1INCnt, acontece um erro estranho!! intão criamos um switch, que ele move um falor da flash de 1 a 64, para o BDEP1INCnt ...
E por aí vai, como disse são detalhes, meros detalhes..

Mais então é isso, divirta-se!!

fabim