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:
Code : Tout sélectionner
#define LED1 PORTCbits.RC0
#define LED2 PORTCbits.RC1
#define BOUTON1 PORTDbits.RD0
#define INTERR1 PORTDbits.RD1
Code : Tout sélectionner
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;
Code : Tout sélectionner
//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.