Problème de communication USB (cdc) sur PIC
Répondre à la discussion
Affichage des résultats 1 à 25 sur 25

Problème de communication USB (cdc) sur PIC



  1. #1
    carcan

    Problème de communication USB (cdc) sur PIC


    ------

    Bonjour,

    je suis en train de réaliser une carte d'acquisition et de contrôle basée sur un PIC18F2550 qui peut être pilotés soit par un bus RS485, soit en USB.
    J'ai conçu tout le programme sans la communication en USB (en mode CDC = émulation de port série), tout fonctionne nickel. Après ajout des routines USB ça foire !!!!

    Pour comprendre le problème, j'ai refait un petit fichier source basé sur l'exemple "ex_usb_serial.c" fourni dans les exemples du compilateur CCS. Voici mon code :

    Code:
    #if !defined(__PCH__)
     #error USB CDC Library requires PIC18
    #endif
    
    #DEFINE LED1  PIN_A4
    #include <18F2550.h>
    #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
    #use delay(clock=48000000)
    
    #define __USB_PIC_PERIF__ 1
    
    //#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
    
    #define LED_ON output_low
    #define LED_OFF output_high
    
    #include <usb_cdc.h>
    
    void main(void) {
       char c;
    
       LED_OFF(LED1);
       
       usb_cdc_init();
       usb_init();
       
       while (TRUE) {
          usb_task();
          
           if (usb_cdc_kbhit()) {
             c=usb_cdc_getc();
             LED_ON(LED1);
             delay_ms(200);
             LED_OFF(LED1);
             delay_ms(200);
                      
             if (c=='1') output_low (PIN_A0);
             if (c=='2') output_high (PIN_A0);
             if (c=='3') output_low (PIN_A1);
             if (c=='4') output_high (PIN_A1);
             if (c=='5') output_low (PIN_A2);
             if (c=='6') output_high (PIN_A2);
             if (c=='7') output_low (PIN_A3);
             if (c=='8') output_high (PIN_A3);
             if (c=='9') printf(usb_cdc_putc, "New value: %c\r\n",c);
          }
       }
    }
    Résultat :
    le PIC reçoit bien les ordres lancé su PC (via hyperterminal), par contre je n'ai jamais réussi à renvoyer des caractères du PIC au PC. Par exemple dans le cas ci dessus, si je tape 9, je reçois le premier caractère puis le PIC se bloque (l'envoi d'un seul caractère en utilisant usb_cdc_putc() me donne le même résultat).

    J'ai essayé bcp de méthodes, des fichiers exemples trouvés sur le net, changé le PIC ... après 1 caractère envoyé vers le PC il se bloque.

    Si qqn a une idée pour me sauver, ce serait génial, je suis là dessus depuis ce matin et je ne trouve pas.
    Merci d'avance
    Laurent

    -----

  2. #2
    bypbop

    Re : Problème de communication USB (cdc) sur PIC

    Bonjour carcan,

    j'ai realisé un petit montage à base d'un 18f4550 et une led le tout alimenté avec un 7805 ( je n'utilise pas le vusb du cable usb) voila mon pic fonctionne j'ai fais des petit bouts de prog ki tourne dessus ... maintenant je voudrais voir la communication en mode cdc via usb ...

    mais je ne trouve pas d'infos clair et precise à ce sujet peux tu m'eclairer un peu à ce sujet ?

    Cordialement,
    bypbop

  3. #3
    carcan

    Re : Problème de communication USB (cdc) sur PIC

    Salut !

    tu ne précises pas en quel langage tu programmes ... je peux t'aider en CCS.

    Remarque : le programme ci dessous fonctionne, il manque juste une ligne d'initialisation "enable_interrupts(GLOBAL) ;" dans le début du "main".

    Si tu nous dis ce que tu voudrais faire comme communication, je peux t'envoyer qq exemples de programmes. (J'ai par exemple un petit programme qui permet via un 18F2550 d'afficher les valeurs de deux cellules IR (détection gaz) sur un LCD 2*16 ou les envoyer à un PC via USB +le soft PC réalisé en LabWindows).

    A+
    Laurent

  4. #4
    bypbop

    Re : Problème de communication USB (cdc) sur PIC

    Merci pour ton aide,

    alors j'utilise mikroC

    alors sur mon montage j'ai mis une led et je voudrais juste l'allumer et l'eteindre via l usb dans un premier temps ...

    Cordialement,
    bypbop

  5. A voir en vidéo sur Futura
  6. #5
    bypbop

    Re : Problème de communication USB (cdc) sur PIC

    Bonjour carcarn,

    Voila j'aurais de petite question sur mon montage j'ai un 7805 qui alimente deja mon pic 18F4550 que dois je faire du fil rouge usb.
    J'ai connecté à la masse de mon montage le fil noir
    vert et blanc à la 24, 23
    mais le fil rouge ???


    De plus je voulais savoir si je suis obligé d'utiliser un quartz 20mhz ou si l oscillateur interne suffit pour utiliser correctement le pic et faire communiquer en cdc avec le pc ..

    Cordialement,
    bypbop

  7. #6
    carcan

    Re : Problème de communication USB (cdc) sur PIC

    Salut !

    si tu as une alim externe, ton +5V de l'USB tu ne l'utilises pas tout simplement.

    Pour communiquer en USB, il te faut impérativement un quartz 20MHz et configurer le PIC en HSPLL (= fréquence horloge de 48MHz, nécessaire pour l'usb).

    A+
    Laurent

  8. #7
    invite7a49d0d5

    Cool Re : Problème de communication USB (cdc) sur PIC

    Citation Envoyé par carcan Voir le message
    Salut !

    si tu as une alim externe, ton +5V de l'USB tu ne l'utilises pas tout simplement.

    Pour communiquer en USB, il te faut impérativement un quartz 20MHz et configurer le PIC en HSPLL (= fréquence horloge de 48MHz, nécessaire pour l'usb).

    A+
    Laurent
    Bonsoir,

    la gestion spécifique de la PLL du 18F4550 est détaillée là:
    http://www.mikroe.com/forum/viewtopic.php?t=10646

    l'horloge de base pour génere les 48Mhz de l'USB... c'est 4Mhz...
    donc un quartz à partir de 4Mhz fera l'affaire...

    vede
    ;O]

  9. #8
    bypbop

    Re : Problème de communication USB (cdc) sur PIC

    ok merci je modifis mon montage

    Cordialement,
    bypbop

  10. #9
    bypbop

    Re : Problème de communication USB (cdc) sur PIC

    donc j'ai un quartz de 4mhz je peux le mettre directement sur les bornes osc1 et osc2 ?

    Cordialement,
    bypbop

  11. #10
    invite7a49d0d5

    Cool Re : Problème de communication USB (cdc) sur PIC

    re ;O]

    oui, avec un quartz 4Mz, et aprés dans les fusibles, faut
    configurer la "PLLDIV" sur 1... c'est à dire pas de division...

    si tu utilise un Quartz 8Mhz...
    faut mettre PLLDIV 2...

    si tu utilise un Quartz 20Mhz...
    faut mettre PLLDIV 5...

    afin de toujours avoir 4Mhz comme "fondamentale"...
    pour générer via PLL les 48Mhz de l'USB...

    c'est spécifique au 4550...
    le 4520 ou 2250 sont "plus simples" à gérer...
    si je me rappelle bien...

    ;O]

  12. #11
    bypbop

    Re : Problème de communication USB (cdc) sur PIC

    Bonjour à tous,
    voila je viens de mettre deux condos 22pf à la masse connecté à mon quartz 4mhz et au broche 13 et 14 OSC1 et OSC2
    pour les fusibles je mets une capture en pièce jointe car je ne suis pas encore sur que c'est correct ...


    Pour l'instant aucune detection quand je branche mon cable usb ...
    Images attachées Images attachées  

  13. #12
    invite7a49d0d5

    Cool Re : Problème de communication USB (cdc) sur PIC

    Bonsoir Bypbop,

    moi je choisirais plutôt "HS" comme type d'oscillateur... et non "XT"...

    vede
    ;O]

  14. #13
    bypbop

    Re : Problème de communication USB (cdc) sur PIC

    Voila je viens de changer pour HS: HS+PLL, USB-HS

    j'ai fait un bout de code pour voir si le pic fonctionne c'est ok la led clignote bien
    mais j'ai l'impression que c'est rapide

    void main() {
    TRISD=0;
    PORTD.B4=0;

    while(1)
    {
    PORTD.B4=1;
    Delay_ms(1000);
    PORTD.B4=0;
    Delay_ms(1000);
    }
    }
    sinon toujours pas de detection au niveau du pc quand je branche l'usb...

  15. #14
    bypbop

    Re : Problème de communication USB (cdc) sur PIC

    Bonjour vede je vais relier qd mm la broche 31 et 32 avec un 100uf à leur borne . Voila est ce que je peux faire ca ... repiquer à partir des broches 11 et 12

    cordialement,
    bypbop

  16. #15
    bypbop

    Re : Problème de communication USB (cdc) sur PIC

    avec la piece jointe ca ira mieux
    Images attachées Images attachées  

  17. #16
    carcan

    Re : Problème de communication USB (cdc) sur PIC

    Salut !

    pourquoi ajouter des condos alors que ton hardware fonctionne (...puisque tu arrives à faire clignoter une LED).

    La détection en USB ne se fera que lorsque tu auras programmé ton PIC avec le stack USB CDC (il y a une routine à appeler périodiquement), mais comme je ne connais pas mikroC, donc je ne peux pas trop t'aider sur ce coup.

    A+
    Laurent

  18. #17
    bypbop

    Re : Problème de communication USB (cdc) sur PIC

    Bonsoir carcan,
    ahh ok je me disais bien ...
    ma led fonctionne mais clignote anormalement elle clignote mais plus rapidement alors que dans mon code j'ai mis 1s mais ca clignote plus rapidement que ca ... donc vu que j'ai tout fait sauf le condos sur la borne 31 et 32 je me suis dis que ca pouvait venir de la ..

    Cordialement,
    bypbop

  19. #18
    bypbop

    Re : Problème de communication USB (cdc) sur PIC

    Je viens de brancher la broche 31 et 32 mon pic a l air bcp plus stable ... mais ca clignote tjrs trop vite je c pas pourquoi ...
    Cordialement,
    bypbop

  20. #19
    carcan

    Re : Problème de communication USB (cdc) sur PIC

    Salut !

    vérifie dans la doc si tu dois mettre HS ou XT pour du 4MHz ... je ne connais pas ça par coeur. Sinon tu as peut-être un problème de config ailleurs (dans tous les diviseurs, ...)

    A+
    Laurent

  21. #20
    invite7a49d0d5

    Cool Re : Problème de communication USB (cdc) sur PIC

    Citation Envoyé par bypbop Voir le message
    Bonjour vede je vais relier qd mm la broche 31 et 32 avec un 100uf à leur borne . Voila est ce que je peux faire ca ... repiquer à partir des broches 11 et 12

    cordialement,
    bypbop
    Bonjour Bypbop,

    oui, là c'est parfait...
    pour l'alimentation du PIC...

    vede
    ;O]

  22. #21
    invite7a49d0d5

    Cool Re : Problème de communication USB (cdc) sur PIC

    Citation Envoyé par carcan Voir le message
    Salut !

    vérifie dans la doc si tu dois mettre HS ou XT pour du 4MHz ... je ne connais pas ça par coeur. Sinon tu as peut-être un problème de config ailleurs (dans tous les diviseurs, ...)

    A+
    Laurent
    Salut!

    là à ce niveau je suis sur...
    à partir de 4Mhz...
    il faut "mettre/choisir" HS...

    et "XT" c'est pour quand on utilise
    un quartz de moins de 4Mhz...

    vede
    ;O]

  23. #22
    bypbop

    Re : Problème de communication USB (cdc) sur PIC

    voila c'est réglé faillait choisir HS: USB-HS et la fonctionne correctement ...

    manque plus que le stack USB est que qq'un aurait un exemple sous mikroC ?

    Cordialement,
    bypbop

  24. #23
    bypbop

    Re : Problème de communication USB (cdc) sur PIC

    Bonjour carcan, c'est quoi la difference entre mikroC que j'utilise et toi CCS
    Cordialement,
    bypbop

  25. #24
    carcan

    Re : Problème de communication USB (cdc) sur PIC

    Hello !

    ce sont deux langages différents (syntaxe et fonctions), et je ne connais pas le tien ...

    A+
    Laurent

  26. #25
    invite5faa1f08

    Re : Problème de communication USB (cdc) sur PIC

    Bonjour Carcan

    Je travaille actuellement sur le 18f2550 dans le cadre d'un stage "avec MPLAB et CCS". Je travaille aussi sur la connexion USB du PIC avec Hyperterminal. J'ai réutiliser ton programme que j'ai quelque peut modifier en enlevant la partie sur les led.

    Code:
    #if !defined(__PCH__)
     #error USB CDC Library requires PIC18
    #endif
    
    #include <18F2550.h>
    #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
    #use delay(clock=48000000)
    
    #define __USB_PIC_PERIF__ 1
    
    //#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
    #include <usb_cdc.h>
    
    void main(void) 
    {
       char c;
       enable_interrupts(GLOBAL) ;
       
       usb_cdc_init();
       usb_init();
       
       while (TRUE) 
       {
           usb_task();
          
           if (usb_cdc_kbhit()) 
           {
             c=usb_cdc_getc();
                      
             if (c=='1') output_low (PIN_A0);
             if (c=='2') output_high (PIN_A0);
             if (c=='3') output_low (PIN_A1);
             if (c=='4') output_high (PIN_A1);
             if (c=='5') output_low (PIN_A2);
             if (c=='6') output_high (PIN_A2);
             if (c=='7') output_low (PIN_A3);
             if (c=='8') output_high (PIN_A3);
             if (c=='9') printf(usb_cdc_putc, "New value: %c\r\n",c);
          }
       }
    }
    Deja moi j'utilise un quartz a 20MHz et je voulais savoir si cela ne posait pas de probleme avec cette ligne de code
    Code:
    #use delay(clock=48000000)
    .
    Ensuite dans l'aide ccs je ne trouve aucune trace de
    Code:
    usb_cdc_init();
    .
    J'ai donc quand même essayer ton code "modifier plus haut" mais j'ai l'assitant d'une nouveau materiel qui s'voure mais impossible d'installer le driver...

    Cordialement

Discussions similaires

  1. Communication USB PC <-> Pic 18F2455
    Par invitef5e98bfb dans le forum Électronique
    Réponses: 5
    Dernier message: 17/05/2010, 17h02
  2. Communication PIC<->PC en USB
    Par invite2f99ea04 dans le forum Électronique
    Réponses: 25
    Dernier message: 26/11/2009, 16h39
  3. Pic18f2550 + USB CDC + AN0
    Par invite6706d147 dans le forum Électronique
    Réponses: 4
    Dernier message: 10/06/2009, 09h46
  4. Problême Communication PIC Maitre Esclave
    Par invite55fe29e6 dans le forum Électronique
    Réponses: 6
    Dernier message: 28/10/2008, 12h58
  5. Communication I2C entre PIC et ordinateur / Problème d'interruption
    Par invite68d5b092 dans le forum Électronique
    Réponses: 3
    Dernier message: 01/11/2005, 23h45
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...