elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


  Mostrar Temas
Páginas: [1]
1  Informática / Electrónica / ayuda para medir ancho de pulso con ccp en: 3 Noviembre 2009, 02:13 am


Hola a todos:

Miren tengo un problema para medir el ancho del pulso mediante el modulo ccp. Les envio 2 programa q tengo(en teoria hacen lo mismo), lo compilo y cero problemas, pero en el proteus no me muestra el valor del ancho del pulso.



#include <16f876.h>
#fuses XT,NOWDT
#use delay(clock=4000000)
#include <lcd.c>
#byte pir1=0x0c
#include <math.h>

int1 nuevopulso=0;    //Entra otro pulso
int16 TFB=0;         //Tiempo flancos
int16 TFS=0;
int16 TF=0;
float AP;         //Valor final del ancho de pulso
int1 cambio=0;        //Cambio de flanco de disparo

#int_ccp1
void ccp1_int(){      //Función interrupción
  if(cambio==0){      //Flanco de subida
    TFS=CCP_1;      //Carga del valor del registro CCPR1 en flanco subida
    setup_ccp1(CCP_CAPTURE_FE); //Configuración modo Captura en flanco de bajada
    cambio=1;                   //Control de cambio de flanco
  } else {                      //Flanco de Bajada
  TFB=CCP_1;      //Carga del valor del registro CCPR1 en flanco bajada
    setup_ccp1(CCP_CAPTURE_RE); //Configuración modo Captura en flanco de subida
    cambio=0;                   //Control de cambio de flanco

  if(nuevopulso==0){            //Fin de pulso...
   nuevopulso=1;           //pulso a medir
  }
  }
}

void main() {

lcd_init();
disable_interrupts(global);
setup_timer_1(T1_INTERNAL);   //Configuración TMR1
setup_ccp1(CCP_CAPTURE_RE);  //Configuración modo Captura en flanco de subida
cambio = 0;                  //Control de cambio a 0

enable_interrupts(int_ccp1);   //Habilitación interrupción modulo CCP
enable_interrupts(global);     //Habilitación interrupción global
 
  do {
    if(nuevopulso==1){     //¿Pulso nuevo?
       TF=(TFB-TFS);   //Ancho de pulso.
       AP = TF*1.0;      //Ancho de pulso en microsegundos (a 4MHz:1us)
      printf(lcd_putc,"\nPulso = %6.1fuS ", AP);
     nuevopulso=0;             //Pulso ya medido, espera nuevo
   }
  } while (TRUE);
}


--------------------------------------------------------------------------------------------------------------------

Este es el otro programa:


#include <16f876.h>
#fuses XT,NOWDT
#use delay(clock=4000000)
#include <lcd.c>
#byte PIR1=0x0C


float AP=0.0;         //Valor final del ancho de pulso
int1 nuevopulso=0;

long rise,fall;
int16 TF=0;
#int_ccp2
void isr()
{
   rise = CCP_1;
   fall = CCP_2;
   nuevopulso=1;
        // CCP_1 is the time the pulse went high
}                                 // CCP_2 is the time the pulse went low
                                  // pulse_width/(clock/4) is the time

                                  // In order for this to work the ISR
                                  // overhead must be less than the
                                  // low time.  For this program the
                                  // overhead is 45 instructions.  The
                                  // low time must then be at least
                                  // 9 us.

void main()
{
 
   setup_ccp1(CCP_CAPTURE_RE);    // Configure CCP1 to capture rise
   setup_ccp2(CCP_CAPTURE_FE);    // Configure CCP2 to capture fall
   setup_timer_1(T1_INTERNAL);    // Start timer 1

   enable_interrupts(INT_CCP2);   // Setup interrupt on falling edge
   enable_interrupts(GLOBAL);

    do {
    if(nuevopulso==1){     //¿Pulso nuevo?
       TF=(rise-fall);   //Ancho de pulso.
       AP = TF*1.0;      //Ancho de pulso en microsegundos (a 4MHz:1us)
      printf(lcd_putc,"\nPulso = %6.1fuS ", AP);
     nuevopulso=0;             //Pulso ya medido, espera nuevo
   }
  } while (TRUE);
}

Les adjunto tambien el archivo de proteus para q lo puedan simular.
Ojala me puedan ayudar. Y decirme cual es mi error.
lo raro es q al cambiar el #include<16f876> por #include <18f452> (hago el cambio del cto. en el proteus obvio) me muestra por pantalla.
Porque sera????
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines