Pues a mi entender y según dice claramente el datasheet las señales continuas las filtra.
Esto es lógico porque los tsop estos son para mandos a distancia y filtra cualquier cosa que no sean pulsos, además es especialmente sensible a ciertas duraciones de los pulsos.
Respecto a la frecuencia, la sensiblidad va disminuyendo a medida que te alejas de los 38 khz, pero sigue detectando a 30, 50 o 60 Khz si la señal es lo suficientemente fuerte, de hecho esto lo usé para hacer un medidor de distancias con IR: a medida que te alejas de los 38 khz el tsop es menos sensible y por tanto solo reacciona si el objeto está más cerca.
Tuve el problema que comenta jeremylf: al principio le mandaba 38KHz continuos y no funcionaba, mejor dicho solo detectaba algo al inicio de la señal. Luego según el datasheet le mandé pulsos de 600 uS on + 600 uS off (sobre la portadora de 38 Khz) y empezó a funcionar, pero incluso si esta señal es continua la sensiblidad no es gran cosa, mucho menor que usando un mando a distancia, así que le mandé trenes de pulsos de un par de mS seguidos de varios ms apagado y la sensiblidad aunmentó bastante.
Al final el mejor resultado lo obtube con esta rutina (GcBasic):
For tempobyte = 1 to 12
for pulso = 1 to 20 - tempobyte 'más pulsos para las primeras medidas
set led_ir_izq on
wait tempobyte us
if tsop_ir off then detect += 1
set led_ir_izq off
wait tempobyte us
next
if detect > 3 then 'ha habido deteccion de objeto
dist_izq = filter(tempobyte-1, dist_izq)
if dist_izq = 0 then atrapadoi += 1
set flag_ir_izq off
return
End if
next
La rutina manda trenes de pulsos de duración 12+12 uS hasta 1+1 uS (+ unos pocos ciclos de la rutina) esto es con reloj a 20 Mhz en un pic16f876.
Esto se repite para el led IR izquierdo, y el total se ejecuta cada 15 mS (por timer0).
Detecta objetos por reflexión hasta unos 3m en buenas condiciones, la distancia va desde 1 hasta 12.
Al primcipio a 4 Mhz usaba esta rutina (SDCC), porque los ciclos de más se notaban mucho:
dd = 0;
for (med=9; med>0; med--)
{
pul = 65;
det = 0;
_asm
MOVF _med,W
pulsod:
BSF PORTA,6 //enciende led derecha
ADDWF PCL,F //salta _med NOPs para obtener la frecuencia deseada
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BTFSS PORTA,4 //lee A,4
INCF _det,F
BCF PORTA,6 //apaga led dcha
ADDWF PCL,F
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ _pul,F
GOTO pulsod
_endasm;
if (det > 10)
{
dd= med;
goto saled;
}
}
Saludos.