Autor Tema: como medir el periodo de una señal cuadrada con el modo captura jm60???  (Leído 6086 veces)

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

Desconectado scart07

  • PIC10
  • *
  • Mensajes: 10
hola !!!
he estado trabajando en el modo captura con tpm2 del jm60. ya logre q realizara la interrupción por flanco tanto de subida como de bajada pero no logro obtener el tiempo entre los dos flancos.

esta es la configuración para el modo captura.

//CONFIGURACION TPM2 MODO CAPTURA
///DETENER EL FUNCIONAMIENTO TEMPORIZADOR
TPM2SC_CLKSB=0;
TPM2SC_CLKSA=0;
///PREESCALAMIENTO 2^2=4
TPM2SC_PS2=1;
TPM2SC_PS1=1;
TPM2SC_PS0=1;
//DESHABILITAR INTERRUPCION TEMPORIZADOR
TPM2SC_TOIE=0;//0 desabilita la int de tiempo
TPM2SC_CPWMS=0;


///VECTOR DE CONFIG PWM CH 1 PIN F5
//activacion interrupcion req
TPM2C1SC_CH1IE=1;
///MODO CAPTURA
TPM2C1SC_MS1B=0;
TPM2C1SC_MS1A=0;
//DECTECTA EN FLANCO DE SUBIDA Y BAJADA
TPM2C1SC_ELS1B=1;
TPM2C1SC_ELS1A=1;

///HABILITA EL FUNCIONAMIENTO TEMPORIZADOR POR fixed CLK(B=1 Y A=0) BUS RATE(B=0 Y A=1)
TPM2SC_CLKSB=0;
TPM2SC_CLKSA=1;


el void de la interrupcion es el sig

interrupt void TPM2CH1INT(void){
   
   t=TPM2C1V;
    TPM2C1SC_CH1F=0;
   
    }

ya también registre el nombre de la int en las las listas de vectores.

supuestamente el valor de tiempo se guarda en el registro TPM2C1V pero cuando lo voy a revisar no da un valor fijo sino mas bien aleatorio.

por favor ayúdenme a encontrar lo q me falta o si lo q estoy haciendo es correcto

gracias!!

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: como medir el periodo de una señal cuadrada con el modo captura jm60???
« Respuesta #1 en: 05 de Mayo de 2011, 00:32:09 »
Cuando ocurra el flanco de subida, captura e valor del TPM, luego cuando de flanco de bajada, capturas un vez mas, cuentas cuantos ciclos de TPM existieron entre un cambio y otro y con ello el ancho de pulso de esa señal.


Desconectado scart07

  • PIC10
  • *
  • Mensajes: 10
Re: como medir el periodo de una señal cuadrada con el modo captura jm60???
« Respuesta #2 en: 05 de Mayo de 2011, 10:35:43 »
mmm ya veo entonces no necesito clarear la bandera TPM2SC_TOF=0  ??? en el void de la interrupcion del canal???

gracias!!

Desconectado scart07

  • PIC10
  • *
  • Mensajes: 10
Re: como medir el periodo de una señal cuadrada con el modo captura jm60???
« Respuesta #3 en: 06 de Mayo de 2011, 17:26:27 »
listo!!!! ya lo corrobore con un tacometro y si funciona, eso era lo q tenia q hacer una resta y valor absoluto al resultado!!!!!! muchas gracias LABmouse!!!

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: como medir el periodo de una señal cuadrada con el modo captura jm60???
« Respuesta #4 en: 06 de Mayo de 2011, 18:07:37 »
Listo, que bien que te funciono.

SALUDOS!

Desconectado scart07

  • PIC10
  • *
  • Mensajes: 10
Re: como medir el periodo de una señal cuadrada con el modo captura jm60???
« Respuesta #5 en: 13 de Agosto de 2011, 12:16:44 »
hola labmouse!!! perdona por preguntarte otra ves sobre lo mismo pero me pasa q al parecer tengo un par de problemas para medir el tiempo. hay alguna forma de reiniciar el registro de TPM2C1V despues de realizar la medida del segundo flanco???

de antemano muchas gracias!!
« Última modificación: 13 de Agosto de 2011, 12:22:19 por scart07 »

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: como medir el periodo de una señal cuadrada con el modo captura jm60???
« Respuesta #6 en: 22 de Noviembre de 2011, 21:50:19 »
LABMAUSE
estoy analizando las señales de un control tremoto el cual me arroja un tren de pulsos con diferente tiempo para diferenciar los unos y los ceros
tengo ente momento la captura de las imagenes de los ancho de pulso de una tecla especifica.

para ver si me puedes dar sugerencias de como abordar este analisis.

lo que hay que medir es el tiempo que se demora un 1 y el tiempo que se demora un 0 para ir especificando el numero binario de la tecla.

como puedo empezar.....
resulta que hay que detectar los flancos de subida y de bajada del tren de pulsos.. y medir el tiempo entre los flancos.
MC9S08E

saludos y gracias

la imagen es de un tren de pulsos de la tecla

« Última modificación: 22 de Noviembre de 2011, 21:53:08 por microcom »

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: como medir el periodo de una señal cuadrada con el modo captura jm60???
« Respuesta #7 en: 24 de Noviembre de 2011, 13:07:45 »
HOla microcom,


Yo logre hacerlo hace un tiempo atrás de la siguiente manera:

Detección de flanco de subida para así conocer cuando inicia la trama de datos. Es ese instante daba RESET a un TPM. Luego el microcontrolador quedaba esperando cambio de estado y al detectar el cambio de la señal, capturaba el valor de TPM, con ello calculaba el tiempo que tenia de ancho cada pulso. Al finalizar, funciono bien con Controles Sony.

No te recomendaría un osciloscopio, si puedes hacerte a un analizador lógico, es mucho mas fácil y la ayuda es grande. Buscare el proyecto y te lo hago llegar por acá.

Saludos!

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: como medir el periodo de una señal cuadrada con el modo captura jm60???
« Respuesta #8 en: 26 de Noviembre de 2011, 01:22:44 »
Código: [Seleccionar]
[code]IDEAS PARA RESOLVER EL PROBLEMA




mas o menos esto se esta haciendo

en 65535=8388.6ms  para 2.4ms se debe mas o menos tener en la captura= 15 que seria el start

el programa  esta cogiendo todo los tiempos y no diferecia el rango del start...


saludos y gracias

primero tomo un flanco de bajada y despues tomo un flanco de subida

process expert

maximiun time de event=8000ms
 high=8388,6ms
cap1 capture



event
/** ###################################################################
**     Filename  : Events.C
**     Project   : poneshot
**     Processor : MC9S08SE8CRL
**     Component : Events
**     Version   : Driver 01.02
**     Compiler  : CodeWarrior HCS08 C Compiler
**     Date/Time : 01/10/2011, 20:17
**     Abstract  :
**         This is user's event module.
**         Put your event handler code here.
**     Settings  :
**     Contents  :
**         Cap1_OnCapture - void Cap1_OnCapture(void);
**
** ###################################################################*/
/* MODULE Events */


#include "Cpu.h"
#include "Events.h"

/* User includes (#include below this line is not maintained by Processor Expert) */

/*
** ===================================================================
**     Event       :  Cap1_OnCapture (module Events)
**
**     Component   :  Cap1 [Capture]
**     Description :
**         This event is called on capturing of Timer/Counter actual
**         value (only when the bean is enabled - <Enable> and the
**         events are enabled - <EnableEvent>.This event is available
**         only if a <interrupt service/event> is enabled.
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
extern bool TPM1_flag;

void Cap1_OnCapture(void)
{
  /* Write your code here ... */
  TPM1_flag=FALSE;
}

/* END Events */

/*
** ###################################################################
**
**     This file was created by Processor Expert 3.07 [04.34]
**     for the Freescale HCS08 series of microcontrollers.
**
** ###################################################################
*/











/* Including needed modules to compile this module/procedure */
#include "Cpu.h"
#include "Events.h"
#include "Cap1.h"
/* Include shared modules, which are used for whole project */
#include "PE_Types.h"
#include "PE_Error.h"
#include "PE_Const.h"
#include "IO_Map.h"

/* User includes (#include below this line is not maintained by Processor Expert) */
unsigned int T1,T2,T3;
 bool TPM1_flag;
int START ;
unsigned int dato;//12 BITS
 int CAPTURA ;
 

void main(void)
{
  /* Write your local variable definition here */

PTBDD_PTBDD5=1;
PTBDD_PTBDD4=1;
  /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
  PE_low_level_init();
  /*** End of Processor Expert internal initialization.                    ***/

  /* Write your code here */
  /* For example: for(;;) { } */
  TPM1_flag=TRUE;
   CAPTURA=0;
  
  for(;;){
  
  
  asm wait;//modo de bajo consumo
  if(TPM1_flag==FALSE){
    TPM1_flag=TRUE;
    if(Cap1_GetPinValue()==FALSE)//flanco de subida
       T1=TPM1C0V;
    else //flanco de bajada
       T2=TPM1C0V;
   }
  
  
   T3=T2-T1;
  
    if(T3>15){ // Comprobamos START
START=1;

PTBD_PTBD5=1;

 // flag start a 1
// Reseteamos el contador de bits


}
if(START==1){ // Si hemos detectado start.

 {
  if(T3<8 ){ // es un 0 ?
  dato=dato>>1;//bit a la palabra
  CAPTURA++; // incrementa contador bits
  
  PTBD_PTBD4=1;
  
   }
  
   if(11<=T3<=15) //    es 1
 {
   dato=dato&0x80;
   dato=dato>>1;
    CAPTURA++ ;
   }
  
 
 }
  
  
  
  if(START==1 && dato==0 && CAPTURA==7){
  
 PTBD_PTBD5=1;
   CAPTURA=0;
   START=0;
  }
  
  
  
  
  /*** Don't write any code pass this line, or it will be deleted during code generation. ***/
  /*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
  for(;;){}
  /*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/

/* END poneshot */
/*
** ###################################################################
**
**     This file was created by Processor Expert 3.07 [04.34]
**     for the Freescale HCS08 series of microcontrollers.
**
** ###################################################################
*/

}
}


SALUDOS Y GRACIAS
[/code]
« Última modificación: 26 de Noviembre de 2011, 01:35:45 por microcom »


 

anything