Autor Tema: Receptor de IR, funciona raro  (Leído 1453 veces)

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

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Receptor de IR, funciona raro
« en: 06 de Julio de 2005, 14:08:00 »
El problema es que con un 16f84 leo un receptor de IR, en comunicacion serie. El sistema funciona bien en Proteus y fisicamente, y de hecho trabaja bien hasta que se genera una interrupcion en el pic.
Parece mentira pero si esta a corta distancia del emisor funciona siempre con o sin interrupcion, pero a mucha distancia funciona siempre que no se genere la interrupcion.
No logro entenderlo, se que es un problema extraño pero pienso que es de hard y no de soft, de todas formas pego el codigo a ver si alguien logra acalararme que tiene que ver la distancia con la interrupcion,
//***************************************************************************
//******
//******
//****** NOTA: usa compilador: PCW v2.619 o posterior
//******
//******
//******
//****************************************************************************

#include <16F84A.H>
#use delay(clock=1000000)
#fuses XT,NOWDT,PUT

// define el puerto serie como 300 Baudios 8 bits sin paridad y
// salida por pin RB0 y entrada de datos por pin RB6

#use RS232(BAUD=300, BITS=8, PARITY=N, XMIT=PIN_B1, RCV=PIN_B6)

// la entrada RB6 como entrada de datos del receptor
// la salida  RA1 sera la que active el rele

#use fast_io(B)





byte int_count1;         // Numero de interrupciones antes de que el contador este a cero
int tiempo_seguridad;

// Rutina que se activa por la interrupcion
// esta funcion se llama cada vez que el timer rebosa
// se decrementa en 1 int_cont1 y si llega a cero
// se pone a cero la salida del rele
// Se usa para que no se quede activado
// si al cabo del tiempo no le han llegado datos
// automaticamente se apaga y espera
// una nueva orden de encendido



#int_rtcc
   clock_isr()
      {
      if(--int_count1==0)
         {
          int_count1 = tiempo_seguridad;
          output_low(PIN_A1);   // si pasado el tiempo no le han llegado datos desconecta la salida y
          output_low(PIN_B0);   // apaga el led de encendido hasta que le vuelven a llegar datos
          }
      }

// ***************************
//    Programa principal
//****************************

void main(){
   set_rtcc(0);
   setup_counters(RTCC_INTERNAL, RTCC_DIV_256);
   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);

   set_tris_b(0x10);         // PIN_B = Entradas
   set_tris_a(0xff);         // PIN_A = Salidas
   tiempo_seguridad=2000;    // aproximadamente un minuto sin recibir dato y apaga el sistema
   output_high(PIN_B0);      // enciende el led de encendido

   While(1)
        {
        while(!kbhit())
            {
           switch(getch())
            {
            case "E":
            output_high(PIN_A1);
            int_count1=tiempo_seguridad;
            output_low(PIN_B0);           // si le llegan datos parpadea el led de encendido durante 1/2 seg
            delay_ms(500);
            output_high(PIN_B0);
            break;
            case "A":
            output_low(PIN_A1);
            int_count1=tiempo_seguridad;
            output_low(PIN_B0);
            delay_ms(500);
            output_high(PIN_B0);      // si le llegan datos parpadea el led de encendido
            break;
            }
            }
          }
      }

Si necesitan mas datos pidanlos
Gracias




Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: Receptor de IR, funciona raro
« Respuesta #1 en: 11 de Julio de 2005, 02:53:00 »
Solucionado, el problema era el emisor, necesitaba mas corriente el diodo IR.
Gracias de todas formas


 

anything