Estoy intentando guardar una señal recibida de mi receptor IR TSOP4838 . Configuré Timer0_A0
para que interrumpa cada borde (cayendo y subiendo). Lo que estoy tratando de hacer ahora es guardar el Tiempo y el estado (bajo / alto) de un estado (medio período) de la señal.
Para este propósito, creé una estructura que produce la duración y el tipo (Alto / Bajo). Pero parece que hay algo mal con mi código, porque cuando envío la señal a mi osciloscopio se ve completamente diferente (ver capturas de pantalla). Simplemente no puedo entender lo que está mal. FRAME_LENGTH
se define como 35 (¿Cómo sé el tamaño de fotograma cuando quiero poder recibir todos los Protocolos que tienen diferentes longitudes de fotograma, verdad?)
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer0_A0 (void)
{
if(edgeCount == 0){
edgeCount++;
TAR = 0;
}else if(edgeCount == 1){
rxData[pulseCount].duration = TACCR0;
TAR = 0;
if(P1IN & IR_Recv){
rxData[pulseCount].type = LOW_TYPE;
}else{
rxData[pulseCount].type = HIGH_TYPE;
}
pulseCount++;
}
//Frame end received at [FRAME_LENGTH] -> stop timer
if(pulseCount == FRAME_LENGTH){
TAR = 0;
Stop_Receive_PWM;
}else{
//Turn off cpu
__bic_SR_register_on_exit (CPUOFF);
}
}
Señal original capturada con TSOP4838:
Salidadelaseñal(ALTAyamoduladaa38KHz)
Hazme saber si necesitas más detalles.