Bonjour à tous,
j'ai réalisé une carte d'interface USB (en CDC) avec mon PC. Cette carte fonctionne bien mais j'ai quelques soucis de rebond lorsque j'ai besoin de remonter l'état des interrupteurs connectés aux sorties de mon PIC.
j'ai donc deux interrupteurs et deux Leds connectés aux sorties du PIC:
j'ai récupéré la stack USB de Microchip pour commencer mon projet, et voici donc la partie ProcessIO() qui est exécutée en while(1):Code:#define LED1 PORTCbits.RC0 #define LED2 PORTCbits.RC1 #define BOUTON1 PORTDbits.RD0 #define INTERR1 PORTDbits.RD1
et voici la fonction CheckSensors() qui va renvoyer au PC l'état des deux interrupteurs:Code:void ProcessIO(void) { if((usb_device_state < CONFIGURED_STATE)||(UCONbits.SUSPND==1)) return; CheckSensors(); ServiceRequests(); }//end ProcessIO void ServiceRequests(void) { if(getsUSBUSART(input_buffer,6)){ switch(input_buffer[1]){ //LED1 case REQ_LED1: LED1 = !LED1; if(mUSBUSARTIsTxTrfReady()){ if(LED1 == 1) putrsUSBUSART("LED1_ON\n"); else putrsUSBUSART("LED1_OFF\n"); } break; //LED2 case REQ_LED2: LED2 = !LED2; if(mUSBUSARTIsTxTrfReady()){ if(LED2 == 1) putrsUSBUSART("LED2_ON\n"); else putrsUSBUSART("LED2_OFF\n"); } break;
donc j'ai une question à ce sujet.... l'information d'état de BOUTON1 pressed m'est remontée quasiment en permanence, je dois le recevoir une bonne centaine de fois par minute, alors que je n'ai besoin de l'info qu'une fois...j'ai tenté de mettre des delay mais à priori ce n'est pas la bonne méthode...Code://dans init old_sw2 = INTERR1; .... void CheckSensors(void){ //Bouton Poussoir if(BOUTON1 == 1){ if(mUSBUSARTIsTxTrfReady()){ putrsUSBUSART("BOUTON1_PRESSED\r\n"); } Delay10KTCYx(0); Delay10KTCYx(0); } //Bouton ON/OFF if(INTERR1 != old_sw2){ old_sw2 = INTERR1; if(mUSBUSARTIsTxTrfReady() & INTERR1==0){ putrsUSBUSART("BOUTON2_ON\r\n"); } else if(mUSBUSARTIsTxTrfReady() & INTERR1==1){ putrsUSBUSART("BOUTON2_OFF\r\n"); } Delay10KTCYx(0); Delay10KTCYx(0); } }
l'information pour BOUTON2 (ON, OFF) est également erronée remonte au PC plusieurs fois comme précisé pour le BOUTON1.
Pourriez vous m'aider à traiter ce problème de rebond sur mes retours capteurs ?
par contre je recontre également quelques problèmes de stabilité avec la com, et je me demandais s'il ne vallait pas mieux réorienter mon projet vers une stack USB en HID plutot qu'en simulation de port de COM. qu'en pensez vous ?
Merci pour votre aide.
Tiamat.
-----