Autor Tema: Medir tiempo entre dos eventos  (Leído 4040 veces)

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

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 733
    • www.muchotrasto.com
Medir tiempo entre dos eventos
« en: 03 de Julio de 2008, 12:27:26 »
Hola a todos:

He estado buscando componentes electrónicos que midan el trancurso de tiempo de dos interrupciones externas de forma muy precisa. He encontrado algo en maxim, los llaman RTC (Real Time Clock), pero sólo miden un interrupción, lo cual me parece raro porque no sé puede medir una interrupción  :shock: :shock: :shock:

Quisiera que estos componentes luego me dijesen el transcurso del tiempo por comunicación seríe i2c, spi, etc. para comunicarselo a un microcontrolador.

Sé que esto se podría hacer con un sólo PIC pero imagino que la medida será mucho más precisa usando componentes externos.

Bueno, mi pregunta es, conoceis algún micro o algún circuito eléctrico que llegue a medir resoluciones de unos pocos us.

Un saludete a todos y como siempre muchas gracias.

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 733
    • www.muchotrasto.com
Re: Medir tiempo entre dos eventos
« Respuesta #1 en: 12 de Julio de 2008, 21:43:15 »
Nadie tiene una ligera idea de como se pordria encaminar, venga a animaros  :-) :-) :-) :-)

Un saludete.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17764
    • MicroPIC
Re: Medir tiempo entre dos eventos
« Respuesta #2 en: 13 de Julio de 2008, 04:32:21 »
No sé si un componente externo te puede dar más precisión que un PIC.
Ten en cuenta que si lo pones a currar a 20MHz y es un 16F, tendrás un ciclo de instrucción de 0.2us
¿Necesitas algo más preciso aún?
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 733
    • www.muchotrasto.com
Re: Medir tiempo entre dos eventos
« Respuesta #3 en: 13 de Julio de 2008, 07:31:53 »
Lo primero gracias Nocturno por la respuesta:

0.2us puede ser mucho tiempo si el programa es muy largo.

¿¿¿¿Hay alguna forma de saber con ccs cuanto es el ciclo de ejecuación de un programa????, que no sea hacerlo en ensamblador y contar el número de lineas y multiplicarlo por el ciclo de instrucción.

Itentaré hacerlo con un PIC y ya os contaré que tal pero sigo prefiriendo utilizar HW y no un PIC, si alguien se entera de algo sería de agradecer.

Bueno, a modo ilustrativo, por si la gente no lo sabe el ciclo de instrucción de un PIC es:

CI = 4 * (1/fcristal)

Si nuestro cristal es de 20MHz

CI = 4 * (1 / 20.000.000) = 200 ns = 0.2us
« Última modificación: 13 de Julio de 2008, 18:18:40 por c4_esp_VR »

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1255
Re: Medir tiempo entre dos eventos
« Respuesta #4 en: 13 de Julio de 2008, 22:13:22 »
Hola, en la pagina de red pic hay un ejemplo de como medir pulsos, analizalo y prueba si te conviene lo haces.
saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Medir tiempo entre dos eventos
« Respuesta #5 en: 14 de Julio de 2008, 13:28:58 »
Al entrar en la interrupción1 prende un led y al entrar en la interrupción2 apagalo luego mide el tiempo en un osciloscopio. Si deseas tenerlo como valor digital puedes usar un pic18F corriendo a 48MHz e ingresa el pin del led a este pic y él te medirá el tiempo entre las 2 interrupciones, si aun asi crees que va muy lento usa un DSP y emplea la misma técnica.

En lo personal yo lo haria con el mismo pic y usaria el timer1 de 16bits y si me faltan bits concateno registros y listo.

Javicho.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5461
    • Picmania by Redraven
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Medir tiempo entre dos eventos
« Respuesta #7 en: 14 de Julio de 2008, 15:02:29 »
Si lo que quieres es medir el tiempo entre dos eventos, primero tendrás que lograr que estos eventos se conviertan en frentes de subida y caída que puedes alimentar a los módulos CCP del PIC, podríamos ayudarte, pero necesitamos que nos ilustres mejor como son las señales a las que quieres medirles el tiempo.

Saludos
Reinier

PD: Con lo que te RedPic te recomienda tienes por donde empezar.

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 733
    • www.muchotrasto.com
Re: Medir tiempo entre dos eventos
« Respuesta #8 en: 14 de Julio de 2008, 17:54:22 »
Hola:

Gracias a todos por vuestro interés, como siempre sois unos craks.

Agraciadamente por el momento programar un pic no se me resiste y es relativamente sencillo programar el pic para que inicie el temporizador con un evento externo y lo pare con otro evento externo mediante sus respectivas rutinas de interrupción, realizando por tanto 3 interrupciociones (2 externas y una por desbordamiento del temporizador). Por otro lado tambien pensaba simularlo en Proteus que si nadie me dice lo contrario será fiable la medida ¿¿¿ no ???.

El problema viene de querer hacerlo por HW ya que así aprendía más y la medida sería más fiable, pero no encuentro los componentes necesarios para hacerlo...

Como he dicho antes gracias a todos por vuestra ayuda. Ya os contaré que tal con el proteus en unos días.

Un saludete.

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Medir tiempo entre dos eventos
« Respuesta #9 en: 15 de Julio de 2008, 10:02:23 »
Cuidado con las interrupciones que pueden ser MUY LENTAS para determinados procesos, y según dices necesitas precisiones en el orden de los us, entrar a una subrutina de atención a IT puede llevarle al PIC hasta 32us y luego lo que consumas dentro de la IT para atender la ocurrencia del evento (echar a andar un TIMER por ejemplo y pararlo luego) así que cuidado con este método porque puede que no te sirva. Un modo muy muy rápido es utilizar los módulos de captura y comparación, por ejemplo:

Si tienes un evento que quieres medir cuanto dura y creas un circuito que de un pulso de duración igual al evento, puedes utilizar un PIC con dos CCP uno que capture la subida y otro la bajada, éste último que te genere una IT, así cuando llegas a la subrutina de atención a la IT del CCP, basta con que calcules, mediante los registros de captura del los temporizadores, cuanto ha durado el evento, es un método muy rápido y eficiente, claro que el evento no debe durar más que lo el TIMER demora en dar una vuelta completa (no me refiero al cruce por cero sino a una vuelta completa desde la primera captura).

Hace unos días un estudiante me vino con la misma duda, y quedó claro que el método era esete de los CCP, porque necesitaba una resolución de 2us, que era la duración mínima que podía tener el evento que quería medir, así que ningún método funcionaba, excepto este que te comento. Las IT externas, conjugadas con temporizadores, tal como has comentado no habían tenido el desempeño esperado, incluso resultaron más lentas que la encuesta (claro que el procesador tendría que hacer solamente el trabajo de encuestar constantemente un pin del PIC y eso no es lo correcto)

Saludos
Reinier

Desconectado 5GTT

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 915
Re: Medir tiempo entre dos eventos
« Respuesta #10 en: 23 de Julio de 2008, 22:51:24 »
Mira José, esta página habla de la precisión de los RTC de Maxim. Es complicado el experimento ya que han de controlar hasta la temperatura de la habitación, pero resulta ser más preciso que cualquier reloj que hayas visto.

http://www.maxim-ic.com/appnotes.cfm/appnote_number/632

Si consigues arrancar el RTC y apagarlo en el momento que quieras puedes monitorizar con bastante precisión el tiempo. ¿Es algo así lo que buscabas?

Tutoriales y proyectos de electrónica