erro inicialização PIC USB

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor SoMeWhErE » 26 Nov 2008 16:48

Ae vortei.......com mais problemas.....

Entaum estou usando a USB e agora precisei usar a int por mudança de estado do PORTB....

Depois que habilitei esta int comecaram os problemas, ja que a usb usa as interrupção tb....depois que habilitei parou de reconhecer a usb, as reconhecia....e mais um pacote de "paus" junto..

Fiz o seguinte, joguei a usb como Alta prioridade e a Portb como Baixa, talvez aqui tenha cometido algum erro em configurações....

Fiz o seguinte, coloquei o IPEN como 1. desabilito todas interrupções, a do PORTB só habilito em determinado evento e desabilito logo depois de um outro evento.

Só não sei o que acontece, que não as vezes nem o microcontrolador inicializa..

Se alguem tem alguma experiência nessa parte e puder me dar um conselho....

VALEWSSSS
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor Jorge_Francisco » 26 Nov 2008 18:15

Bom, usava a USB aqui com interrupção do PORTB e não acontecia problema algum, no caso usava para um odômetro.

Vou ver se acho os códigos, vou começar a cobrar hein,sacanagem,uhauhauhauh.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor SoMeWhErE » 27 Nov 2008 07:02

Jorge_Francisco escreveu:Bom, usava a USB aqui com interrupção do PORTB e não acontecia problema algum, no caso usava para um odômetro.

Vou ver se acho os códigos, vou começar a cobrar hein,sacanagem,uhauhauhauh.


OK! Jorge....fico no aguardo....enquanto issu vou fazendu uns testes aki....

ei...Jorge...vc que tem experiência com USB, pode nos passar algumas dicas com relação à alguns detalhes de hardware, tipo assim:

- Meu microcontrolador está com fonte externa;
- Estou usando um capacitor de Poliéster de 100nF entre VCC e GND da USB;
- O capacitor que liga o pino VUSB ao terra é um eletrolitico de 1uFx50V;
- E o pinos D+ e D- são ligados direto do conector aos pinos do PIC.

ahhh......bota na conta ae....depois nois acerta....hehehe....

VALEWS....ABRAÇUSSS
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor Jorge_Francisco » 27 Nov 2008 09:06

Uma parte do código é este:

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

  if (intcon.int0if)
  {
     intcon.int0if=0;
     
       for(indice = 0; indice < 32; indice++) //Endereça o MUX e faz a leitura do AD
       {
       portd=a;//Endereça o MUX

       userWR_buffer[2*indice] = ADRESL;  //Armazena a parte baixa do AD
       userWR_buffer[2*indice+1]=  ADRESH; //Armazena a parte alta do AD
       }//fim do for

       //Envia os 64 Bytes
       while(!Hid_Write(&userWR_buffer, 64));
       
     
  }
}

void main(void)
{
     // 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 ;       // Usado pela USB
     TRISD = 0b00000000;   // Endereçamento do MUX
     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

     INTCON= 0b10010000;//Interrupção Global Ativa e Interrupção Externa Ativa

     Hid_Enable(&userRD_buffer, &userWR_buffer);//Ativa o modo HID
     
     Delay_ms(2000);//2 segundos de pausa

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*                              Rotina principal                           *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
   while (1)
   {

   }//fim do while

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

Mensagempor Jorge_Francisco » 27 Nov 2008 09:10

- Meu microcontrolador está com fonte externa;(O meu também)
- Estou usando um capacitor de Poliéster de 100nF entre VCC e GND da USB;(Também uso)
- O capacitor que liga o pino VUSB ao terra é um eletrolitico de 1uFx50V;(também uso eletrolítico, mas de 10uF e o capacitor de 220nF que está do datasheet)
- E o pinos D+ e D- são ligados direto do conector aos pinos do PIC.(Coloco um resistor de 1k5 no D+ para full-speed)
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor ffcprog » 27 Nov 2008 09:22

Jorge_Francisco escreveu:- Meu microcontrolador está com fonte externa;(O meu também)
- Estou usando um capacitor de Poliéster de 100nF entre VCC e GND da USB;(Também uso)
- O capacitor que liga o pino VUSB ao terra é um eletrolitico de 1uFx50V;(também uso eletrolítico, mas de 10uF e o capacitor de 220nF que está do datasheet)
- E o pinos D+ e D- são ligados direto do conector aos pinos do PIC.(Coloco um resistor de 1k5 no D+ para full-speed)

Fonte externa. Sem problema.

Desde que, o pic fique de olho no VDD do conector USB, para executar o usb_init apenas com a certeza do conector presente.
A biblioteca usb da mikroe, liga o Fsen "resistor interno de 1,5K entre D+ e VUSB".
O capacitor entre VDD e VSS do cabo usb, pode ser de alguns uF.
D+ e D-, pode ser ligado diretamente aos pinos do PIC, desde que tenha certeza de que o pic vai inicializar em HZ nestes pinos.

Resistor externo de 1,5K para VDD e D+, não é necessario...

ffcprog
ffcprog
Byte
 
Mensagens: 145
Registrado em: 14 Fev 2007 23:16

Mensagempor Jorge_Francisco » 27 Nov 2008 09:29

ffcprog escreveu:
Jorge_Francisco escreveu:- Meu microcontrolador está com fonte externa;(O meu também)
- Estou usando um capacitor de Poliéster de 100nF entre VCC e GND da USB;(Também uso)
- O capacitor que liga o pino VUSB ao terra é um eletrolitico de 1uFx50V;(também uso eletrolítico, mas de 10uF e o capacitor de 220nF que está do datasheet)
- E o pinos D+ e D- são ligados direto do conector aos pinos do PIC.(Coloco um resistor de 1k5 no D+ para full-speed)

Fonte externa. Sem problema.

Desde que, o pic fique de olho no VDD do conector USB, para executar o usb_init apenas com a certeza do conector presente.
A biblioteca usb da mikroe, liga o Fsen "resistor interno de 1,5K entre D+ e VUSB".
O capacitor entre VDD e VSS do cabo usb, pode ser de alguns uF.
D+ e D-, pode ser ligado diretamente aos pinos do PIC, desde que tenha certeza de que o pic vai inicializar em HZ nestes pinos.

Resistor externo de 1,5K para VDD e D+, não é necessario...

ffcprog


Uso 1K5 por precaução. E você pode configurar fonte externa sem ter que esperar o VDD da USB. O capacitor entre VDD e VSS do cabo USB pode ser um eletrolítico de 1uF e um ceramico de 100nF. Já o capacitor do VUSB tem que ser 220nF ou próximo disso e se quiser um capacitor de 1uF ou 10uF.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor ffcprog » 27 Nov 2008 09:39

Jorge_Francisco
Meu querido, neste caso em especifico, eu sofri como cão, por causa deste maldito resistor por garantia. hehe
Ele garante 750R entre VDD e D+, no caso da mikroe Liby. Arranca esta coisa e pode utiliza-lo sem este.

ffcprog
ffcprog
Byte
 
Mensagens: 145
Registrado em: 14 Fev 2007 23:16

Mensagempor SoMeWhErE » 27 Nov 2008 11:27

Estou trabalhando com a Liby da mikroe....entaum pessoau..

já tive problemas com o resistor externo de 1k5, entaum tirei.

coloquei somente o cap de 220n no Vusb....e
1 eletrolitico de 1uF + 1 ceramico de 100nF entre VDD e VSS da USB.

ahh...e entre os pinos de alimentação do pic. tem um ceramico de 100nF

mesmo com o MCLR desligado, está com um resistor de 10K pro +5, não é necessário um capacitor nesse pino tb neh.

o que ta contecendo aki....

liga e desligo a fonte varias vezes, entaum as vezes ele reconhece, outras, na grande maioria não reconhece. tô ficando louco com esse negocio.....


Aqui esta o código só com USB, sem int do PORTB que ta dando pau.
só a inicialização do programa.

Código: Selecionar todos
void main()
{
   unsigned short cont_seg,i;
   char recebe;
/***********************************
 *      Configuração dos SFRs      *
 ***********************************/
   T0CON = 0b01001111;      //Configura Timer0
   INTCON = 0B100000000;   //Desliga Interrupções - Liga Geral
   INTCON2 = 0b10000000;   //Desliga Pull-Ups
   INTCON3 = 0; 
   IPR1 = 0;
   IPR2 = 0;
   PIE1 = 0;
   PIE2 = 0;
   PIR1 = 0;
   PIR2 = 0;
   RCON.IPEN = 0;           //Desabilita Prioridade nas Interrupções.
   SPPCON=0;
   CCP1CON=0;
   ADCON1 = 0b00001111;          // Configura os pinos de forma digital
/************************************
 *      Configuração dos Ports      *
 ************************************/
   TRISA = 0x3F;    //Configura PORTA como entrada
   TRISB = 0xFF;    //Configura PORTB como entrada
   TRISC = 0xFF;    //Configura PORTC como entrada
   TRISD = 0XFF;    //Configura PORTD como entrada
   TRISE = 0x04;    //Configura PORTE como entrada
   
   LATA = 0;
   LATB = 0;
   LATC = 0;
   LATD = 0;
   LATE = 0;
/* ***********************
   *      Limpa RAM      *
   *********************** */
    asm{
       LFSR     FSR0, $000
       MOVLW    $08
       CLRF     POSTINC0, 0
       CPFSEQ   FSR0H, 0
       BRA      $ - 2
    }
   while(button(&PORTB,7,10,0)); //Aguarda sinal +5 da USB
   UCFG.FSEN = 1;            //Liga periférico USB
   UCFG.UPUEN=1;             //liga pull up no D+ pra falar que é full speed
   delay_ms(500);            //Atraso para estabilizar VDD
   HID_Enable(&read,&write); //inicializa comunicação usb
   delay_ms(1000);
   ......resto do programa
}        //   Fim do Main

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *                                Interrupção                                *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void interrupt(void)
{
   HID_InterruptProc();                   // Tratamento da Interrupção de USB
}



Não sei se estou fazendo alguma coisa errada no software...mas creio que não porque:

Tenhu uma placa de desenvolvimento da Microgenios PIC18F, então quando coloco o PIC nessa placa e espeto a USB, reconhece todas as vezes, porem quando coloco em uma PCI que eu fiz pra testes, dá esse pau......

VALEWS
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor ffcprog » 27 Nov 2008 11:49

while(button(&PORTB,7,10,0)); //Aguarda sinal +5 da USB

while(! PORTB.F7);
ffcprog
Byte
 
Mensagens: 145
Registrado em: 14 Fev 2007 23:16

Mensagempor SoMeWhErE » 27 Nov 2008 14:15

é o seguinte agora está detectando toda hora, ligo, desligo e reconhece, só que quando ligo os resistores de pull-ups nas entradas que uso no meu sistema, ae ele não reconhece.

tiro os pull-ups, ae ele reconhece....alguem saberia me informar sobre isso????

VALEWAAAA
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Anterior

Voltar para PIC

Quem está online

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

x