TODOPIC

FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: jeremylf en 24 de Agosto de 2010, 21:04:05

Título: Señal continua con TSOP1738
Publicado por: jeremylf en 24 de Agosto de 2010, 21:04:05
Hola.

Acabo de comprar el receptor infrarrojo TSOP1738 y quiero saber como puedo obtener en su pin de salida una señal continua cuando hay señal de un led IR que este emitiendo y un 0 cuando no.

Ocea, lei que este encapsulado evita señales continuas, entonces la idea seria enviar continuamente el byte 0xFF pero como haria esto? En el pic estoy generando una señal de 38Khz con el timer 0 y, atravez de un transistor, conecto el led IR con 15ohm a tierra.

Espero puedan ayudarme.

Gracias, salu2.
Título: Re: Señal continua con TSOP1738
Publicado por: Nocturno en 25 de Agosto de 2010, 01:37:49
Si no recibe nada, encontrarás un 1 fijo en su salida.
Si recibe permanentemente una señal de 38KHz, encontrarás un 0 fijo en la salida.
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 26 de Agosto de 2010, 02:59:29
Eso me parece falso. En su datasheet en la pag. 3 sale que ese tipo de señal la suprimen... por eso esq pregunto... =S
Título: Re: Señal continua con TSOP1738
Publicado por: AKENAFAB en 26 de Agosto de 2010, 03:19:11

Que es lo que deseas hacer ???

Como es que quieres emplear ese ci??

estará bien si subes su hoja de especificaciones!

Un 0 continuo no tendras , notaras el cambio de on.off de los 38KHz, si quieres 0 0000 agrega a la salida una resistencia-capacitor junto con un smith.trigger y tendras tu 0.

Aunque no entiendo bien que es lo que prentendes hacer.

Lo que menciona nocturno va con los receptores ir que conozco,como los de sharp,1138,panasonic,etc...
Título: Re: Señal continua con TSOP1738
Publicado por: Nocturno en 26 de Agosto de 2010, 04:48:49
El 0 es continuo si la señal IR es de 38KHz, creedme.
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 26 de Agosto de 2010, 10:07:27
Nocturno, estoy probando eso porque era la forma mas sencilla que tb se me ocurrio hacer pero te lo juro que no funciona, bota un momento 0 pero luego ya no... que hago ???


gracias.
Título: Re: Señal continua con TSOP1738
Publicado por: Nocturno en 26 de Agosto de 2010, 12:13:31
A mí sí me funciona así, ¿será que la señal que le llega no es de 38KHz?
Título: Re: Señal continua con TSOP1738
Publicado por: aitorsp en 27 de Agosto de 2010, 04:42:04
Nocturno, estoy probando eso porque era la forma mas sencilla que tb se me ocurrio hacer pero te lo juro que no funciona, bota un momento 0 pero luego ya no... que hago ???


gracias.

Hola:

Nocturno tiene razon, la señal baja a cero cuando detecta y además el datasheet indica que debes emitir un numero determinado de pulsos de manera continua para que el cero sea efectivo (Fijate en la señal de prueba del datasheet) . Además de esto la frecuencia de la portadora debe estar totalmente centrada en 38 khz y el diodo infrarrojo emisor debe tener su longitud de onda centrada en 950 nm. Si todo esto es correcto puede que tengas problemas en el hardware y quizas si adjuntas el circuito podemos ayudarte mejor.

un saludo

aitor
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 27 de Agosto de 2010, 19:37:14
Hola.

Haber, el diagrama es este:
(http://img823.imageshack.us/img823/7503/wwee.jpg)

Y el codigo que me generan los 38khz por el pin A2 del PIC16F876 con el timer 0 es este:
Código: [Seleccionar]
#INCLUDE <16F876.h>

#FUSES HS, WDT, PUT, PROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG

#USE DELAY (CLOCK = 20 000 000, RESTART_WDT)

#DEFINE TX_IR     PIN_A2

#USE FAST_IO(A)
#USE FAST_IO(B)
#USE FAST_IO(C)

#ZERO_RAM
void main (void)
{
   delay_ms(303);
   disable_interrupts(GLOBAL);
  
   setup_wdt(WDT_288MS);
  
   set_tris_a(0b010001);
   output_a  (0b00);
   output_high(TX_IR);
 
   set_tris_b(0b11000000);
   output_b(0x00);
  
   set_tris_c(0x00);
   output_c(0x00);
  
   port_b_pullups(true);
  
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1);
   set_timer0(126);
   enable_interrupts(INT_TIMER0);
  
   enable_interrupts(GLOBAL);
 
   while (true)
   {
      restart_wdt();

   }
}

#INT_TIMER0
void Generador(void)
{
   output_toggle(TX_IR);
  
   set_timer0(126);
}

Mi intencion, nuevamente, es que el receptor IR vote siempre un 1 cuando le llegan los 38khz directos constantes del led IR.
No se que puedo estar haciendo mal.

Gracias.

PD: El transistor para el led infrarrojo es un 2n2222a (olvide especificarlo en el dibujo).
PD2: datasheet del TSOP17XX (http://www.datasheetcatalog.org/datasheets/208/301092_DS.pdf)
PD3: Entre los terminales de alimentacion del TSOP1738 hay un condensador 104 (olvide dibujarlo).
Título: Re: Señal continua con TSOP1738
Publicado por: Nocturno en 28 de Agosto de 2010, 01:12:33
Si no me equivoco, con ese programa generas 19KHz, pero no 38.
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 28 de Agosto de 2010, 01:30:16
Porque? El timer 0 del PIC16f876 es de 8 bits =S
Título: Re: Señal continua con TSOP1738
Publicado por: Nocturno en 28 de Agosto de 2010, 01:35:38
Porque has configurado el timer para que salte la interrupción a una frecuencia de 38KHz.
Pero cada vez que entras en el timer cambias el signo de la salida, y para generar un pulso completo necesitas entrar dos veces: una para el flanco de subida y otra para el flanco de bajada. Por lo tanto, la frecuencia de la forma de onda que estás generando es de 19KHz.
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 28 de Agosto de 2010, 02:52:42
Entonces debo solo cambiar a 76khz? Lo acabo de hacer y sige sin funcionar.. o es diferente. gracias.

PD: Para esto, cambie la carga a 192: setup_timer0(192).
Título: Re: Señal continua con TSOP1738
Publicado por: Nocturno en 28 de Agosto de 2010, 07:58:25
¿No tienes posibilidad de medir la frecuencia con un frecuencímetro u osciloscopio?
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 28 de Agosto de 2010, 14:25:12
Lamentablemnete mi osciloscopio esta malogrado y no tengo un frecuencimetro.

Que puedo hacer? =/

Gracias.
Título: Re: Señal continua con TSOP1738
Publicado por: KALLITOS en 28 de Agosto de 2010, 14:57:17
Hola jemerylf, para observar el pulso generado puedes simular en PROTEUS y miras la salida de pulsos del pic en el osciloscopio.

saludos
Título: Re: Señal continua con TSOP1738
Publicado por: PalitroqueZ en 28 de Agosto de 2010, 18:05:05
Hola jemerylf, para observar el pulso generado puedes simular en PROTEUS y miras la salida de pulsos del pic en el osciloscopio.

saludos

opino lo mismo, lo que necesitas es saber si la onda generada corresponde con el cálculo. Se supone que el proteus genera la señal basado en los calculos teóricos.

Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 28 de Agosto de 2010, 18:27:48
Bueno, acabo de probar con ultimo cambio a setup_timer0(192) y obtengo esto en el proteus:
(http://img695.imageshack.us/img695/6262/3888.jpg)

Lo cual me confunde, no se supone que el periodo de todo el pulso deberia de ser 26.3us?? Estoy realmente confundido... denme una mano porfas.


Gracias por todo.
salu2
Título: Re: Señal continua con TSOP1738
Publicado por: jhozate en 28 de Agosto de 2010, 19:24:08
mm si no estoy mal, se requiere una F=38khz, su periodo es de 26.31uS, entonces habria que entrar en la interrupcion cada 13,15uS y cambiar el flanco
Título: Re: Señal continua con TSOP1738
Publicado por: Nocturno en 29 de Agosto de 2010, 02:57:26
Prueba a poner primero el set_timer dentro de la interrupción. No creo que sea la razón de la avería, pero alguna distorsión mete, ya que el output_toggle consume varios ciclos de reloj:

#INT_TIMER0
void Generador(void)
{
   set_timer0(192);
   output_toggle(TX_IR);
}
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 29 de Agosto de 2010, 13:52:33
El output_toggle solo consume 2 ciclos segun veo. Acabo de deshabilitar el wdt por pobrar y sige igual todo... que puede estar falllando? el proteus? =/

Gracias.
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 29 de Agosto de 2010, 14:22:16
Sera porq tengo cargada la PC casi al 100%???? =/
Título: Re: Señal continua con TSOP1738
Publicado por: cerebro en 30 de Agosto de 2010, 02:09:40
una pregunta tonta... cuando cargaste el .HEX en proteus también modificaste el valor del oscilador a 20 MHz no? por defecto creo que trae 1 MHz si no me equivoco...
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 30 de Agosto de 2010, 05:36:35
claro que si jaja

... =S
Título: Re: Señal continua con TSOP1738
Publicado por: aitorsp en 30 de Agosto de 2010, 07:27:07
claro que si jaja

... =S

Hola:

En tu circuito no veo el condensador que recomienda el fabricante (4.7 uF) "recommended to suppress power supply disturbances"
Puede que no tenga importancia pero por si acaso puedes probar a ponerlo.

Un saludo

Aitor
Título: Re: Señal continua con TSOP1738
Publicado por: cerebro en 30 de Agosto de 2010, 14:13:44
claro que si jaja

... =S

jajajaja bueno si lo pregunte es porque me ha pasado  :D..... la cosa creo que va así...

necesitamos 38KHz
Código: [Seleccionar]
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1);
De esta manera tenemos que el preescaler se asigna al WDT, además derivamos del clock principal es decir Fosc/4 entonces hasta ahora tenemos nuestros Fclock=20M/4=5MHz. Pero solo se incrementa cuando hay flanco de subida -> Fclock=2,5MHz. (mi error  :mrgreen:). La interrupcion del timer salta cuando se desborda osea que necesitamos 32 ticks para generar una frecuencia de 78KHz, por lo tanto 256-32=224. y ahí queda la cosa....

Código: [Seleccionar]
#INCLUDE <16F876.h>

#FUSES HS, WDT, PUT, PROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG

#USE DELAY (CLOCK = 20 000 000, RESTART_WDT)

#DEFINE TX_IR     PIN_A2

#USE FAST_IO(A)
#USE FAST_IO(B)
#USE FAST_IO(C)

#ZERO_RAM
void main (void)
{
   delay_ms(303);
   disable_interrupts(GLOBAL);
  
   setup_wdt(WDT_288MS);
  
   set_tris_a(0b010001);
   output_a  (0b00);
   output_high(TX_IR);
 
   set_tris_b(0b11000000);
   output_b(0x00);
  
   set_tris_c(0x00);
   output_c(0x00);
  
   port_b_pullups(true);
  
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1);
   set_timer0(224);
   enable_interrupts(INT_TIMER0);
  
   enable_interrupts(GLOBAL);
 
   while (true)
   {
      restart_wdt();

   }
}

#INT_TIMER0
void Generador(void)
{
   set_timer0(224);
   output_toggle(TX_IR);
  

}

En proteus tiempo 26,5uS frecuencia 37,7 KHz.

Saludos!
  
Título: Re: Señal continua con TSOP1738
Publicado por: Nocturno en 30 de Agosto de 2010, 16:05:26
No he entendido eso de que sólo desborda en flanco de subida, ¿puedes explicarlo?
Título: Re: Señal continua con TSOP1738
Publicado por: cerebro en 30 de Agosto de 2010, 17:16:46
No he entendido eso de que sólo desborda en flanco de subida, ¿puedes explicarlo?
:z) menos mal que has estado atento porque le he pifiado!, eso es cuando el clock es externo  :oops:...

Traducción del datasheet:
Citar
El modo temporizador se selecciona poniendo a cero el bit T0CS ( registro OPTION_REG <5>). En el modo temporizador, el módulo Timer0 se incremento en cada cielo de instrucción (sin el preescaler). Si el registro TMR0 se escribe, el incremento se inhibe durante los siguientes dos ciclos de instrucción. EL usuario puede trabajar teniendo en cuenta esto y ajustando el valor a cargar en el TMR0.

El modo contador se selecciona poniendo a uno el bit T0CS (registro OPTION_REG <5>). El modo contador, Timer0 se incremento en cada flaco de subida o de bajada de la señal que le llega por RA4/TOCK1. El flanco de incremento se determina por el bit T0SE (registro OPTION_REG <4>). Poniéndose a cero T0SE se selecciona el flanco ascendente. Las restricciones de la señal de reloj externa se describen en la sección 5.2.

Ahora esta es la cosa...
la interrupción se genera cuando:
Citar
The TMR0 interrupt is generated when the TMR0 register overflows from FFh to 00h.

y la interrupción se atiende cuando  :shock: (quiere?)

(http://img72.imageshack.us/img72/571/timer0.th.png) (http://img72.imageshack.us/i/timer0.png/)

Entonces la interrupción se genera cuando el timer pasa de FF a 00 pero la rutina recien se atiende cuando TMR0 tiene un valor de 32  :shock: ahí esta la perdida de tiempo es casi del doble de lo que se necesita, creo que posiblemente sea un retardo de CCS  :x porque lo probe para varios valores de TMR0! y siempre tarda los 32 ticks del TMR0, perooo en donde se pierde o invierte este tiempo?.
Título: Re: Señal continua con TSOP1738
Publicado por: jhozate en 30 de Agosto de 2010, 18:27:12
asi es, la interrupcion se genera en el paso de FF a 00, pero no es q se pierda el tiempo, porque segun calculos tu le cargas un valor al timer para que el empieze a contar desde dicho valor hasta FF y cuando pasa a 00 ocurre la interrupcion. Era asi o meti las de caminar hasta el fondo :mrgreen:??
Título: Re: Señal continua con TSOP1738
Publicado por: cerebro en 30 de Agosto de 2010, 19:11:03
es así pero si no estuviese ese retraso el valor exacto sería de 192 como dijo Manolo para que ocurran 64 ticks de TMR0 para 78KHz, como ocurre ese retraso de 32 ticks para que sea exacto hay que cargar otros 32 ticks o sea 224 al TMR0  :? ... yo montaría todo y probaría medir el tiempo real con algún analizador lógico (el pickit2 trae un par) o ir mostrando el valor del TMR0 a la entrada y salida de la interrupción de alguna manera...
jhozate fijate que si utilizamos 196 que son 64 ticks + los 32 del retraso son 96 más los ciclos que perdemos escribiendo el TMR0 y toggle redondeemos a 100 ticks... y eso es mas o menos 20 uS o sea una señal de un período de 40 uS que es lo que está midiendo jeremy (que batata!  :D).
Título: Re: Señal continua con TSOP1738
Publicado por: jhozate en 30 de Agosto de 2010, 19:15:48
es q algunas temporizacion con tmr0 en C  :z) , las formulitas van a la fija con el assembler, ahi toca ir ensayando con el timer para ajustar, yo lo simule en proteus pero primer no me dieron los 38K sino 37K y con una valor bastante diferente del que da la formula, la otra es que en simulacion podes usar la herramienta counter timer y lo pones en modo frecuencia
Título: Re: Señal continua con TSOP1738
Publicado por: Nocturno en 31 de Agosto de 2010, 01:39:03
No me fío de Proteus, ese tmr0=32 al entrar en la interrupción es muy raro.
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 31 de Agosto de 2010, 20:25:35
Vaya, entonces ni de lo que dice proteus me puedo fiar.

Lo mejor, como dicen, seria gestionar esto con algun instrumento pero en estos momentos no cuento con alguno.

Por otro lado, es muy raro eso que hace proteus al agregar 32 ticks cada salta de timer 0... Desde cuando y porq pasa esto?!! Consecuentement, esto m deja dudas d como este el pic generando la onda en fisico, pero bueno.


De todas forma, gracias a todos.

Un gran saludo.
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 06 de Septiembre de 2010, 16:43:05
Hasta el momento lo que he echo es enviar por unos 200us una señal continua de 38khz y por unos 200us nada asi sucesivamente. En el receptor, en la salida, he puesto un condensador de 1uf asi tengo un 1 o un 0.

Por otro lado, sigo pensando que no es posible que el tsop1738 me entrege un 1 continuo con una señal de 38khz continua, pues a pesar de q no me esta funcionando a mi, como ya lo abia dicho, en esta parte de su datasheet mencionaan que el tsop1738 suprime cualquier señal continua de 38khz...

(http://img64.imageshack.us/img64/8205/waadelirrc.jpg)

Siempre tendre la duda... xD

Salu2.
Título: Re: Señal continua con TSOP1738
Publicado por: Nocturno en 06 de Septiembre de 2010, 17:58:21
Pues sí lo hace, te lo aseguro.
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 07 de Septiembre de 2010, 00:27:32
Te creo, no lo dudo. Pero entonces como debería interpretar eso que dice su datasheet? Y, mas importante, por que a mi no me pasa lo mismo que a ti =S

Gracias.
Salu2.
Título: Re: Señal continua con TSOP1738
Publicado por: Nocturno en 07 de Septiembre de 2010, 01:16:31
No sé cómo interpretarlo, parece que el cacharro elimina cualquier ruido que le llegue a 38KHz o cualquier otra frecuencia, es decir, elimina cualquier ruido.
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 07 de Septiembre de 2010, 14:45:19
Bueno, probe con cargando el timer 0 a 224. En proteus sale 38khz y probe en vida real con el analizador del pickit 2, obteniendo estos resultados:
(http://img835.imageshack.us/img835/383/probz.jpg)

Como se ve, la frecuencia es la misma, entonces esta bien en 224. Porqe? Aun no lo entiendo, creo q es un error del compilador ? =/


De todas formas, aun así, al poner frente a frente el led ir con el tsop1738, este ultimo vota un 0 por unos 2 o 3 segundos y despues vota 1, como si lo suprimiera o algo asi... ya nose que hacer ahroa si  :( :( :(


Gracias.
Título: Re: Señal continua con TSOP1738
Publicado por: Nocturno en 07 de Septiembre de 2010, 14:46:30
¿No tienes otro TSOP1738 para probar?
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 07 de Septiembre de 2010, 15:02:43
Tengo uno mas, ambos se comportan igual...


NOO! el otro si funciona! Vaya, que me vino defectuoso o que?!! seguire probando...
Título: Re: Señal continua con TSOP1738
Publicado por: Nocturno en 07 de Septiembre de 2010, 15:14:23
Ánimo, que ya lo tienes
Título: Re: Señal continua con TSOP1738
Publicado por: cerebro en 07 de Septiembre de 2010, 15:37:28

 :mrgreen: lo sospeche desde un principio  :D


Entonces la interrupción se genera cuando el timer pasa de FF a 00 pero la rutina recien se atiende cuando TMR0 tiene un valor de 32  :shock: ahí esta la perdida de tiempo es casi del doble de lo que se necesita, creo que posiblemente sea un retardo de CCS  :x porque lo probe para varios valores de TMR0! y siempre tarda los 32 ticks del TMR0, perooo en donde se pierde o invierte este tiempo?.


Tengo uno mas, ambos se comportan igual...


NOO! el otro si funciona! Vaya, que me vino defectuoso o que?!! seguire probando...

quizás... quien sabe el trato que ha recibido el probre hasta llegar a tus manos  :(...
Título: Re: Señal continua con TSOP1738
Publicado por: Nocturno en 07 de Septiembre de 2010, 15:51:13

quizás... quien sabe el trato que ha recibido el probre hasta llegar a tus manos  :(...


O incluso en tus manos  :D :D :D
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 08 de Septiembre de 2010, 04:03:33
Hola..
 
Alfinal, CREO ya tener solucoinado los delos 38khz y la recepcio del tsop1738 y blabla.. lo que me carcome el cerebro ahora es ese maldito retraso de 32 ticks del timer0... desde cuando pasa eso ? porqe? con todos los pics es asi? nunk m abia pasado esto! ahora se convierte en una jarana trabajar asi! Deberia cambiar de pic? usar timer1 ? pasara lo mismo? WAAAAAAA!!!


Gracias a todos.
Título: Re: Señal continua con TSOP1738
Publicado por: jeremylf en 09 de Septiembre de 2010, 03:59:51
Bueeeeeeeeeeeeeno, dandole y dandole... la mejor forma que pude hacerlo fue a lo malo (metiendome mas a lo assembler y asi). Verá, noc q coños hará el CCS en el timer0 cunado termina porque hay un GOTO hacia otro lado.. asi que (como antes ya lo habia echo) use la interrupcion global del CCS:

Código: [Seleccionar]
#INT_GLOBAL
void IntGlobal(void)
{
   if (T0IF)
   {
      set_timer0(192);
      output_toggle(TX_IR);
   }
   
   clear_interrupt(INT_TIMER0);
}

Así, todo lo que hacia el CCS en #INT_TIMER0 ya no la hará aqui. De esta forma, ya es posible escbriri 192 en la precarga como lo manda las ecuaciones y la teória.

Muy aparte, por mi programa en el while, por alguna razon, no regresaba al while o se trababa en un lugar a causa de esta nueva modificación... aun asi no era motivo para regresar al molesto #INT_TIMER0. Asi que a investigar, entonces intentando entender lo que hacia el CCS en el #INT_TIMER0 para que no pasara esto pero al mismo tiempo para que no demore tanto (sus benditos timer0 = 32...).. me tope con un ejemplo del CCS (concretamente ex_glint.c) que hacen uso de este tipo de interrupcion (global). Ahi, en assembler crean rutinas de salvaguarda o algo asi de registros del CORE delprocesador que hacen que no se malogre la rutina o lo que estaba haacineod el pic antes de la interrupcion y lo siga haciendo despues de esta. De esta forma, mi interrupcion final quedaria asi:

Código: [Seleccionar]
#INT_GLOBAL
void IntGlobal(void)
{
   static int8 cont;

   #asm
   //store current state of processor
   MOVWF save_w
   SWAPF status,W
   BCF   status,5
   BCF   status,6
   MOVWF save_status
   // Save anything else your code may change
   // You need to do something with PCLATH if you have GOTOs

   // remember to check to see what interrupt fired if using more than one!!
   #endasm

   if (T0IF)
   {
      set_timer0(200);
     
      if (++cont < 32)
         output_toggle(TX_IR);
      else if (cont < 64)
         output_low(TX_IR);
      else
         cont = 0;
     
      us++; //1000us / 14us = 71.4285 veces.
   }
   
   clear_interrupt(INT_TIMER0);

   #asm
   // restore processor and return from interrupt
   SWAPF save_status,W
   MOVWF status
   SWAPF save_w,F
   SWAPF save_w,W
   #endasm
}

A causa, de algunas cosa mas que tenia que hace en el timer, tuve que poner la precarga a 200. Pero igual se mantiene y todo corre de las mil maravillas =D!!!


Muchas gracias a todos por su atención y apoyo!
Ya vamos caminando!!


Un gran saludo!
Título: Re: Señal continua con TSOP1738
Publicado por: AKENAFAB en 09 de Septiembre de 2010, 04:03:38
Lo mismo me paso en un pic12F para un control remoto.

Son varias las instrucciones cuando entra a interrupcion y sale de esta.
Y como el CLOCK era de 4MHz(1us por instruccion) me jodia todo! el mentado resguardo status.
Por lo que no podia hacer el cambio de 13us y 13us para los 38KHz

Saludos!
Título: Re: Señal continua con TSOP1738
Publicado por: arcachofo en 24 de Septiembre de 2010, 19:40:55
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):
Código: [Seleccionar]
       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:

Código: [Seleccionar]
   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.
Título: Re: Señal continua con TSOP1738
Publicado por: murdoc25 en 24 de Mayo de 2013, 22:47:19
Hola amigo me gusto mucho tu post puesto que yo quiero hacer algo parecido tengo mi tsop1738 y necesitaba mandar un tren de pulsos 1 y 0 continuos pero ya me va quedando un poco mas claro que no se puede, el proyecto que estoy tratando de realizar es un contador de personas  al interrumpir la seña infrarroja me contara uno 4 de estos con tu experiencia crees que pueda lograrlo o me recomiendas usar otro receptor  que pueda recibir  continuo el tren de pulsos