Duda con sensor optico TCST1103

¿Puede ser que el sensor óptico TCST1103 haga un efecto "rebote" cada vez que se activa o desactiva?

Porque lo estoy utilizando para activar interrupciones por cambio de estado en un pic, y cada vez que lo activo o desactivo una vez me entra a la interrupción varias veces consecutivas. Ya revise el código varias veces y no encuentro error en el mismo, no me queda otra que comenzar a considerar que el problema este en el hardware, en este caso, en el sensor TCST1103.

Aqui la publicación que hice donde planteo las dudas sobre el código https://www.forosdeelectronica.com/showthread.php?p=1157761#post1157761

Adjunto el datasheet del sensor. Gracias!
 

Adjuntos

  • TCST 1103 Transmissive Optical Sensor with Phototransistor Output.pdf
    243.4 KB · Visitas: 5
Última edición:
¿Como lo has conectado?
Es probable que al poner el objeto este "vibre" dando varios pulsos.
Puedes filtrarlo por software inhabilitando la interrupción hasta que pase un pequeño tiempo.
 
¿Como lo has conectado?
Es probable que al poner el objeto este "vibre" dando varios pulsos.
Puedes filtrarlo por software inhabilitando la interrupción hasta que pase un pequeño tiempo.

Lo conecte casi igual a como sugieren en el datasheet, solo que el lugar de poner una resistencia de 100ohm en el receptor puse una de 2k2, y en lugar de la de 50ohm en el emisor puse una de 180hom. El "channel I" no lo conecte a nada porque el emisor esta continuamente encendido, y el "channel II" lo mande directamente a la entrada de RB7. Adjunto imagen.

Para probarlo interrumpo el sensor con un palito de madera de helado ^^.

Fijate si tienes ganas en la otra publicación que hice sobre el código... tal vez este ahí el problema entonces... :S.
 

Adjuntos

  • conexion sensor.jpg
    conexion sensor.jpg
    42.2 KB · Visitas: 10
Baja el valor de las resistencias. Eso "ensorda" el circuito y tendrás menos pulsos no deseados que es lo que te pasa ahora

 
Te cerraron el otro tema, mira, propuse "Debes meter tu código en un if y verificar el estado del puerto." y lo que hacías es polling en el pin dentro de un while, la datasheet claramente dice que no se recomienda hacer polling, el problema es que cuando tu lees el pin se rompe el mismatch y reinicia la condición.

Prueba cambiar tu rutina a:

Código:
void interrupt() { // rutina de interrupcion

   if (INTCON.RBIF == 1) { // si la interrupcion fue por cambio de estado del PortB
      if(PORTB.RB7) Luz2 = ~Luz2; // invierto la salida en RA1
   }
}

En teoría el simple hecho de leer el puerto borra la bandera.
 
Atrás
Arriba