Autor Tema: Medir tiempo entre dos pulsos CCS  (Leído 3063 veces)

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

Desconectado Simon21

  • PIC18
  • ****
  • Mensajes: 302
Medir tiempo entre dos pulsos CCS
« en: 16 de Septiembre de 2009, 19:35:20 »
Hola a todos, tengo un problema ya que no me doy cuenta como medir el tiempo entre
dos flancos descendentes, cabe destacar que una señal ingresa a RC2/CCP1 y la otra por RC1/CCP2.
La idea es medir el tiempo que transcurre entre el flanco descendente de una hasta el flanco descendente de
la otra señal (ya que ambas estan desfasadas).
Lo que si pude hacer es mediante las siguientes lineas de codigo, medir el tiempo entre ambos flancos descendentes
de una misma señal. Pero mi problema es como hacer para que esa medida sea entre el flanco descendente de la señal que
ingresa por RC2 y el flanco descendente que ingresa por RCI.
Ojala alguien pueda ayudarme.. :shock:
Saludos...
----------------------------------------------------------------------------------------------------------
#include <16f877A.h>
#fuses NOPROTECT,NOCPD,NOLVP,NOWDT,XT

// Con estas directivas las funciones "input" y "output_bit" no reprograman
// el pin de la puerta cada vez que son utilizadas. Si no se indica el
// modo fast_io se asume por defecto standard_io el cual reprograma el pin
// siempre antes de ser utilizadas estas funciones.

#use fast_io (A)
#use fast_io (B)
#use fast_io (C)
#use delay(clock=4000000)

#include <lcd2.c>      //Incluir funciones de manejo del LCD

int captura=1;         //Contiene nº de captura realizada
int32 v_captura;      //Contiene valor capturado

#int_ccp1      //Vector de interrupción del CCP1
tratamiento()   //Función de tratamiento del CCP1
{
   if (captura < 2)   //Se han producido 2 capturas ??
    {                       //No, se ha detectado el flanco descendente   
      captura ++;      //Siguiente captura
      CCP_1=0;   
      setup_ccp1(ccp_capture_fe);   //siguiente captura en el flanco descendente
      set_timer1(0);   //Repone el TMR1 con 0
   }
   else
   {
      captura = 1;         //Restablecer 1ª captura
      lcd_enviar(LCD_COMANDO,LCD_HOME);   //Coloca el cursor
      v_captura=CCP_1;      //Lee valor capturado
      v_captura=v_captura*8;   //Ajusta *8 según valor del preescaler
      printf(lcd_putc,"%06lu",v_captura);   //Visualiza resultado
      setup_ccp1(ccp_capture_fe);   //Siguiente captura en el flanco descendente
   }
}
   
main()

   SETUP_ADC_PORTS(NO_ANALOGS);//Puerta A Digital
   set_tris_c(0xff);         //Puerta C entrada
   enable_interrupts(int_ccp1); //Activa interrupción del CCP1
   lcd_init();               //Inicia el módulo LCD

//El TMR1 actúa en el modo temporizador con reloj interno y un preescaler 1:8 evoluciona cada 8uS a 4MHz.
//Según esto, el periodo máximo que se puede medir estará comprendido entre 0,5s (2Hz) y 8 uS (125 KHz) aproximadamente.
//Para otros rangos se debe seleccionar un preescaler diferente.

   setup_timer_1(T1_INTERNAL | T1_DIV_BY_8);   //TMR1 Interno y preescaler de 1:8
   
//El módulo CCP1 actúa en modo de captura cada flanco ascendente

   setup_ccp1(ccp_capture_fe);   //1ª Captura en el flanco descendente
   enable_interrupts(global);   //Habilita interrupciones

   while(1)
   {   
   }
}   
INGENIERIA ELECTRONICA
UNIVERSIDAD TECNOLOGICA NACIONAL

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Medir tiempo entre dos pulsos CCS
« Respuesta #1 en: 16 de Septiembre de 2009, 20:14:44 »
Aquí hay algo que puede ayudarte, también usa el buscador hay varios ejemplitos por ahí  :mrgreen:


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

Desconectado Simon21

  • PIC18
  • ****
  • Mensajes: 302
Re: Medir tiempo entre dos pulsos CCS
« Respuesta #2 en: 16 de Septiembre de 2009, 20:19:56 »
gracias suky no habia visto ese tema, voy a leer y despues te cuento...
Saludos
INGENIERIA ELECTRONICA
UNIVERSIDAD TECNOLOGICA NACIONAL