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

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor fabim » 10 Out 2008 19:06

meu posta o seu fonte em code..
E da um print, no erro que esta aparecendo, posta em algum host..

Meu, HID da mikroe num tem pau nenhum.

Funfa belezinha, no problem.

Se não esta confundindo aviso com erro ?

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 cgxtreme » 14 Out 2008 13:36

Código: Selecionar todos
/*----------------------------------------------------------------------|
|                                                                       |
|----------------------------------------------------------------------*/
 
/*----------------------------------------------------------------------|
|                       Definição de entradas                           |
|----------------------------------------------------------------------*/

/*----------------------------------------------------------------------|
|                         Declaração de variáveis                         |
|----------------------------------------------------------------------*/

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



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

void interrupt(){
  HID_InterruptProc();
}



/*----------------------------------------------------------------------|
|                         Função "Main"                                   |
|----------------------------------------------------------------------*/

void main(){

  int i;
/*----------------------------------------------------------------------|
|        Configuração das Portas de I/O
|----------------------------------------------------------------------*/
// 0=saida, 1=entrada

// PortA
  TRISA = 0b00000001;
// PortA.0 usado como entrada no AD
 
// PortB
  TRISB = 0b00000001;
 
// PortC
  TRISC = 0b11111111;
// PortC.4 e PortC.5 são usados pelo USB, seus valores (I/O) são setados
// quando a comunicação é feita.
 
// PortD
  TRISD = 0b00000000;
 
// PortE
  TRISE = 0b00000111;



/*----------------------------------------------------------------------|
|        Configuração dos Registradores do A/D                          |
|----------------------------------------------------------------------*/

  ADCON0= 0b00000001;
/*----------------------------------------------------------------------|
  AD ON e  Canal 0 Selecionado

  ADCON0.0   = ADCON0.ADON = 1, significa que o módulo conversor está habilidato.
 
  ADCON0.1   = ADCON0.GO = 0 (livre); = 1 (convertendo);
 
  ADCON0.5~2 = ADCON0.CHS3~0 = bits de seleção do canal analógico.
               ADCON0.CHS3~0 = 0000 = Channel 0 = AN0 = PartA.0
               
  ADCON0.7-6 = Não Implementado, lido como 0.
 
|----------------------------------------------------------------------*/

  ADCON1= 0b00001110;
/*----------------------------------------------------------------------|
  Canal 0 como Analógico e GND e VCC como referencia

  ADCON1.3~0 = ADCON1.PCFG3~0 = 1110,
               assim AN0 = Entrada Analógica e AN12~1 = E/S Digital
               
  ADCON1.4   = ADCON1.VCFG0 = Vref + (fonte) (Config. da Referencia de Voltagem)
               0 = Vdd; 1 = Vref + (AN3)

  ADCON1.5   = ADCON1.VCFG1 = Vref - (fonte) (Config. da Referencia de Voltagem)
               0 = Vss; 1 = Vref - (AN2)

  ADCON1.7-6 = Não Implementado, lido como 0.
 
|----------------------------------------------------------------------*/

  ADCON2= 0b10110101;
/*----------------------------------------------------------------------|
  FOSC/16, 16*TAD , Valor justificado a direita
 
  ADCON2.2~0 = Seletor da Frequencia do Conversor A/D
               101 = Fosc/16

  ADCON2.5~3 = Seletor do tempo de Aquisição do A/D
               110 = Tad * 16
               
  ADCON2.6   = Não Implementado, lido como 0.
 
  ADCON2.7   = Seleção do formato do Resultado do A/D
               0 = justificado a esquerda; 1 = a direita;
|----------------------------------------------------------------------*/



  HID_Enable(&userRD_buffer, &userWR_buffer); // Inicializa a USB
  Delay_ms(2000); // Aguarda 2 segundos, tempo dado ao computador para tratar
                  // a conexão do dispositivo USB

  //  Laço infinito
  while (1){

    for (i=0; i<64; i++){

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

      userWR_buffer[i] = ADRESL; //Armazena a parte baixa do AD
      i++;
      userWR_buffer[i] = ADRESH; //Armazena a parte alta do AD

    }
   
    //Envia os dados, logo após entra em um delay de 1ms.
    while(!Hid_Write(&userWR_buffer, 64));
    //Esse delay é devido à comunicação INTERRUPT, usada pela Classe HID

  }
  // Laço Infinito FIM

}


Esse é o código. Na pasta do projeto eu coloquei esse código, o USBdsc.C, Definit.h, Vars.h e mchpusb.NMS.

Mas dá erro de "conversion pointer to int" na linha da chamada

HID_Enable(&userRD_buffer, &userWR_buffer);

while(!Hid_Write(&userWR_buffer, 64));

Nas linhas que eu chamo as funções HID, dá erro.
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 » 14 Out 2008 13:49

Esta msg "conversion pointer to int" que aparece é um warning(aviso) e não um error(erro). Sempre aparece mesmo, mas compila e funciona. Deve ter mais algum erro.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor cgxtreme » 14 Out 2008 14:27

Hum ... bom saber que são somente Warning. Achei que fossem erros ... Mais uma vez agradecido ao Jorge e ao Fabim!

Aliás, Fabim, minha cidade é 15 minutos da sua!
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 fabim » 14 Out 2008 14:56

á credo. sai capeta..
no minimo é terra dos pé vermei, cidade das muié feia "nuporanga", ou dos travecos SJB..rsrs
Aqui em orlandia pió de tudo..
Terra dos comi repoi e róta cavieur..
MEndonça, junqueira, leite de moraes.. tudo aqui nessa m**** de cidade.
Unica coisa que salva é a muierada mais bonita e mitida da região.
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 cgxtreme » 14 Out 2008 16:36

Puxa, eu me superei ...

agora dá

Message Text "Const Flash"
Unit "USBgenHID.c"

to com medo ... alguém pode me passa um "passo-a-passo" por que eu devo tá fazendo alguma mulice ....

Fabim: sou de SJB =)
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 fabim » 14 Out 2008 16:45

for (i=0; i<64; i++){

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

userWR_buffer[i] = ADRESL; //Armazena a parte baixa do AD
i++;
userWR_buffer[i] = ADRESH; //Armazena a parte alta do AD
}

manim, posso até estar errado por inicializar em C agora.
Mais esta sua lógica se não me engano...
Esta gerando 128 bytes ao invés de 64 não ?
São 64 passadas dentro do while.
cada passada adiciona 2 valores
128....
for (i=0; i<32; i++){ //2 * 32 = 64

aqui você esta sobre encrevendo o valor e jogando apenas o High...

userWR_buffer[i] = ADRESL; //Armazena a parte baixa do AD
i++;
userWR_buffer[i] = ADRESH; //Armazena a parte alta do AD
i++; // << aqui vai ser + bytes + 1 para proxima escrita de 16 bits.

EX: primeira passada
userWR_buffer[i] = ADRESL; byte 0
i++;
userWR_buffer[i] = ADRESH; byte 1
i++; // aqui vai deixar byte 2

segunda passada

userWR_buffer[i] = ADRESL; byte 2
i++;
userWR_buffer[i] = ADRESH; byte 3
i++;

sucessivo....

Fabim

Voi jantar agora tchal
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 » 14 Out 2008 17:07

Não creio que o erro apareça por causa disso, mas o fabim está certo. Custa nada usar a matemática hein:

2*i+1 para numeros ímpares e
2*i para pares.

Então:

Código: Selecionar todos
for (i=0; i<32; i++)
{

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

      userWR_buffer[2*i] = ADRESL; //Armazena a parte baixa do AD
      userWR_buffer[2*i+1] = ADRESH; //Armazena a parte alta do AD
}
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor fabim » 14 Out 2008 20:22

jorgito.
Me diciona no msn.
Vo precida de um herpe seu..
Eu como você, ...
Mexemos a um certo tempo com usbesta..

Fiz uma pergunta la no forum microshit, e um camarada muito atencioso passou passo a passo como implantar 2 devices hid, em um unico pic.

Topas fuçar e aprender como fazer a bagaça rodar ?

to afim de fazer pra ajudar na inicialização cientifica da facu do nosso amigo.

Vai encara ? vai vai ?

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 » 14 Out 2008 21:32

Rapaz, já vi uma coisa assim lá no fórum. Agora, o F*** é a compatibilidade com o mikroC, então tudo terá de que ser na base do MPLAB.

Rapaz, estou enrolando para acabar uma placa USB-XBee, mas não custa nada ajuda-los. Vou dar uma olhada!!!
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor cgxtreme » 15 Out 2008 09:16

Nada, minha lógica tá certinha sim ....

Código: Selecionar todos
for (i=0; i<64; i++){

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

userWR_buffer[i] = ADRESL; //Armazena a parte baixa do AD
i++;
userWR_buffer[i] = ADRESH; //Armazena a parte alta do AD
}


Perceba eu também incremento o i dentro do looping, então ele é incrementado 2x por looping Exemplo:

Considere a primeira iteração do laço (i=0).

userWR_buffer[i] = ADRESL; //Armazena a parte baixa do AD
i++;
userWR_buffer[i] = ADRESH; //Armazena a parte alta do AD

Ele grava ADRESL em userWR_buffer[0] e o ADRESH em userWR_buffer[1]. Na próxima iteração, o i valerá 2, assim gravarei o Low em [2] e o High em [3]. Acho que tá certo sim, mas qualquer coisa, dá um toque.

_____________________________________________________________


Moçada, meu código agora está certo, só tem os warnings de "convertion pointer to int" mesmo. Agora eu gostaria de saber qual a melhor maneira de gerar o USBdsc.c. Sei que tem como gerar o USBdsc pelo mikroC, mas dá erro.

Imagem
Shot at 2008-10-15

alguém me dá um help de como criar um USBdsc que funcione !??! Agradecido

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 fabim » 15 Out 2008 10:45

return(resolvido);

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 cgxtreme » 30 Out 2008 15:49

double post ... sorry =/
Editado pela última vez por cgxtreme em 30 Out 2008 16:35, em um total de 1 vez.
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 cgxtreme » 30 Out 2008 16:34

Iae Jorge, como vai a correria ?! (ou outro apto a responder)

Ontem eu tava olhando o seu código que manda dados do uC pro PC via usb e me surgiu uma dúvida: Por que no código vc declara

Código: Selecionar todos
void interrupt(){
  HID_InterruptProc();
}


se vc não chama essa função nenhuma vez??

Agradecido!!

Outra duvida, no seu exemplo o cristal é de 4MHz. Pra usar um de 8, como ficariam as flags !?
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 » 30 Out 2008 18:14

void interrupt()//Função para o compilador tratar qualquer interrupção,
seja ela um botão ou a USB.
{
HID_InterruptProc();//Função para tratar a interrupção gerada pela USB
está definida na biblioteca HID.
}
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