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

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor luis fernando » 21 Jun 2011 09:41

Fiz um bootloaderzinho USB-HID para os pic´s 18F2550/4550:

http://www.mikroe.com/forum/viewtopic.php?f=97&t=27859


pra quem tem dificuldade em fazer a parte do PC.
Baixe um programa free chamado: EasyHid
ele gera códigos fonte tanto em denphi, visual C++, visual Basic para HID no PC.


inté..
luis fernando
Bit
 
Mensagens: 10
Registrado em: 19 Abr 2007 09:24

Mensagempor Andre_Cruz » 23 Jun 2011 17:39

Pessoal alguém pode dar uma "lussss" ?
Compilei e gravei o exemplo da MikroC que envia o valor de uma variável pela USB.
O pc reconhece o PIC, quando abro o HID Terminal do MikroC e seleciono "mikroC HID Library test" não vejo nem um valor enviado pelo PIC.
Como faço pra receber ou visualizar os dados enviados pelo PIC pela porta USB ?

André Cruz
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor vtrx » 23 Jun 2011 19:57

Ja testou com outro programa?
Ve se funciona com esse.
http://www.4shared.com/file/pmBbrZLQ/USB_HID.html
Click no dispositivo para selecioná-lo.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor Jorge_Francisco » 23 Jun 2011 20:30

Andre_Cruz escreveu:Pessoal alguém pode dar uma "lussss" ?
Compilei e gravei o exemplo da MikroC que envia o valor de uma variável pela USB.
O pc reconhece o PIC, quando abro o HID Terminal do MikroC e seleciono "mikroC HID Library test" não vejo nem um valor enviado pelo PIC.
Como faço pra receber ou visualizar os dados enviados pelo PIC pela porta USB ?

André Cruz


primeiro você tem que clicar no nome do dispositivo no hid terminal, dependendo do exemplo que vc gravou, tem que escrever algo no terminal e ele reenviará o que foi escrito.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Andre_Cruz » 23 Jun 2011 21:18

Jorge,

Eu cliquei no nome do dispositivo HID Terminal, mesmo assim não recebi nada.
Gravei este código encontrado no help do Mikroc e segue abaixo:
Código: Selecionar todos
#include USBdsc.c;

unsigned short m, k;
unsigned short userRD_buffer[64];
unsigned short userWR_buffer[64];

void interrupt() {
  asm CALL _Hid_InterruptProc
  asm nop
}

void Init_Main() {
  // Disable all interrupts
  // Disable GIE, PEIE, TMR0IE, INT0IE,RBIE
  INTCON = 0;
  INTCON2 = 0xF5;
  INTCON3 = 0xC0;
  // Disable Priority Levels on interrupts
  RCON.IPEN = 0;
  PIE1 = 0;
  PIE2 = 0;
  PIR1 = 0;
  PIR2 = 0;

  // Configure all ports with analog function as digital
  ADCON1 |= 0x0F;

  // Ports Configuration
  TRISA = 0;
  TRISB = 0;
  TRISC = 0xFF;
  TRISD = 0xFF;
  TRISE = 0x07;

  LATA = 0;
  LATB = 0;
  LATC = 0;
  LATD = 0;
  LATE = 0;

  // Clear user RAM
  // Banks [00 .. 07] ( 8 x 256 = 2048 Bytes )
  asm {
    LFSR     FSR0, 0x000
    MOVLW    0x08
    CLRF     POSTINC0, 0
    CPFSEQ   FSR0H, 0
    BRA      $ - 2
  }

  // Timer 0
  T0CON  = 0x07;
  TMR0H  = (65536-156) >> 8;
  TMR0L  = (65536-156) & 0xFF;
  INTCON.T0IE = 1;            // Enable T0IE
  T0CON.TMR0ON = 1;
}


/** Main Program Routine **/

void main() {
  Init_Main();
  Hid_Enable(&userRD_buffer, &userWR_buffer);

  do {
    for (k = 0; k < 255; k++) {
      // Prepare send buffer
      userWR_buffer[0] = k;

      // Send the number via USB
      Hid_Write(&userWR_buffer, 1);
    }
  } while (1);

  Hid_Disable();
}


Pelo que entendi envia o valor da variável de controle do laço for a variável k !
Porém no HID Terminal eu não vejo nada.

vtrx,
Vou testar esse programa que você indicou, assim que testar relato aqui !

Valew

Abraço
André Cruz
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Andre_Cruz » 24 Jun 2011 10:52

Segue um print da tela do HID Terminal do MikroC.

Imagem

vtrx, testei com o USB_HID e ficou a mesma coisa.

Oia o print !

Imagem

Abraço
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor vtrx » 24 Jun 2011 11:23

André,voce deve clicar em 'info',no prog que te passei ou no da MikroC,e ver quais os parametros que aparece.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor Andre_Cruz » 24 Jun 2011 12:12

Aee "pesoAR" funfouuu " \o/ !!
:oops: Não tinha configurado o oscilador da USB !

Agora eu recebo os dados enviados pela USB e vejo no HID Terminal, estou mandando em sequência os dados, como faço pra mandar pular de linha o "carry return" ?? Tentei enviar o '\n' e o valor em hexa mas não rolou !
A parte de ler os dados enviados no PC alguém pode me passar ? Não consegui baixar o arquivo do Jorge !

e-1/2 andcruzprg[arroba]hot1/2.cão

Obrigado !
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor vtrx » 25 Jun 2011 13:37

André,se não estou enganado,o dispositvo manda bytes ou blocos de bytes,quem tem que interpretar o conteúdo é o seu software no PC.
O exemplo que te passei,é para estudo,eu adaptei um componente do Delphi para C++,pois o componente é nativo usando API do windows,sem DLL .
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Pic 18f4550 USB mickroc e builder

Mensagempor joaoluiz.jr » 29 Jun 2011 10:56

Olá, Jorge_Francisco, você poderia disponibilizar novamente os arquivos do pic para usar a USB com mikroc e builder? O link do 4shared esta indisponível (http://www.4shared.com/file/ps1yEoEJ/C_ ... _-_18.html)! Muito obrigado amigo!
joaoluiz.jr
 
Mensagens: 4
Registrado em: 28 Jun 2011 10:27

Mensagempor fabim » 05 Jul 2011 08:38

Jorge_Francisco escreveu:Para delphi é o mesmo código, sendo que com poucas modificações no que diz respeito a declaração das variáveis.


Jorge.
Estava eu aqui procurando um componente USB, para o borland C++.
Quando achei essa mensagem.

Tem como você me mandar por e1/2 este exemplo pro borland c++ ?

fableach@hotmail.com


BRIGADU
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 vtrx » 05 Jul 2011 11:28

Fabim,se for em HID,tenho como te passar a instalação de um componente Delphi no BCB C++,que é muito bom.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Problemas com a USB do PIC 18F4550

Mensagempor rafatorresst » 18 Ago 2011 11:46

Pessoal,
iniciei recentemente uns teste com a usb do pic 18f4550, para aprender esse recurso do mesmo, porem estou precisando de um help, seguinte:

estava testando uma aplicação que encontrei na net bem simples de enviar um byte pelo hyper terminal do mikroC para o pic e assim controlar suas saidas e receber o estado de uma entrada do pic, segue abaixo o código que estou utilizando:

Código: Selecionar todos
unsigned char userWR_buffer[64]; //Buffer de transmissão serial
unsigned char userRD_buffer[64]; //Buffer de recepção serial
char recebe;

void Init_Main() {
  // Disable all interrupts
  // Disable GIE, PEIE, TMR0IE, INT0IE,RBIE
  INTCON = 0;
  INTCON2 = 0xF5;
  INTCON3 = 0xC0;
  // Disable Priority Levels on interrupts
  RCON.IPEN = 0;
  PIE1 = 0;
  PIE2 = 0;
  PIR1 = 0;
  PIR2 = 0;

  // Configure all ports with analog function as digital
  ADCON1 |= 0x0F;

  // Ports Configuration
  TRISA = 0;
  TRISB = 0xFF;
  TRISC = 0xFF;
  TRISD = 0xFF;
  TRISE = 0x07;

}

void interrupt()
{USB_Interrupt_Proc();} //Tratamento da interrupção de USB

void main(){
Init_main();
HID_Enable(&userRD_buffer, &userWR_buffer);//Inicializa a USB

while (1)
 {
 if (portb.rb0==0)
  {
  userWR_buffer[0]=0x01; //Carrega byte a ser enviado para o PC
  while (!HID_Write(&userWR_buffer, 1)) ; //Envia e aguarda finalizar o envio do byte pela USB
  }
 else
  {
  userWR_buffer[0]='0'; //Carrega byte a ser enviado para o PC
  while (!HID_Write(&userWR_buffer, 1)) ; //Envia e aguarda finalizar o envio do byte pela USB
  }
 recebe=hid_read(); //Verifica se há algum byte no buffer de recepção
 if (recebe!=0) //Há algum byte para receber?
  {
  if(userRD_buffer[0]=='A') //É o 'A'?
  porta.ra1=1; //Sim, então liga o led
  if(userRD_buffer[0]=='B') //É o 'B'?
  porta.ra1=0; //Sim, então desliga o led
  Delay_ms(1000); //Delay para atualização
  }
 }
 HID_Disable();
}


O problema é que o hid terminal fica recebendo 0 independente do estado da minha entrada e a informação enviada não muda nada no uC, é como se os buffers de entrada e saida não estivesse com valor nenhum, alguem saberia como e poderia me ajudar?

Desde já agradeço e fico no aguardo.

Rafael
rafatorresst
 
Mensagens: 1
Registrado em: 16 Ago 2011 14:31

2 dispositivos HID x 1 Host

Mensagempor cellostec » 19 Ago 2011 08:53

Olá amigos do asm51:
Construí um protótipo 18F4550 (leds em portB, botões em portD e leitura analógica em portA). O firmware (HID) foi programado em mikropascal e o programa host em delphi ( esqueleto fornecido pelo EasyHid ).
Depois de muuuito esforço e passar pelas fases tradicionais de problemas(config dos fuses, cap 470 uF pino 18, cap 100 uF entre VDD e VSS, etc, etc.....) resolvidos com ajuda das dicas aqui do fórum, está tudo funcionando ok.
Para construir o dispositivo definitivo preciso utilizar 2 pics, afim de aumentar as entradas e saídas ( não quero mux e demux).
Como faço meu host reconhecer os 2 dispositivos já que PID e VID são
indicados como constantes dentro do programa. Se eu programar no segundo pic os mesmos VID e PID o host se comunica com os 2 ?
Qual a melhor solução para este problema(se é que é possível!)???
Desde já agradeço a atenção dos amigos!
Fernando Barcellos
cellostec
Bit
 
Mensagens: 19
Registrado em: 28 Jul 2011 16:56
Localização: Porto Alegre

Mensagempor vtrx » 19 Ago 2011 11:23

Posts: 16777215

Isso é real?
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

AnteriorPróximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Google [Bot] e 1 visitante

x