Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

01/01/2007 #1


Contar pulsos en determinado tiempo
Buenas...

Hace rato que pienso esto y no lo puedo sacar: ¿Cómo hago para contar la cantidad de pulsos que se producen en una entrada de un PIC 16F84a durante un determinado tiempo?

El valor registrado sería luego usado como base para un tacómetro.


De antemano, gracias por la ayuda!
02/01/2007 #2


tengo un contador de pulsos basico basado en este circuito



Contador con 16F84

por si te interesa. 8)
02/01/2007 #3


Si tienes el programa capáz puedo deducir alog! Gracias!!!

Solo faltaría el tiempo no? Porque ese cuenta pulsos, cantidad total o me equivoco?
02/01/2007 #4

Avatar de Braulio

Aquí ejemplos de frecuencimetros: Frecuencimetro con microcontrolador, los cuales no hacen otra cosa que contar pulsos durante un determinado periodo de tiempo, el ejemplo mio lo usé exactamente para un tacómetro. Salu2:

BRAULIO
10/01/2007 #5


Es sencillo, para saber la cantidad de pulsos que entran al pic, deberias habilitar un contador, bueno no conozco ese pic, pero he trabajado con 16f877 y 18f4550, en estos se usan los llamados timer, timer 0 se configura como contador, y el timer 1 se deberia configurar como temporizador este es quien va a llevar el tiempo. si crees que esto quizas te puede ayudar dime y te lo explico con mas detalle
11/01/2007 #6


Fianalemente lo pude lograr, pero tengo un problema en la entrada de la señal porque tiene rebotes, me dijeron hacer una báscula que active en los 4V y desactive en 1V así dejamos entre medio de estos valores todos los posibles rebotes, pero no tengo idea como hacerla. Sugerencias?
12/01/2007 #7


mabauti podrías compartir el código de tu contador de pulsos? me interesa aprender y viendo códigos se aprende un montón
12/01/2007 #8


Este trabajo no fue elaborado con este proposito, pero cumple la funcion aceptablemente.
Pulsos a RB4 e Interrupcion a RB0

hay dos maneras para que funcione :

1) Modificar el asm para que este actualizando continuamente
o
2) Hay que agregarle un resistencia y un pushbutton de la siguiente manera
………………………………………………RB0
………………………………………………/|\
………………………………10K…………|………_|_
Vcc o--------/\/\/\/\/-------o o---------|>GND
http://www.mikroe.com/en/books/picbo...apter/2_22.gif
Archivos Adjuntos
Tipo de Archivo: zip freqmet_723.zip (2,4 KB (Kilobytes), 800 visitas)
13/11/2007 #9


RJR, necesito tu ayuda
Encontré en este foro esta respuesta que diste "Es sencillo, para saber la cantidad de pulsos que entran al pic, deberias habilitar un contador, bueno no conozco ese pic, pero he trabajado con 16f877 y 18f4550, en estos se usan los llamados timer, timer 0 se configura como contador, y el timer 1 se deberia configurar como temporizador este es quien va a llevar el tiempo. si crees que esto quizas te puede ayudar dime y te lo explico con mas detalle", es por eso que te escribo.

La situacion es la siguiente:
Estoy trabajando con un 16f877 y un equipo que me da pulsos. El equipo me da un tren de N pulsos, con 250mS en alto y 50mS en bajo. Yo debo capturar la cantidad de pulsos.

Lo he intentado con el timer, con temporizacion de bucles anidados pero casi siempre tengo perdidas en la cantiadad de pulsos y lo peor es que no siempre da el mismo valor, es decir,el mejor resultado que he obtenido para un tren de 6 pulsos es una suma de 4 pero a veces incluso solo cuenta 2 o 3, por favor ayúdame.

Mil Gracias!

perdiendo 2 pulsos
13/11/2007 #10

Avatar de Braulio

DIANAPYE

Dudo que el buen RJR te responda puesto que no ha posteado desde Enero. Así que me tomaré el atrevimiento de tratar de aconsejarte aunque tu pregunta no vaya dirigida específicamente a mi. como va dirigida a RJR

No se programar el 16F877 pero hasta donde yo ese microcontrolador tiene 3 Timers de los cuales 2 puedens ser usados como contadores (el TMRO y el TMR1)
La idea es que configures uno de ellos como contador y que conectes la salida de los pulsos al respectivo pin asociado. Entonces puedes dedicar el CPU del micro en otras cosas y el timer configurado como contador contará los pulsos que lleguen al pin asociado no importando el ancho que tengan estos. lo que hace es contar simplemente los flancos o bien de subida o bien de bajada (creo que eso se puede configurar también) y en cualquier momento tu puedes leer los registros de dicho timer para saber cuantos pulsos hasta ese momento han llegado.
El único limitante para contar pulsos es que estos vengan a mayor velocidad que la frecuencia del reloj del PIC pero por los datos que das no habrá problema 1/(250 ms +50 ms) = 3.33 Hz lo cual es una tortuga frente a cualquier cristal que uses.
Ahora si lo que desea es contar los pulsos para medir su frecuencia entonces además de usar el contador tienes que usar un timer más para que te marque la unidad de tiempo. para esto tienes q configurar otro timer como temporizador y colocarle un valor de inico en su registro de tal suerte que el tiempo que demore en desbordar sea la unidad de tiempo que vas a usar, eso se puede hacer automáticamente (por hardware) configurando el timer como temporizador con autorecarga. Como tu frecuencia es bien baja entonces tendrás que contar varios de esos ciclos para obtener una unidad d tiempo mas grande. Salvado eso la idea es que en cada desborde (o despues de cada N desbordes si haces lo q te mensiono al último) aprovechas la interrupción que se produce para leer el número de pulsos que se han acumulado. lo divides entre la unidad de tiempo que elegiste (que si eliges 1 seg no es necesario dividir) y ya tienes el valor de la frecuencia de los pulsos.

Espero que te sirvan los datos. Si ya sabías todo esto. bueeeno pues le servirá a otro . si es que ya sabias todo esto pues te recomiendo que adjuntes tu código para que alguien que sepa programamar el 18F877 pueda verlo y quizá corregirlo. Muchos salu2.

BRAULIO.

PD: DIANA. lindo nombre.
14/11/2007 #11


Braulio, gracias por escribirme.

Justamente esas recomendaciones son las que he probado pero el resultado no es el esperado. Como escribí anteriormente por alguna extraña razón hay perdidas en el conteo, incluso de 6 pulsos que hay solo contabiliza 3 o 4; será que tienes o has visto un código en asm que me puedas facilitar?
Sería de gran ayuda

Mil Gracias
15/11/2007 #12

Avatar de ciri

Pregunta..
La frecuencia de lectura de un PIC, es lo suficiente mente alta como para que no me saltee estados? es decir, tengo un motor que por cada vuelta por ejemplo me marca un 1, si hago girar a este moto (por decir algo) a 1800 rpm, el PIC alcanza a leerlo?
17/11/2007 #13


Hola dianapye

Los pulsos que te envia ese equipo que mencionas, ¿son pulsos puros o pueden tener rebotes (medio mecanico).

Mencionas que cuentas 6 pulsos, ¿cuentas los que llegan o durante un tiempo?. ¿Qué flanco empleas para contar, ascendente o descendente?.

Si cuentas los pulsos totales que llegan (no en determinado tiempo) al micro, ingresalos por la entrada del timer 0 (en modo contador) y acumúlalos en un contador.

Realiza la lectura del contador y envia la cuenta al display. Me parece que es lo quierres.

Saludos y suerte
17/11/2007 #14


El PIC te alcanza
Hola amigo

ciri dijo:
La frecuencia de lectura de un PIC, es lo suficiente mente alta como para que no me saltee estados? es decir, tengo un motor que por cada vuelta por ejemplo me marca un 1, si hago girar a este moto (por decir algo) a 1800 rpm, el PIC alcanza a leerlo?
Contar 1800 RPM significa 1.8 kHz. Un PIC utiliza cristales de 4 MHz o mayores, suficientes para poder contar los 2 kHz que necesitas.

Cuanto mayor sea la frecuencia del cristal, mejor será. Si utilizas el 16F877, emplea 20 MHz y listo.
17/11/2007 #15

Avatar de ciri

Aaa...
Aaa. claro. la "velocidad de lectura", está dada por el cristal que utilice el PIC.

A bueno. así me quedo más tranquilo!:
17/11/2007 #16
Moderador general

Avatar de Fogonazo

1800 RPM a un pulso por vuelta son 30 Hz
17/11/2007 #17

Avatar de ciri

OK!..
Gracias. igual las 1800rpm, eran un ejemplo.

El tema es que estoy intentando censar los movimientos de un motor, y quiero controlarlo mediante un soft en la PC, y el puerto paralelo no tiene esa velocidad de lectura, por eso estaba pensando en pasarlo mediante un PIC, y que este me de cierta información a la PC.
17/11/2007 #18


mmmmm que error....
Fogonazo dijo:
1800 RPM a un pulso por vuelta son 30 Hz
Craso error el mio, gracias fogonazo. ops:
17/11/2007 #19

Avatar de ciri

Respuesta..
igual, 30hz, con un cristal de 2mhz, sale como piña.

el ejemplo se entendió.
19/11/2007 #20


Hola gabrielg

Los pulsos que envia ese equipo se supone que son puros y por eso los estoy contando a través del tmr0 acumulandolos en un registro, no tomo en cuenta el tiempo porque el aparato me dice si está ocupado o no entonces el tiempo no es importante. he utilizado flanco ascendente y descendente y el resultado es el mismo y de hecho se que se estan perdiendo los pulsos porque los estoy visualizando a través de un lcd. qué mas hago?.

sin embargo después de que ha contado varias veces y he puesto el tmr0 a 0 el error en el conteo disminuye, como puedo estabilizar el pic?

hay alguna bandera para saber que el tmr0 esta contando?

Saludos y muchas gracias
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.