TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: redep en 19 de Enero de 2009, 11:09:20

Título: USB 18f4550 volcado de datos, problema con mUSBUSARTIsTxTrfReady()
Publicado por: redep en 19 de Enero de 2009, 11:09:20
bueno,  me esta dando algun que otro problema mi conexion usb. Me explico para la conexion del USB con el visual basic no me da ningun problema en la mayoria de los casos( a veces me sale le de puerto invalido pero bueno...), tambien me recibe bien la informacion cada 5 min sin ningun problema el problema llega cuando quiero hacer el volcado de las memorias eeprom que son 1024 bytes y los quiero hacer enviando paquetes de 19bytes al PC lo mas rapido posible hay me ocurre un problema que no se mandan, y no se a que se debe si al tiempo que tarda en sacar 19bytes de las epprom no lo se la verdad

Código: [Seleccionar]
void volcado(void){//VOLCADO DE DATOS DE LA EEPROM  AL USB
if (flagVolcado==1){
HabilitarI2C(MASTER,SLEW_OFF);//inicializo modulo
SSPADD = 39;

}else{
goto finVolcado;
}
if(dir1!=0 || dir2!=0 || integrado!=0xA0){

c=0;
vol1=0;
vol2=0;
integradoVol=0xA0;

}else{
goto finVolcado;
}

if(paqueteFormado==0){
for (a = 1; a<=8; a++){
for (b = 0; b<=65535; b++){

output_buffer[c]=LeeDato_i2c_eeprom(integradoVol,vol2,vol1);
c=c+1;
//determinar que dato lee
if(vol1==0xFF & vol2==0xFF) {
vol1=0;
vol2=0;
if(integradoVol==174 || integradoVol==175){
integradoVol=0xA0;
}else{
integradoVol=integradoVol+2;
}
}else{
if(vol1==0xFF){
vol1=0x00;
vol2=vol2+1;
}else{
vol1=vol1+1;
}
}

if(c==13){
goto paquete;
}
}
}
paquete:
paqueteFormado=1;
}//paquete formado


if(mUSBUSARTIsTxTrfReady()){
mUSBUSARTTxRam((byte*)output_buffer,19)
if(dir1==vol1 & dir2==vol2 & integrado==integradoVol){
flagVolcado=0;
paqueteFormado=0;
c=0;
if(estadoGuardado==1){
flagGuardado=1;
estadoGuardado=0;
}
goto finVolcado;
}
paqueteFormado=0;

}
if(flagVolcado=1){
estadoGuardado=1;
flagVolcado=0;

finVolcado:
Delay1TCY();
}



}

Esta echo de la anterior forma porque segun el firmware del USB no se deben utilizar while para no bloquear la conexion. Haber si me podeis ayudar, si os sirve de algo en la recepcion tengo.

Código: [Seleccionar]
dummy = DoEvents()
         Loop Until MSComm1.InBufferCount = 19
         RxData() = MSComm1.Input