USB - 18F4550 - MikroC e C++ Builder(Exemplos)

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor Jorge_Francisco » 25 Mai 2008 21:19

Kraio, que coisa complicada essa de USB hein, mas sei que é possível. Tem que se usar Bulk no modo Ping Pong.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Jorge_Francisco » 26 Mai 2008 15:00

Queria reescrever as minhas funções, escrever minha usb_writer() enchendo o buffer da usb e enviando os pacotes, mas não sei que registros ou a ordem que eu tenho que fazer isso, só sei que posso mandar 19 pacotes de 64 bytes cada, a cada 1ms(no caso de full-speed) o que daria 1216 Bps. Mas acho que apesar do markenting da microchip em falar que é full-speed só conseguiria 600Bps.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor fabim » 10 Jun 2008 08:40

o problema de todos os compiladores é a m´$%$# do delay que ele cria.

Assim.
Manda 64Bytes em 12 Mbps, tempo para envio de aproximadamente
(64*8*(1/12KK))+(65*(1/12kk))
Quando ele acaba de mandar os 64 bytes ele cai em um delay de
Delay_ms(1);
Durante este delay ele fica inutilizado de ler AD ou atender qualquer outra interrupção.

Observem no CCS,MikroC,PAscal,Basic, qualquer um.
Que no recebimento do buffer ele desliga a intcon.gie, e no envio também.

Isto acontece porque após receber os X bytes repassados pelo packet assim que espeta o periferico no pc, o PC sabe que o periferico ira enviar até 64bytes por exemplo, como o pc trata todas as USB de 1 em 1ms, o periferico USB fica amarrado a isto.

É um saco mais fazer o que né.

Fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Jorge_Francisco » 10 Jun 2008 22:09

Esse delay de 1ms é para full speed, pode-se enviar como eu disse 19 packet x 64 Bytes a cada 1 ms, no caso de High speed é 500us. Não testei isso aí não, qdo tiver um tempinho eu testo.

Vlw
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor fabim » 11 Jun 2008 08:20

não não
entra no usb.org..

Da uma estudinhada..

MAx bytes = 64 ...

Agora os EPO do PIC... são de 16 bytes * 16..

é 1mS do fim de um packet até o inicio do outro, se focê diminuir este tempo pra 500uS da um pau atras do outro, pode acreditar eu fiz o teste de todas as formas possiveis pra passar dos 64KBPS.

mais dificir.. fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Jorge_Francisco » 11 Jun 2008 08:41

Fabim, mas isso aí é usando HID no modo full speed, o padrão no modo high speed é 500us o que eles chama de uFrame. Sei que o PIC não dá suporte a este modo. Se usar bulk no modo ping pong dá sim pra enviar os pacotes que te falei, depois do envio tem uma pausa de 1ms.

Achei os seguintes links:

http://forum.microchip.com/tm.aspx?m=94120

http://forum.microchip.com/tm.aspx?m=147075

Esse ultimo é ótimo.

Vlw
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Jorge_Francisco » 11 Jun 2008 08:45

Ah, não irei mais usar HID, irei fazer meu driver,hehehe.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor cgxtreme » 17 Jun 2008 17:55

Código: Selecionar todos
//***   Variaveis

unsigned short userWR_buffer[2], userRD_buffer[2];



//***   Declaração de Interrupções

void interrupt()
{
  HID_InterruptProc();
}



//***   Funcao MAIN

void main()
{

  // configuração da direção dos pinos de I/O
  //0=saida, 1=entrada

  TRISA = 0b00000001;   // usado para o AD
  TRISB = 0b00000001;   // Pino B0 como entrada para o pulso do odômetro
  TRISC = 0b11111111 ;  // Pinos RC4 e RC5 usados pela USB,desativados qdo USB enabled
  TRISE = 0b00000111;

  //Configuração do AD

  ADCON0= 0b00000001;// AD ON e  Canal 0 Selecionado
  ADCON1= 0b00001110 ;// Canal 0 como Analógico e GND e VCC como referencia
  ADCON2= 0b10110101;// FOSC/16,16*TAD,Valor justificado a direita

  HID_Enable(&userRD_buffer, &userWR_buffer);//Inicializa a USB

  Delay_ms(2000);                      //Aguarda 2 segundos

  while (1)
  {

       adcon0.go_done=1;                        //Inicializa a conversão
       while(adcon0.go_done);                   //Aguarda finalizar a conversão

       userWR_buffer[0] = ADRESL;  //Armazena a parte baixa do AD
       userWR_buffer[1]=  ADRESH; //Armazena a parte alta do AD


      //Envia os 2 Bytes,gasta-se 1ms para enviar tudo
      while(!Hid_Write(&userWR_buffer, 2));

  }

}


Bem, basicamente essa é uma adaptação do código do Jorge_Francisco que lê somente um sensor de temperatura ligado ao AC0. As mudanças que realizei foi a alteração do tamanho do buffer de 64 para 2 bytes e retirei o looping que usava para mudar a entrada do Demux e para preencher o buffer.

As minhas dúvidas são:

1) Para que serve o serve o delay(2000)?
ele é um delay de 2s, mas para que serve? esse tempo tem a ver com o tempo que o microcontrolador utiliza na fase de enumeração?

2) Como vi, não tem nenhum include no código. Onde entraria esses includes?

3) Em que parte eu defino os descritores USB?

edit___________________________________

4) Por que o TRISC está todo configurado como entrada, se na transmissão o D+ e D- precisa trabalhar como entrada e saída ??

agradecido.
Existem 0b10 tipos de pessoas: as que entendem binário e as que não.
Avatar do usuário
cgxtreme
Bit
 
Mensagens: 17
Registrado em: 02 Jun 2008 16:09

Mensagempor Jorge_Francisco » 18 Jun 2008 16:21

Os dois segundos não lembro mais, mas provavelmente deve ser por causa das operações do PC tratando a USB.

Ja o PortC a resposta está no comentário :

"// Pinos RC4 e RC5 usados pela USB,desativados qdo USB enabled "

Ou seja, tanto faz a configuração no TRIS.

A configuração dos descritores se dá no arquivo USBdsc.c .

Abraço
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Jorge_Francisco » 19 Jun 2008 08:24

Tem alguns erros de comentários no meu código, não demora 1ms para enviar e sim tem um delay de 1ms após o envio, o outro erro é um pino do portb para odômetro. Como eu disse são erros de comentário e não de código.

Vlw
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor ze » 19 Jun 2008 08:37

olás. demorou mas o usb bate a minha porta. tô querendo comunicar o pic com o delphi ou vb via usb. o ex. do amigo aceltec num tá + no 4shared. alguém pode colocar no rapidshare.de pra mim?
otra cosa: uso o hitech-c. creio que não vou ter probl. em portar o cod. mas você já fez algo com ele? tbem quero que o pc mande controles pro pic. é simples?
resumindo: preciso de um "hello world" pro usb. na nossa lingua: "pisca led"
grato pelo vosso tradicional senso de coleguismo!!!!!!!

(hoje é quasisexta!!! iurúuuuuu!!!)
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor Sergio38br » 19 Jun 2008 11:03

boas Lellis, da uma olhada neste arquivo

http://www.microchipc.com/sourcecode/#pic18f4550usb

Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor Jorge_Francisco » 19 Jun 2008 11:46

lellis escreveu:olás. demorou mas o usb bate a minha porta. tô querendo comunicar o pic com o delphi ou vb via usb. o ex. do amigo aceltec num tá + no 4shared. alguém pode colocar no rapidshare.de pra mim?
otra cosa: uso o hitech-c. creio que não vou ter probl. em portar o cod. mas você já fez algo com ele? tbem quero que o pc mande controles pro pic. é simples?
resumindo: preciso de um "hello world" pro usb. na nossa lingua: "pisca led"
grato pelo vosso tradicional senso de coleguismo!!!!!!!

(hoje é quasisexta!!! iurúuuuuu!!!)


Pois é, não está mais disponível para down, isso que é um saco, tem que ficar indo no site para não perder a validade de down, bem que poderiam colocar hospedado aqui no forum mesmo. Se alguém aqui baixou ou se o próprio aceltec puder disponibilizar de novo agradecemos.

Sobre o hitech-c eu não sei nada, provavelmnete não conseguirá portar o código já que se faz uso de uma biblioteca própria(MikroC). VB não é o meu forte, mas se precisar de ajuda para comunicar-se tanto em Delphi quanto no C++ Builder poderei ajudar.

Vlw
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Jorge_Francisco » 19 Jun 2008 11:49

Sergio38br escreveu:boas Lellis, da uma olhada neste arquivo

http://www.microchipc.com/sourcecode/#pic18f4550usb

Sergio


Este exemplo é para usar como uma porta serial comum, não gosto de usar assim por causa da velocidade, prefiro HID.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Jorge_Francisco » 25 Jun 2008 11:23

E aí lellis desistiu?
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

AnteriorPróximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x