Autor Tema: Dudas con Timer0 y Ticks en IR  (Leído 1966 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado iNoXSteeL

  • PIC12
  • **
  • Mensajes: 75
    • La web de InoX
Dudas con Timer0 y Ticks en IR
« en: 27 de Diciembre de 2009, 09:49:33 »
Hola a todos,

Tengo ciertas dudas con el timer0 y sus ticks, veréis, trato de recibir pulsos con IR y un TSOP1738 de un pic a otro pic en una trama de 8 bits + pulso start .

El pulso start tiene una duración de 2 mS, el resto de bits 500uS si es 0 y 1000uS si es 1.

El codigo va bien, con la excepción del pulso de inicio, que simulando y avanzando paso a paso, si lo hago así continuamente tengo unos 4005 ticks, por aquí la primera duda, no es de 8 bits?

Si la simulación es en tiempo real, cuando recibo el pulso start, tengo en esa variable 40330 ticks, otras veces 15780....

Llegando a 65000 y pico vuelve a 0, entonces según el código, si recojo el estado anterior y a la hora de recibir el pulso start se lo resto, si coincide que entre los 2 estados pasa por 0 me devuelve esos valores tan grandes, en cambio, si el pulso start conicide entre 0 y 65000 ticks, lo recibo bien con esos 4005 ticks.

No entiendo esos valores, no debería ser como mucho 255?

Por otro lado, según la fórmula del timer0, 39 Ticks con un preescaler de 128 y un cristal de 20MHz serían unos 5 mS, sin embargo ese es el valor que tengo para recojer el pulso de 500uS... sigo sin entender porqué 39 ticks reciben pulso de 500us....

El código está basado en un ejemplo que tiene RedPic en su web.

Un saludo.

Código: C
  1. TT0 = get_timer0();
  2.   DT = TT0 - TT0D;
  3.   TT0D = TT0;
  4.  
  5.  
  6. //RECIBO BIT START
  7.  
  8.      if (DT>4000 && 4010>DT )
  9.          {
  10.             oNbit=1;
  11.            
  12.             for (a=0;a<8;a++)
  13.                {
  14.                  bitCODE[a]=0;
  15.                }
  16.                  
  17.                     BITS   = 0;
  18.                     irDIR  = 0;
  19.                  irCOMMAND = 0;    
  20.          }
  21.  
  22. //SI HAY BIT START, PROCESA PULSOS
  23.      if (oNbit==1)
  24.          {
  25.            
  26.             if (DT>38 && DT<41) { bitCODE[BITS]= 0; BITS+=1; }
  27.        else if (DT>58 && DT<62) { bitCODE[BITS]= 1; BITS+=1; }
  28.            
  29.             if (BITS==8) {codeOK=1; onbit=0;}
  30.          }
  31.  
  32. //SI EL COMANDO ES RECIBIDO, PROCESA Y PASA A DECIMAL
  33.  
  34.      if (codeOK == 1)
  35.       {
  36.        for (a=0;a<8;a++)
  37.           {
  38.           irDIR += (bitCODE[a] * (b));
  39.           b /= 2;
  40.           }
  41.           b=8;
  42.    
  43.        for (a=4;a<8;a++)
  44.           {
  45.           irCOMMAND += (bitCODE[a] * (b));
  46.           b /= 2;
  47.           }
  48.          
  49.          codeOK=0;
  50.          b=8;
  51.      
  52.      }
  53.  
  54.   }

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Dudas con Timer0 y Ticks en IR
« Respuesta #1 en: 27 de Diciembre de 2009, 15:36:29 »
con q pic estas trabajando? Si es un pic18 el timer puede configurarse a 8 o 16, sino estoy mal por defecto viene a 16.
Saludos
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado iNoXSteeL

  • PIC12
  • **
  • Mensajes: 75
    • La web de InoX
Re: Dudas con Timer0 y Ticks en IR
« Respuesta #2 en: 27 de Diciembre de 2009, 19:11:41 »
Gracias por la aclaración jhozate, no sabía que el timer0 en los pic18 fuera de 8 o 16 bits.

Cambié a 1 el bit 6 en el registro T0CON y ahora si sale bien.

Un saludo.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Dudas con Timer0 y Ticks en IR
« Respuesta #3 en: 27 de Diciembre de 2009, 19:55:09 »
Hay que leer los datasheets, para eso están!  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro


 

anything