Comunidad de discusión sobre Automatización, Electrónica industrial, Microcontroladores y electrónica digital, Robótica, Domótica, Telemática, Tecnologías móviles, y muchos temas más.
Contar pulsos en determinado tiempo
|
Braulio
| Ubicación: Arequipa, PERU |
| Registrado: 25 Sep 2006 |
| Mensajes: 116 |
|
 |
| Publicado: Mar Nov 13, 2007 7:00 pm |
|
|
 |
 |
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 :D
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 :D . 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.
|
|
|
|
dianapye
| Ubicación: Colombia |
| Registrado: 13 Nov 2007 |
| Mensajes: 6 |
|
 |
| Publicado: Mie Nov 14, 2007 10:08 am |
|
|
 |
 |
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
|
|
|
 | #13 AYUDA de FORMA URGENTE |  |
|
Aquilev
| Ubicación: Chile |
| Registrado: 15 Nov 2007 |
| Mensajes: 1 |
|
 |
| Publicado: Jue Nov 15, 2007 6:19 pm |
|
|
 |
 |
Bueno les cuento quiero realizar un programa que cuente pulsos, esto lo quiero hacer con el PIC16F877a, pero mi inconveniente es que no se como activar como configurar al micro para que cuente pulsos, necesito esta gran ayuda, pero necesito que sea en anssembler ya que es el lenguaje que manejo o que por lo menos intento de manejar. todo esto es para que despues generar un programa para usarlo en contar en pulsos de un encoder de 3 canales.
ESPERO SU GRAN AYUDA Y OJALA QUE OS ENVIARAN SI NUFUERA MOLESTIA EL CODIGO SE LOS AGRADECERIA UN MONTON
DE ANTE MANO MUCHAS GRACIAS Y SALUDOS
|
|
|
|
ciri
| Ubicación: CapFed, Argentina |
| Registrado: 30 May 2007 |
| Mensajes: 1132 |
|
 |
| Publicado: Jue Nov 15, 2007 8:18 pm |
|
|
 |
 |
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?
|
|
|
|
gabrielg
| Ubicación: Argentina |
| Registrado: 14 Nov 2007 |
| Mensajes: 210 |
|
 |
| Publicado: Sab Nov 17, 2007 2:05 pm |
|
|
 |
 |
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
|
|
|
 | #16 El PIC te alcanza |  |
|
gabrielg
| Ubicación: Argentina |
| Registrado: 14 Nov 2007 |
| Mensajes: 210 |
|
 |
| Publicado: Sab Nov 17, 2007 2:15 pm |
|
|
 |
 |
Hola amigo
ciri escribió:
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.
|
|
|
|
ciri
| Ubicación: CapFed, Argentina |
| Registrado: 30 May 2007 |
| Mensajes: 1132 |
|
 |
| Publicado: Sab Nov 17, 2007 3:25 pm |
|
|
 |
 |
Aaa. claro. la "velocidad de lectura", está dada por el cristal que utilice el PIC.
A bueno. así me quedo más tranquilo!:
|
|
|
|
Fogonazo
Colaborador
| Ubicación: Via Lactea |
| Registrado: 13 Ene 2007 |
| Mensajes: 5110 |
|
 |
| Publicado: Sab Nov 17, 2007 3:33 pm |
|
|
 |
 |
1800 RPM a un pulso por vuelta son 30 Hz
|
|
|
|
ciri
| Ubicación: CapFed, Argentina |
| Registrado: 30 May 2007 |
| Mensajes: 1132 |
|
 |
| Publicado: Sab Nov 17, 2007 4:10 pm |
|
|
 |
 |
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.
|
|
|
 | #20 mmmmm que error.... |  |
|
gabrielg
| Ubicación: Argentina |
| Registrado: 14 Nov 2007 |
| Mensajes: 210 |
|
 |
| Publicado: Sab Nov 17, 2007 11:14 pm |
|
|
 |
 |
Fogonazo escribió:
1800 RPM a un pulso por vuelta son 30 Hz
Craso error el mio, gracias fogonazo.
|
|
|
 | Foros de Electronica |  |
|
 |