Autor Tema: Problema interpretando tren de pulsos (16F84A)  (Leído 15230 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado chacruna

  • PIC10
  • *
  • Mensajes: 41
Problema interpretando tren de pulsos (16F84A)
« en: 14 de Febrero de 2009, 21:08:02 »
Hola amigos, aqui estoy de nuevo, cada paso de mi proyecto es un problema.

El tema es asi, tengo dos receptores IR integrados, uno sacado de una TV y el otro es el receptor de una sintonizadora de TV para PC). El resultado con ambos receptores fue el mismo.

Cuando leo con el osciloscopio, al presionar algun boton de emisor puedo leer el tren de pulsos correctamente.
El tema es que cuando pruebo con el PIC, la entrada siempre la tengo en alto. Me fijo el voltimetro y la salida del receptor esta siempre en +4v. (raro). Deberia estar en 0 si no estoy apretando ningun boton. Tambien es raro que con los dos receptores que son muy diferentes pase lo mismo.



« Última modificación: 16 de Febrero de 2009, 22:35:02 por chacruna »

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Problema interpretando tren de pulsos (16F84A)
« Respuesta #1 en: 14 de Febrero de 2009, 21:21:46 »
Si puedes sube el esquemático y el código del pic porque puede ser tanto problema de software como de hardware. De otra manera va a ser difícil ayudarte
« Última modificación: 14 de Febrero de 2009, 23:37:29 por pablomanieri »

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Problema interpretando tren de pulsos (16F84A)
« Respuesta #2 en: 14 de Febrero de 2009, 21:25:01 »
Perdón se me fue un "pon"  de más, esto me pasa por no darle a previsualizar antes de enviar el mensaje :lol:

Desconectado chacruna

  • PIC10
  • *
  • Mensajes: 41
Re: Problema interpretando tren de pulsos (16F84A)
« Respuesta #3 en: 14 de Febrero de 2009, 22:01:03 »
Hola pablo!, siempre presente vos!.

Adjunto el codigo, una foto del circuito montado en el protoboard y una imagen con el esquematico (además hay 2 LEDs en RA2 y RA3 que los uso como control). Nota: en el circuito montado se está usando el puerto B4 como entrada.






El código básicamente lo que hace es leer los primeros dos bits del tren y mostrarlos con los dos LEDs. El sensor está conectado al pin RB4.
Es un código de prueba, luego lo voy a hacer con interrupción externa.

Código: [Seleccionar]
#include <16F84A.h>

#fuses XT,NOWDT,NOPROTECT,PUT
#use delay (clock=4000000)
#use fast_io(a)
#use fast_io(b)

void main() {
      int i=0, bit[2];

      set_tris_a(0);
      set_tris_b(1);

      while(1) {
            if(input(PIN_B4)) {
               delay_us(1000);
               if(input(PIN_B4)) {
                  bit[i]=1;
                  while(input(PIN_B4));
               }else{
                  bit[i]=0;
               }
               i++;
            }
            if(i==2) {
               output_bit(PIN_A2,bit[0]);
               output_bit(PIN_A3,bit[1]);
               delay_ms(2000);
               output_bit(PIN_A2,0);
               output_bit(PIN_A3,0);
               delay_ms(1000);
               i=0;
            }
      }
}

Saludos!
« Última modificación: 15 de Febrero de 2009, 00:42:32 por chacruna »

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Problema interpretando tren de pulsos (16F84A)
« Respuesta #4 en: 14 de Febrero de 2009, 22:50:33 »
Primero que nada, decime que no tenés nada conectado a RB4 o o si está que esté a través de una resistencia porque cuando inicias el programa lo configuras como salida.
La mayoría de las veces cuando conectas algo a un pin del pic configurado como entrada debes tratar de colocarle una resistencia limitadora, porque en caso de que configures por error ese pin como salida se te va a quemar el micro o lo que tengas conectado a ese pin.
No se que función cumple RB4
En tu código la, única forma de que las salidas se pongan en alto es cuando está en alto RB0 y RB4. Pero RB4 lo tienes como salida.
Si querés que RB4 se te configure como entrada debes poner
set_tris_b(0x11);

No te olvides de colocar una resistencia limitadora a la salida del sensor por las dudas.


Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Problema interpretando tren de pulsos (16F84A)
« Respuesta #5 en: 14 de Febrero de 2009, 22:54:11 »
Veo en la foto que agregaste que tenés los leds conectados directamente a la salida de los pines del pin, Si o sí colocale una resistencia a cada led de alrededor de 220 a 1K porque sino lo vas a quemar. Una pregunta, el cable azul del sensor lo tenés conectado a positivo? porque no se ve bien
« Última modificación: 14 de Febrero de 2009, 23:38:55 por pablomanieri »

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Problema interpretando tren de pulsos (16F84A)
« Respuesta #6 en: 14 de Febrero de 2009, 23:02:17 »
Observando la foto nuevamente, Te comento lo que veo. El cable naranja del sensor lo tenés conectado al pin RB4 que como te dije está configurado como salida por un error en el código. por eso siempre te da un voltaje fijo. Espero no hayas quemado nada. Prueba con un solo sensor por vez y acomoda el código para que funcione correctamente con un slo sensor y luego le agregás el otro

Desconectado chacruna

  • PIC10
  • *
  • Mensajes: 41
Re: Problema interpretando tren de pulsos (16F84A)
« Respuesta #7 en: 14 de Febrero de 2009, 23:15:48 »
Hola pablo, al parecer viste una version antigua de mi post, ya que lo habia editado porque noté unos errores.

Fijate que uso el pin B4 como entrada (set_tris_b(1)).

Lo de la resistencia ahora lo voy a probar, de todos modos lo raro es que el tester me tire siempre +4v, quizas no puede resfrecar tan rapido, pero
cuando no apreto ningún botón no debería haber +4v, o si?.

Citar
Una pregunta, el cable azul del sensor lo tenés conectado a positivo? porque no se ve bien
Yo sabía que alguíen lo iba a notar, en la foto parece que estan los dos conectados al mismo polo, debe ser el celular y el ángulo  :z)
Nota: blanco=gnd y azul=+5v.


---


Código: [Seleccionar]
#include <16F84A.h>

#fuses XT,NOWDT,NOPROTECT,PUT
#use delay (clock=4000000)
#use fast_io(a)
#use fast_io(b)

void main() {
      int i=0, bit[2];

      set_tris_a(0);// TODO A COMO SALIDAS
      set_tris_b(1);// TODO B COMO ENTRADAS

      while(1) {
            if(input(PIN_B4)) {// PIN_B4
               delay_us(1000);
               if(input(PIN_B4)) {// PIN_B4
                  bit[i]=1;
                  while(input(PIN_B4));//PIN_B4
               }else{
                  bit[i]=0;
               }
               i++;
            }
            if(i==2) {
               output_bit(PIN_A2,bit[0]);
               output_bit(PIN_A3,bit[1]);
               delay_ms(2000);
               output_bit(PIN_A2,0);
               output_bit(PIN_A3,0);
               delay_ms(1000);
               i=0;
            }
      }
}
« Última modificación: 14 de Febrero de 2009, 23:19:10 por chacruna »

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Problema interpretando tren de pulsos (16F84A)
« Respuesta #8 en: 14 de Febrero de 2009, 23:27:57 »
Si, vi que cambiaste el código, pero para configurar el RB4 como entrada y los demás como salida debes poner
set_tris_b(16)
que en binario sería 000010000
el bit 4 debe estar en uno para ser entrada

y no set_tris_b(1)
que en binario es 000000001
que corresponde a RB0 como entrada

Por eso es que te sigue dando un voltaje fijo.


Desconectado chacruna

  • PIC10
  • *
  • Mensajes: 41
Re: Problema interpretando tren de pulsos (16F84A)
« Respuesta #9 en: 15 de Febrero de 2009, 00:38:44 »
Hola pablo, mirá volvi a usar el pin B0 como entrada (esquema original). Estube probando que funcionara con un pulsador y todo bien.
El tema es que el sensor me está dando ~+4V TODO EL TIEMPO, deberia fluctuar entre 0V y ~+4V.

El código funciona, debe ser un problema de hard.

Código: [Seleccionar]
#include <16F84A.h>

#fuses XT,NOWDT,NOPROTECT,PUT
#use delay (clock=4000000)
#use fast_io(a)
#use fast_io(b)

void main() {
      int i=0, bit[2];

      set_tris_a(0);
      set_tris_b(1);


      while(1) {
            if(input(PIN_B0)) {
               delay_us(1000);
               if(input(PIN_B0)) {
                  bit[i]=1;
                  while(input(PIN_B0));
               }else{
                  bit[i]=0;
               }
               i++;
            }
            if(i==2) {
               output_bit(PIN_A2,bit[0]);
               output_bit(PIN_A3,bit[1]);
               delay_ms(1500);
               output_bit(PIN_A2,0);
               output_bit(PIN_A3,0);
               delay_ms(500);
               i=0;
            }
      }
}




----

set_tris_b(16)
que en binario sería 000010000
el bit 4 debe estar en uno para ser entrada

Imagino que quisiste decir: "el bit 5 debe estar en uno para ser entrada"


Y ya que estamos esto tambien :P.

Si querés que RB4 se te configure como entrada debes poner
set_tris_b(0x11);

Imagino que quisiste decir: set_tris_b(0x10);



Saludos!!!
« Última modificación: 15 de Febrero de 2009, 01:05:13 por chacruna »

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Problema interpretando tren de pulsos (16F84A)
« Respuesta #10 en: 15 de Febrero de 2009, 01:02:44 »
Ahora si estamos en problemas, parece que el programa y las conexiones están bien. Probaste el sensor con el osciloscopio sin conectar el pic como lo hiciste antes para ver si ahora la falla no es de éste?. Se me hace que no está funcionando el sensor.
No me hiciste caso de colocar resistencias a los leds, hacelo porque estás consumiendo toda la corriente que puede entregar el puerto del pic y no se que le puede pasar al pic en estos casos.
Una vez que te asegures que el sensor funciona deberías intercalar entre el sensor y el pic alguna compuerta Schmitt trigger para adaptar bien los niveles de entrada al pic (ALto 5V bajo 0V), porque el sensor puede que no te de bien los valores de umbral de disparo de la entrada del pic. O sino conectarlo a pin RA4 que si es Schmitt trigger (configurándolo como entrada por supuesto)


Desconectado chacruna

  • PIC10
  • *
  • Mensajes: 41
Re: Problema interpretando tren de pulsos (16F84A)
« Respuesta #11 en: 15 de Febrero de 2009, 01:06:46 »
jajaja tenés razón no te hice caso, ahora les agrego unas resistencias de 220Ohm a los LEDs.

Probe con mi tester pedorro el receptor de la TV y cuando no envio ningun comando con el control me tira +3.80V y cuando apreto algun boton oscila entre +3.82V y +3.83V. Esto no deberia ser asi SEGUN tengo entendido. Con el otro receptor sucede lo mismo.

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Problema interpretando tren de pulsos (16F84A)
« Respuesta #12 en: 15 de Febrero de 2009, 01:12:29 »
El tema de los valores extraños se debe a que el tester mide voltaje eficaz, y no tiene la velocidad de respuesta para tomar la lectura a la frecuencia que la entrega el control remoto. Prueba de apagar las luces  y con una linterna o algo ilumina el sensor y fijate si tenés cambio o no en lo que indica el tester con luz y sin luz. No se como vas a mirar el tester con la luz apagada pero bueno es problema tuyo :D

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Problema interpretando tren de pulsos (16F84A)
« Respuesta #13 en: 15 de Febrero de 2009, 01:17:02 »
Con respecto a lo que sigue:

Cita de: pablomanieri en 14 de Febrero de 2009, 10:27:57 pm
set_tris_b(16)
que en binario sería 000010000
el bit 4 debe estar en uno para ser entrada

Imagino que quisiste decir: "el bit 5 debe estar en uno para ser entrada"

Los bits de los puertos y registros se comienzan a contar desde cero por eso bit 4


Y ya que estamos esto tambien .

Cita de: pablomanieri en 14 de Febrero de 2009, 09:50:33 pm
Si querés que RB4 se te configure como entrada debes poner
set_tris_b(0x11);

Imagino que quisiste decir: set_tris_b(0x10);

Di por sentado que RB0 también era entada


Desconectado chacruna

  • PIC10
  • *
  • Mensajes: 41
Re: Problema interpretando tren de pulsos (16F84A)
« Respuesta #14 en: 15 de Febrero de 2009, 01:23:11 »
Perfecto, ahora si todo tiene sentido :D.

----

Hice la prueba de la "linterna" y nada, no cambiaban nada los valores.

De todos modos es un circuito integrado que deberia filtrarme solo la frecuencia del control remoto.