uControl
Agosto 27, 2014, 03:55:08 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  

La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entérate de como puedes aprovechar esta oferta haciendo click aqui.

Súmate, y ayuda a uControl con tu participación en esta interesante oportunidad que nos oferece Niple.

Páginas: [1] 2   Ir Abajo
  Imprimir  
Autor Tema: Contar pulsos con timer en ccs  (Leído 16867 veces)
0 Usuarios y 1 Visitante están viendo este tema.
agustin156
PIC10F
*
Desconectado Desconectado

Mensajes: 28


« : Septiembre 01, 2010, 07:15:43 »

buenas tardes amigos, resulta que quiero medir las rpm de un motor con un sensor de efecto hall el cual ya esta montado y funcionando a la perfección. El problema es que no se como contar los pulsos con los timers del pic. Probé varias cosas pero no lo puedo hacer funcionar. Alguien me podría dar una mano para configurar los timers. El pic es un 16f877A.

Gracias y saludos.
En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5434


Con Qt...


WWW
« Respuesta #1 : Septiembre 01, 2010, 07:20:42 »

Muéstranos que has hecho.


Saludos!
En línea

agustin156
PIC10F
*
Desconectado Desconectado

Mensajes: 28


« Respuesta #2 : Septiembre 01, 2010, 07:42:38 »

Gracias Suky por responder, esto es lo que intente

Código:
#include <16f877a.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,NODEBUG,BROWNOUT,NOCPD,NOWRT
#include <flex_lcd.c>

void main()  
{
int16 pulsos;
lcd_init();

   while(1)
    {
      setup_timer_1(T1_EXTERNAL);
      setup_timer_1(T1_DIV_BY_1);
      set_timer1(0);
      pulsos=get_timer1();
      delay_ms(5000);//espero
      setup_timer_1(T1_DISABLED);//deshabilito
      pulsos=get_timer1();//recojo la cuenta
  
      printf(lcd_putc, "\f pulsos %6lu ",pulsos);
    
  
    }
}

por lo que vi, el retardo debería generarlo con otro timer. A esto lo simule en proteus ingresando por el pin C0 una onda cuadrada.

Saludos.
« Última modificación: Septiembre 01, 2010, 07:55:17 por Suky » En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5434


Con Qt...


WWW
« Respuesta #3 : Septiembre 01, 2010, 07:59:36 »

Te conviene configurar el timer de la siguiente manera, para no re configurar erróneamente. Y fuera del bucle infinito.
Código:
setup_timer_1(T1_EXTERNAL | T1_DIV_BY_1);


Luego:

Código:
     set_timer1(0);
      delay_ms(5000);//espero
      pulsos=get_timer1();//recojo la cuenta
      setup_timer_1(T1_DISABLED);//deshabilito


Hay que ver si en los 5 segundo no se desborda el timer.


Saludos!

En línea

agustin156
PIC10F
*
Desconectado Desconectado

Mensajes: 28


« Respuesta #4 : Septiembre 04, 2010, 07:30:03 »

Gracias Suky, efectivamente esa era la solución, estaba configurando mal el timer. Modifique un poco el programa utilizando el timer1 para generar el retardo por interrupciones lo dejo por si le es útil a alguien.

Saludos!

Código:
#include <16f877a.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,NODEBUG,BROWNOUT,NOCPD,NOWRT
#include <flex_lcd.c>

int16 contador=0;

#int_timer1
void timer1_isr(void)
{
   contador=get_timer0();
   contador=contador*2*120;
   printf(lcd_putc, "\f %6lu rpm",contador);
   set_timer0(0);
   set_timer1(3036);
}

void main()
{


   lcd_init();
   setup_timer_0(rtcc_ext_h_to_l | rtcc_div_2);
   setup_timer_1(t1_internal | t1_div_by_8);
   
   set_timer0(0);
   set_timer1(3036);
   enable_interrupts(int_timer1);
   enable_interrupts(global);
   
 
   while(1)
    {
 
    }
}
« Última modificación: Septiembre 04, 2010, 07:32:02 por agustin156 » En línea
cairiza
PIC10F
*
Desconectado Desconectado

Sexo: Femenino
Mensajes: 3



« Respuesta #5 : Octubre 07, 2010, 04:43:53 »

Hola cual es la entrada de tu programa?Huh?Huh??? estoy haciendo algo parecido. pero en proteus le pongo una onda cuadrada por RB0 y no pasa nada.
saludos.

Carmen R
colombia










Código:
#include <16f877a.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,NODEBUG,BROWNOUT,NOCPD,NOWRT
#include <flex_lcd.c>

int16 contador=0;

#int_timer1
void timer1_isr(void)
{
   contador=get_timer0();
   contador=contador*2*120;
   printf(lcd_putc, "\f %6lu rpm",contador);
   set_timer0(0);
   set_timer1(3036);
}

void main()
{


   lcd_init();
   setup_timer_0(rtcc_ext_h_to_l | rtcc_div_2);
   setup_timer_1(t1_internal | t1_div_by_8);
   
   set_timer0(0);
   set_timer1(3036);
   enable_interrupts(int_timer1);
   enable_interrupts(global);
   
 
   while(1)
    {
 
    }
}
[/quote]
En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5434


Con Qt...


WWW
« Respuesta #6 : Octubre 07, 2010, 04:50:23 »

Es el pin para contar eventos externos con el timer1.


Saludos!
En línea

cairiza
PIC10F
*
Desconectado Desconectado

Sexo: Femenino
Mensajes: 3



« Respuesta #7 : Octubre 07, 2010, 05:53:05 »

Hola, gracias por contestar.
Bien, me dices entonces que es por el RC0, pero le envio una onda cuadrada y siempre me sale 0 rpm en la pantalla

adjunto librerias y archivo en proteus. http://www.4shared.com/file/rCEiN-eK/contador_pulsos.html

gracias

Carmen R

Colombia


Es el pin para contar eventos externos con el timer1.


Saludos!
En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5434


Con Qt...


WWW
« Respuesta #8 : Octubre 07, 2010, 07:31:17 »

1000 disculpas, lei mal  Idiota El timer 1 se utiliza para leer cada cierto tiempo, quien cuenta los pulsos externos es el timer0, o seas por el pin RA4.


Saludos!
En línea

cairiza
PIC10F
*
Desconectado Desconectado

Sexo: Femenino
Mensajes: 3



« Respuesta #9 : Octubre 07, 2010, 10:55:28 »

sisisisis ya funciona a la perfección gracias!!!!!!!!!  rolleyes2

anexo codigo y archivo en proteus.
http://www.4shared.com/file/LNSBpOj-/contador_pulsos.html


muchas gracias!!!!!!!!!!  laugh laugh laugh laugh

Carmen Rios Z.
Colombia



1000 disculpas, lei mal  Idiota El timer 1 se utiliza para leer cada cierto tiempo, quien cuenta los pulsos externos es el timer0, o seas por el pin RA4.


Saludos!
En línea
вoяяe
.::. µPraxis .::.
Amigo de uControl
PIC18F
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1300


Pяobando C30


WWW
« Respuesta #10 : Octubre 09, 2010, 06:14:11 »

Hola que tal estoy haciendo algo similar, contar las RPM de un motor, mi problema radica en que si conecto el motor en el protoboard donde tengo la circuiteria, La LCD donde muestro el resultado muestra caracteres raros o el lcd lleno de cuadros, y si lo conecto en otra fuente no ocurre esto, mi duda es que hacer y por que ocurre esto.

Aclaro no siempre pasa lo mencionado antes, en ocasiones muestra los datos en otras no.

De antemano gracias, saludos !!!!
« Última modificación: Octubre 09, 2010, 06:25:41 por byborre » En línea

La electrónica es simple, puedes aprenderla en 100 simples lecciones, una lección cada año.
HJ
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5402



« Respuesta #11 : Octubre 09, 2010, 06:32:10 »

Lo más probable es que sea el ruido que induce el motor sobre la alimentación.

Saludos
En línea

"si te lo dicen se te olvida, si lo lees lo aprendes; pero si lo haces realmente lo entiendes"
"Cuando llegue la inspiración, que me encuentre trabajando" [Pablo Picasso]
вoяяe
.::. µPraxis .::.
Amigo de uControl
PIC18F
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1300


Pяobando C30


WWW
« Respuesta #12 : Octubre 09, 2010, 07:16:29 »

Gracias por la respuesta HJ, ¿Ahora que hacer para corregirlo?

Saludos!!!
En línea

La electrónica es simple, puedes aprenderla en 100 simples lecciones, una lección cada año.
HJ
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5402



« Respuesta #13 : Octubre 10, 2010, 12:33:41 »

Lo mas conveniente, según mi punto de vista, es la utilización de fuentes separadas.
Por lo menos deberías utilizar una fuente muy buena con reguladores independientes y filtros apropiados.

Por otra parte, deberías evitar lazos de masa y evitar cables y pistas de impreso finas y largas.
Asegúrate de poner un capacitor de .01uF entre Vcc y GND lo mas próximo a las entradas del PIC.

Saludos
En línea

"si te lo dicen se te olvida, si lo lees lo aprendes; pero si lo haces realmente lo entiendes"
"Cuando llegue la inspiración, que me encuentre trabajando" [Pablo Picasso]
вoяяe
.::. µPraxis .::.
Amigo de uControl
PIC18F
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1300


Pяobando C30


WWW
« Respuesta #14 : Octubre 10, 2010, 12:52:12 »

Gracias, probare con el capacitor ya que no lo tengo y efectivamente uso cables muy delgaditos y largos,

Saludos!!!
En línea

La electrónica es simple, puedes aprenderla en 100 simples lecciones, una lección cada año.
Páginas: [1] 2   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.19 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.144 segundos con 29 consultas. (Pretty URLs adds 0.056s, 3q)
loggkey