Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Tiago Shimizu

PIC usb pic 18f2550 oscilando c18

Recommended Posts

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.

Compartilhar este post


Link para o post
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

Editado por Bommu Perneta

Compartilhar este post


Link para o post
Compartilhar em outros sites

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ç

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • #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.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    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.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    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ç

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×