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 :
Résultat :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); } } }
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
-----