Autor Tema: Formas de medir un pulso  (Leído 6639 veces)

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

Desconectado __ERoS__

  • PIC10
  • *
  • Mensajes: 22
Formas de medir un pulso
« en: 07 de Julio de 2007, 11:51:51 »
Hola

He estado mirando sobre todo en la pagina de Redpic, la manera de medir pulsos desde un pic. Me encuentro que puedo usar:

Interrupcion externa por RB0 y timer1
http://picmania.garcia-cuervo.net/Tecnicas_en_C_1.htm

Mediante modulos CCP
http://picmania.garcia-cuervo.net/Tecnicas_en_C_2.htm

Y mediante interrupcion por cambio de estado INTRB
http://picmania.garcia-cuervo.net/Tecnicas_en_C_3.htm

Resumiendo, en el primer caso solo puedo usar el pin RB0, en el segundo como uso un 18F4550 tengo dos modulos CCP y podria usar dos pines mas (RC1 y RC2), y en el tercero puedo los pines 4 a 7 del PORTB. En total podria usar 7 pines de mi pic para medir pulsos

Entonces, si quiero medir pulsos de  10 "fuentes" distintas (serian sensores), no tengo tantos pines para ellos, pero no habria otra manera? Es decir, no puedo usar cualquier otro pin de entrada del pic sin ser los anteriores (por ejemplo, rd0, rd1, rd2 y rd3 que no uso) y medir en el un pulso?

Es que despues mirando el circuito de medicion con SRF04 (http://picmania.garcia-cuervo.net/Proyectos_AUX_SRF04.htm) veo que mide un pulso en el pin RA1 y lo hace asi, sin suar interrupciones ni nada:

for ( ; !input(SRF04_PORT_ECHO); ); // Espero el inicio del pulso del eco (flanco de subida)
set_timer1(0); // Cuando llegue pon a cero el Timer1
for ( ; input(SRF04_PORT_ECHO); ); // Espero al final del pulso del eco (flanco de bajada)
echo_delay = get_timer1();

Entonces mi duda es porque en este caso lo ha hecho asi, porque de ser lo mismo podria usar este metodo en los pines que quiera...

Saludos y muchas gracias
« Última modificación: 07 de Julio de 2007, 15:31:53 por RedPic »

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Formas de medir un pulso
« Respuesta #1 en: 07 de Julio de 2007, 12:01:52 »
Hola amigo!

El "problema" que se te presenta midiendo un pulso sin usar interrupciones es que...solo puedes medir el pulso, y no hacer nada a la vez.

Si tu aplicacion no necesita refrescar un display ni atender un teclado (por ejemplo), tranquilamente puedes dedicarte a contar el tiempo que hay entre pulso y pulso de otra manera.

Saludos!  :mrgreen:
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Formas de medir un pulso
« Respuesta #2 en: 07 de Julio de 2007, 13:02:51 »
Hay un método adicional, aunque sólo es válido en dsPIC 30F / 33F, descrito aquí:
Medición de ancho de pulsos con TGATE

Como bien te ha dicho Aitopes, lo mejor es hacerlo con interrupciones. Si no necesitas tanta resolución, podrías hacer un chequeo de los pines que quieras en el bucle principal del programa y de esa manera los controlarías todos.

Desconectado __ERoS__

  • PIC10
  • *
  • Mensajes: 22
Re: Formas de medir un pulso
« Respuesta #3 en: 07 de Julio de 2007, 13:13:37 »
Muchas gracias por las respuesta, ya me ha quedado claro que puedo hacerlo sin interrupciones pero es mejor con ellas.

En mi caso, el pic espera ordenes del pc para leer los sensores, por usb o rs-232, asi que me imagino que hacerlo sin interrupciones no es nada weno no?

Porque a ver, si me pongo a contar el ancho del puso y antes de acabar me llega algo por rs-232, saltara su interrupcion, y cuando acabe volvera con lo del pulso y entonces puede pasar que ya ha acabado el pulso mientras se gestionaba la interrupcion serie y asi la medida sera algo incorrecta, cierto?

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Formas de medir un pulso
« Respuesta #4 en: 07 de Julio de 2007, 13:17:36 »
Claro, si el micro está atendiendo otra cosa, puede que se le escape. Por eso te digo que todo depende de la resolución con que quieras medirlo.

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: Formas de medir un pulso
« Respuesta #5 en: 07 de Julio de 2007, 13:20:04 »
Hola, también podrías usar un conversor de frecuencia a voltaje como el LM2907 si lo que necesitas en medir la frecuencia puedes usar ese integrado.

Los dspic tiene una manera muy sencilla de medir el ancho de pulso con el TGATE los 5 timers lo permiten. Pero al ver el esquema del 30f4011 solo tiene una entrada para pulsos externos, corregirme si me equivoco.

Saludos
control de movimiento

Desconectado __ERoS__

  • PIC10
  • *
  • Mensajes: 22
Re: Formas de medir un pulso
« Respuesta #6 en: 07 de Julio de 2007, 13:53:18 »
Claro, si el micro está atendiendo otra cosa, puede que se le escape. Por eso te digo que todo depende de la resolución con que quieras medirlo.

Pues en el datasheet del sensor tengo que cada 147us es una pulgada, con lo cual podria averiguar cuanto tarda la interrupcion serie en ejecutarse (no se como la verdad) y como es la unica cosa que podria interrumpir la medida sabria mas o menos cuanto me perderia en la medida en caso de que ocurra lo que dije antes y asi saber el error cometido, y ver si el error me vale o no.

Hola, también podrías usar un conversor de frecuencia a voltaje como el LM2907 si lo que necesitas en medir la frecuencia puedes usar ese integrado.

Los dspic tiene una manera muy sencilla de medir el ancho de pulso con el TGATE los 5 timers lo permiten. Pero al ver el esquema del 30f4011 solo tiene una entrada para pulsos externos, corregirme si me equivoco.

Saludos

La opcion del conversor de frecuencia a voltaje, me valdria si no tuviera ocupados los 13 canales analogicos con sensores sharp que dan la salida en tension. De hecho el maxsonar que trato de medir ahora tambien me da la salida en tension, pero como no la puedo usar por tener los pines ocupados y como tb me da la salida en serie y en ancho de pulsos por eso trato de medirlo de otra manera (la salida serie es otra opcion, el sensor da entre 0 y 5v con lo que "creo" podria conectar el tx del sensor directamente a un pin de mi pic que actue como rx, sin usar max232, pero esto aun no lo mire si es asi)

la segunda opcion, como uso un pic18f4550 no puedo usar ese metodo. Y aunque tuviera un dspic si solo tiene una entrada ya nada debido a que necesito poder conectar cuantos mas sensores mejor. De todas formas gracias por tu opinion.

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: Formas de medir un pulso
« Respuesta #7 en: 07 de Julio de 2007, 15:47:43 »
 Hola, podrías usar otro pic para sensar las entradas analógicas y que se comunique con el pic principal por SPI o USART.
control de movimiento

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Formas de medir un pulso
« Respuesta #8 en: 07 de Julio de 2007, 15:53:36 »
En cuanto a tu consulta:

Serie Técnicas en C (en el Foro) (en PicManía) es un proyecto educativo para enseñar a nuestros amigos que se inician en el C para PIC´s distintas formas de hacer, técnicas, en este caso medir pulsos ó generarlos.

El usar una técnica u otra depende de la disponibilidad que tengamos de los distintos pines, de los módulos que tenga el PIC que utilizamos, de la precisión con que deseemos o podamos hacerlo ... etc. etc. etc.

Si usamos un módulo INPUT CAPTURE obtendremos la precisión máxima con el mínimo de recursos del resto del PIC y de código realizado por nuestra parte, es el hardware del PIC quien realiza la medida, no nuestro código y sólo cuando ésta ha sido capturada interviene nuestro código desde el main tras recibir la correspondiente señal de interrupción.

Si usamos el método al que te refieres desarrollado para usar el SFR04 (en el foro) (en PicManía) se utiliza el máximo de recursos del PIC y de nuestro código ya que es crítico que el main esté pendiente de recibir el inicio y el final del pulso, no utiliza interrupciones. Podemos con este método realizar tantas medidas distintas como pines de entrada tengamos disponibles pero si nuestro main se ocupa de muchas mas cosas es mas que probable que perdamos o el pulso o el resto de tareas encomendadas al PIC. Con pulsos largos, con periodos de varios milisegundos, es posible leer de esta forma pulsos en muchos pines desde el main, sobre todo con un 18F4550 con el PLL activado y corriendo a 48Mhz. 

Cada forma de medir tiene sus pros y sus contras, depende de qué necesitemos y de qué dispongamos para realizarlo.

Para un trabajo que he tenido que hacer en el que tenía que leer pulsos por un monton de pines he utilizado TODOS los métodos descritos intentando distribuir las señales entre ellos poniendo los mas sensibles en los pines "interrumpibles" y los demás ajustando los periodos muertos en el main para intentar optimizar su captura sin que el resto de funciones se  vea demasiado afectado, cuando en el main detecto un flanco de inico deshabilito la/s interrupción/es que mas podría afectarme y cosas por el estilo.

Un saludo.  :mrgreen:

P.D. __EROS__ haciendo uso de mis privilegios como moderador global de este foro he editado tu Post original para modificar los enlaces a mis páginas porque estaban rotos, los he dirigido a los sitios buenos para que puedan ser visitados.

« Última modificación: 07 de Julio de 2007, 16:03:36 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado __ERoS__

  • PIC10
  • *
  • Mensajes: 22
Re: Formas de medir un pulso
« Respuesta #9 en: 07 de Julio de 2007, 20:36:51 »
Hola, podrías usar otro pic para sensar las entradas analógicas y que se comunique con el pic principal por SPI o USART.

Lo pense pero mientras pueda aprovechar todos los recursos de mi pic actual no contemplo añadir otro mas (mayor coste tb)

En cuanto a tu consulta:

Serie Técnicas en C (en el Foro) (en PicManía) es un proyecto educativo para enseñar a nuestros amigos que se inician en el C para PIC´s distintas formas de hacer, técnicas, en este caso medir pulsos ó generarlos.

El usar una técnica u otra depende de la disponibilidad que tengamos de los distintos pines, de los módulos que tenga el PIC que utilizamos, de la precisión con que deseemos o podamos hacerlo ... etc. etc. etc.

Si usamos un módulo INPUT CAPTURE obtendremos la precisión máxima con el mínimo de recursos del resto del PIC y de código realizado por nuestra parte, es el hardware del PIC quien realiza la medida, no nuestro código y sólo cuando ésta ha sido capturada interviene nuestro código desde el main tras recibir la correspondiente señal de interrupción.

Si usamos el método al que te refieres desarrollado para usar el SFR04 (en el foro) (en PicManía) se utiliza el máximo de recursos del PIC y de nuestro código ya que es crítico que el main esté pendiente de recibir el inicio y el final del pulso, no utiliza interrupciones. Podemos con este método realizar tantas medidas distintas como pines de entrada tengamos disponibles pero si nuestro main se ocupa de muchas mas cosas es mas que probable que perdamos o el pulso o el resto de tareas encomendadas al PIC. Con pulsos largos, con periodos de varios milisegundos, es posible leer de esta forma pulsos en muchos pines desde el main, sobre todo con un 18F4550 con el PLL activado y corriendo a 48Mhz. 

Cada forma de medir tiene sus pros y sus contras, depende de qué necesitemos y de qué dispongamos para realizarlo.

Para un trabajo que he tenido que hacer en el que tenía que leer pulsos por un monton de pines he utilizado TODOS los métodos descritos intentando distribuir las señales entre ellos poniendo los mas sensibles en los pines "interrumpibles" y los demás ajustando los periodos muertos en el main para intentar optimizar su captura sin que el resto de funciones se  vea demasiado afectado, cuando en el main detecto un flanco de inico deshabilito la/s interrupción/es que mas podría afectarme y cosas por el estilo.

Un saludo.  :mrgreen:

P.D. __EROS__ haciendo uso de mis privilegios como moderador global de este foro he editado tu Post original para modificar los enlaces a mis páginas porque estaban rotos, los he dirigido a los sitios buenos para que puedan ser visitados.



Gracias por contestar ya que tu eras el autor de mis fuentes y me ha quedado muy claro mis distintas opciones.

Mi pic lo tengo a 48MHZ y la unica interrupcion posible es recepcion via serie. Los pulsos a medir varian entre 147us y 37,5ms, que ya son bastantes ms asi que estoi pensando en realizarlo con el metodo que usaste para los SRF04, ya que mi pic esta esperando ordenes (mientras no hace nada), y cuando me llegue la orden de lectura podria deshabilitar la interrupcion rda, o simplemente controlar desde el pc que no se sature al pic, no enviandole otra orden hasta terminar la actual (debido a que siempre envio comando desde el pc y ESPERO respuesta del pic). De esta manera creo que el unico inconveniente a usar este metodo es que perdere algo de velocidad al enviar comandos, pero nada mas no creeis? Y por contra podre usar todos los pines que tenga libres como entradas

Saludos y gracias de nuevo

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Formas de medir un pulso
« Respuesta #10 en: 07 de Julio de 2007, 20:48:38 »
Si puedes controlar los tiempos de respuesta desde el PC para que el PIC vaya holgado creo que puedes utilizar el método mas "ineficaz" para medir. De todas formas pulsos de 150 uS creo que sería muy conveniente destinarlos a algun pin "interrumpible".

 
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Formas de medir un pulso
« Respuesta #11 en: 08 de Julio de 2007, 05:52:34 »
si te faltan E/S por que no usas expansiones I2C y listo, tienes E/S digitales y conversores A/D de uno o varios canales
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Formas de medir un pulso
« Respuesta #12 en: 08 de Julio de 2007, 05:59:56 »
Cierto, podrías estudiar las características del MCP23016 (Datasheet) para ver si te puede valer. Es un expansor de puertos I2C con 16 canales I/O. Tambien lo tienen en formato SPI, el MCP23S17.

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado __ERoS__

  • PIC10
  • *
  • Mensajes: 22
Re: Formas de medir un pulso
« Respuesta #13 en: 08 de Julio de 2007, 08:29:53 »
Voi a mirar eso a ver que tal, gracias pr el aviso


 

anything