Autor Tema: Problema con timer y CCP en C18  (Leído 2303 veces)

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

Desconectado andreaymaria

  • PIC10
  • *
  • Mensajes: 45
Problema con timer y CCP en C18
« en: 21 de Junio de 2010, 05:19:50 »
Hola a todos!!Tengo que medir la frecuencia de una señal...y voy a intentarlo hacer con el módulo CCP en modo captura.
Hasta aquí me funciona bien...el problema viene con el timer..que cada vez me devuelve un tiempo distinto aunq tenga la misma señal con la misma frecuencia.No entiendo qué puede estar mal..ya que cuando el PIC me captura el primer flanco de subida pongo el timer a 0 y cuando caotura el siguiente flanco..ahí es cuando leo el valor del temporizador..y es éste el que cada vez tiene un valor diferente.

Si alguien supiera el porqué me ayudaría bastante...

Muchas gracias!!Un saludo!

Aquí os dejo el código:

#include <p18f4620.h>
#include <delays.h>
#include <capture.h>
#include <stdio.h>
#include <timers.h>
#include <stdlib.h>

#pragma config DEBUG=OFF
#pragma config OSC=XT
#pragma config WDT=OFF
#pragma config LVP=OFF
#pragma config PWRT=OFF
#pragma config MCLRE=OFF
#pragma config CCP2MX = PORTBE

#define LED LATEbits.LATE0

void main(){

unsigned int cambio;
unsigned int tiempo;
float uSxTick = 1.0;
float f=0.00;  //frecuencia
float st=0.0;  //tiempo en us


ADCON1=0XFF;
TRISBbits.TRISB3=1;
TRISEbits.TRISE0=0;



// Configure Timer1
OpenTimer3( TIMER_INT_OFF &
T3_SOURCE_INT);

// Configure Capture2
OpenCapture2( C2_EVERY_RISE_EDGE &
CAPTURE_INT_OFF );

while(PIR2bits.CCP2IF==1){
WriteTimer3(0);
//LED=1;
PIR2bits.CCP2IF=0;
cambio=1;
}
while(cambio==1){
while(PIR2bits.CCP2IF==1){
tiempo=ReadTimer3();
st = uSxTick * tiempo;
f = 1 / (st/1000000);
//LED=0;
PIR2bits.CCP2IF=0;
cambio=0;
}

}

}

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re: Problema con timer y CCP en C18
« Respuesta #1 en: 22 de Diciembre de 2011, 11:28:28 »
Tengo entendido que el CCP en modo captura solo captura el ancho del pulso y no actua como contador de pulsos en si.

 Deberias usar un timer, bien sea el 1 o el cero configurado con el clock externo y aplicar la señal externa que quieres medir al puerto específico para ese timer en el pic. Pones el timer a cero, esperas el tiempo que quieras y ahora lo lees y ya tienes el numero de pulsos registrados en ese tiempo.

saludos

 

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema con timer y CCP en C18
« Respuesta #2 en: 22 de Diciembre de 2011, 11:48:46 »
  No utilizo C18 pero me parece que el error podría venir porque estás leyendo el Timer3 (eso creo entender porque veo la función ReadTimer3), para leer lo capturado hay que leer los registros del CCP -al menos con la familia 16F, que es en la que usé dicho módulo-
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas