Ir ao conteúdo
  • Cadastre-se

PIC usb pic 18f2550 oscilando c18


Posts recomendados

Olá a todos. Tenho um desenvolvimento em MPLAB C18 com PIC 18F2550 em que preciso coletar algumas informações externas por meio da porta usb desse pic. Utilizo o programa exemplo da microship para isso porém, a conexão fica bem instável, onde em alguns momentos o dispositivo é desconectado. Só para entenderam o que preciso:

 

1º - Conexão estável com o PC, sem quedas e/ou perda de dados;

2º - Coletar esses dados por meio da porta serial e/ou outros métodos e enviar esses valores ao PC;

3º - Enviar pelo PC algumas informações para o microcontrolador para que ele realize algumas funções;

 

Já possuo isso porém, como mencionado, está instável. Utilizo as interrupções de nível alto para a comunicação USB e a nível baixo para a coleta de dados. Visto se tratar de uma aplicação comercial, não posso postar o fonte do mesmo contudo, gostaria de verificar se alguém teria disponibilidade de me dar uma consultoria e ajuda para a correção do problema, quer ele seja físico (desenvolvimento da placa), quer seja software.

 

Desde já agradeço a todos.

adicionado 26 minutos depois

Pessoal, atualizando o status:

Separei em partes as comunicações: USB e coleta de dados.

Se deixo somente a USB, funciona perfeitamente. A comunicação fica 100% e consigo Receber e enviar dados perfeitamente do controlador. Agora, se ativo a coleta de dados, no caso, as interrupções nível baixo, ferra com tudo. É possível digamos que, colocar isso em um "processamento paralelo" no microcontrolador para que ele opere os dois sem um interferir no outro?

Sei que na rotina de nível baixo estou utilizando alguns delay's, pois é necessário. Contudo até onde sei, caso entre uma nova interrupção de nível alto ele aborta a de nível baixo e vai para a nível alto, não é isso?

 

Obrigado.

Link para o comentário
Compartilhar em outros sites

Tá... to dando uma de doido e joão sem braço aqui... mas o que esse "USB" e "coleta de dados" você está utilizando comunicação serial e no USB e nesse outro "coleta de dados" tá usando um módulo a mais, um circuito ou coisa do tipo?

 

No resto faço a mínima ideia do que você ta falando huauhauauhahua parece um quebra cabeça ^^

 

 

OFF-

Delay's em um projeto comercial em vez de millis é complicado ^^

adicionado 6 minutos depois

/\ correção do "OFF" millis não tem no PIC lol ^^ acho que to cansado... fuizzzzzzzzzzzz

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

De fato as interrupts meio que podem ser consideradas ...

12 horas atrás, Tiago Shimizu disse:

um "processamento paralelo" no microcontrolador

que deve ser tratado com carinho pois é um misto de hw e sw

Pode ser alguma perda de sincronismo entre as interrupts. Mascare uma no início da outra e desmascare no fim. Verifique também se uma não está zoando as variáveis da outra. Realmente o delay é uma "perda de tempo". Verifique se não está usando mesmas funções nas interrupts e no loop. O compilador devia chiar. Realmente ponteiros podem ter vida própria: cuidado.

E que bom que não podes expor o fonte. Empatamos pois eu não poderia te dar consultoria :o)

abç

Link para o comentário
Compartilhar em outros sites

#Bommu Perneta, obrigado pela ajuda.
Então, quebrei um pouco mais a cabeça e avancei um pouquinho mais na resolução.
Lendo um livro que tenho sobre programação c para o 18F4550, ele dizia que todas as configurações com respeito a comunicação usb deveriam ser colocadas no arquivo usb_descriptor.c porém não dava mais detalhes sobre que informações esse arquivo contém. Abri ele então e fui lendo, linha a linha. Uma das informações dizia respeito a "máxima corrente" consumida pelo dispositivo. A mesma estava bem baixa, o que as vezes, conforme a utilização de alguns outras dispositivos, acabava reiniciando o microcontrolador. Aumentei essa corrente máxima e parou de reiniciar por conta disso. Ainda não consegui fazer uma análise mais detalhada com o osciloscópio para ver a corrente máxima que estava sendo consumida pela placa.
Bom, mas para entender, a "USB" que me refiro, é a comunicação entre o microcontrolador e  e o computador, utilizando a interface usb do dispositivo.
Quanto a "coleta de dados", utilizo deste os pinos I/O do microcontrolador, memórias externa, placas RF entre outros.
Assim como você, já estava tão cansado de quebrar a cabeça que decidi ir dormir pois já não estava conseguindo mais pensar direito.
#Isadora Ferraz, obrigado pela ajuda. Admiro muito seu conhecimento pois vejo e obsorvo várias dicas suas em outros post's. Vou revisar o software para ver se não estou tendo esse problema de uso conjunto das variáveis. 
"Mascare uma no início da outra e desmascare no fim" - tipo, seria mais ou menos isso:

#pragma interrupt YourHighPriorityISRCode

void YourHighPriorityISRCode() {
    INTCON3bits.INT0IE = 0;  <-- Desabilita as interrupções da INT0
#if defined(USB_INTERRUPT)
    if (PIR2bits.USBIF)
        USBDeviceTasks();
#endif
    if (USBDeviceState < CONFIGURED_STATE) return 0;
    INTCON3bits.INT0IE = 1; <-- Habilita as interrupções da INT0
}

#pragma interruptlow YourLowPriorityISRCode

void YourLowPriorityISRCode() {
 // Trata informações da INT0 
}

Quanto a não poder postar o código, infelizmente é uma decisão da empresa. 

 

Agradeço desde já a ajuda de todos.

Link para o comentário
Compartilhar em outros sites

2 minutos atrás, vtrx disse:

Fiquei com preguiça de ler tudo,mas uma dica para estes Pic com USB,é que voce deve evitar de ativar,no fuses,LVP,se ativar vai ficar desconectando.

 

kkkk, bastante coisa né.

Pois é, já havia percebido essa questão do LVP. Já deixei desligado até. Mas mesmo assim obrigado pela ajuda.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Agradeço as gentis palavras e até pela nova palavra mista de observar e absorver (!)

Pelo exposto, você tem um problema misto entre hw e sw. Resolva com um e complemente com outro. Percebi também na tua mente um 3º provável  misto de problemática entre corrente e tensão. Apesar de serem complementares, devem ser tratados de formas diferentes.

 

E sim é aquilo da desabilitação da interrupt mesmo. Lembrando que foi apenas insight, um misto entre técnica-arte-magia apenas e pra te ajudar a localizar o problema

 

Enfim.. que bom que já achou o caminho. Para progredir basta prosseguir...

 

Neste momento aposto que você está sentindo vontade de comer um ... misto

 

abç

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...