Autor Tema: Duda con una rutina de timer  (Leído 2551 veces)

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

Desconectado Fenhasan

  • PIC10
  • *
  • Mensajes: 9
Duda con una rutina de timer
« en: 05 de Noviembre de 2004, 16:03:00 »
Hola amigos!

·Mi problema es el siguiente: Necesito determinar el tiempo exacto que genera la siguiente rutina de retardo:

while(!(FLAG6||FLAG5)&&(i<delay))   //Rutina de retardo
    {
     delay_us(10);
     i++;
    }


·Se dan las siguientes condiciones:

*PIC16F628A, usando el oscilador interno a 4 Mhz.
*FLAG6 y FLAG5 son bits, y valen cero inicialmente. Están asociados a cambios en
 los bits 6 y 5 del puerto B (Int_Rb).
*Delay es un Int16.

·La rutina en sí funciona, pero el valor de retardo no es muy preciso.
Ej: Si Delay = 50000 --> Retardo teórico: 500000 [us] (1/2 )
                                 --> Retardo efectivo: aprox. 2 !

·En el fondo, lo que deseo saber es cómo determinar el tiempo exacto de retardo que generará esta rutina.

·Bueno, agradezco su ayuda de antemano.
Atte., Fernando




Desconectado JacoPastorius2004

  • PIC10
  • *
  • Mensajes: 42
RE: Duda con una rutina de timer
« Respuesta #1 en: 05 de Noviembre de 2004, 17:32:00 »
Hola!

No probaste con la herramienta Simulation Trace que esta en el menu View del Mplab?

Pone un break point donde queres empezar a medir el tiempo y otro break point donde queres que termine de contar el tiempo (seria al principio y al final de la rutina que queres medir)
Despues dale a la simulacion y cuando llegue al primer break point mandate al Simulation Trace, dentro de esa ventana dale al boton derecho del raton y elegi que el tiempo te lo visualice en formato ingenieril o en segundos, y dale al reset time para que vaya a cero el timer
A continuacion dale a la simulacion para que continue (no resetes la simulacion) y cuando llegue al segundo break point volve a la ventana Trace y fijate en el tiempo que consumio la rutina.

Espero te sirva!

Desconectado wqtrp

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 170
RE: Duda con una rutina de timer
« Respuesta #2 en: 05 de Noviembre de 2004, 17:41:00 »
a ver, imagino q compilas con CCS pq no se ve con q....
nos das una rutinita de 3 lineas con 4 4 4 4 4 4 variables q solo nos contas como se inicializan....
puede q el criterio sea valido para hacer una rrutina asi, puede haber alguna necesidad seguramente, pero resulta q el retardo fijo q pones es muy pequenio (no tengo ñGiño y el del loop es enorme, con lo cual el overhead q genera el resto de la rutina es enorme al multiplicarlo por 50000...... no sera una prueba de ingenio esto ..... no ?

asi q mejor lo compilas, miras el .lst y comienzas a contar ciclos de maquina y a multiplicar todo por 50000 q seguro te da la precisa....

y sino, sigue anotando por aqui q algo saldra ...

Suerte.

Desconectado Fenhasan

  • PIC10
  • *
  • Mensajes: 9
RE: Duda con una rutina de timer
« Respuesta #3 en: 05 de Noviembre de 2004, 18:24:00 »
Gracias por sus respuestas

·Jaco: Esa herramienta que mencionas, ¿está en el MPLAB 6? Todavía no lo he instalado, y en el 5 no la encontré...

·wqtrp: ¿Qué otros datos te interesaría saber? Efectivamente uso el CCS 3.190, reconozco que me da flojera usar ASM. Como referencia, este mismo tipo de rutina de retardo la usan los creadores del CCS, específicamente para crear una rutina de Time Out de Recepción Serial ( timed_getc(), sale en el archivo de ayuda del compilador ). Según ellos, usando el retardo de 10[us] 50000 veces se obtiene un retardo de 0,5 . El retardo que obtengo es bastante mayor, pero puede ser que el i++ incremente este tiempo adicionalmente...

·Bueno, eso sería por ahora. Nos vemos!

Desconectado JacoPastorius2004

  • PIC10
  • *
  • Mensajes: 42
RE: Duda con una rutina de timer
« Respuesta #4 en: 05 de Noviembre de 2004, 18:29:00 »
Hola!

Esta en la version 6.61 que es la que tengo, no se si es la ultima que han lanzado los de Microchip, fijate en el sitio de ellos.

En la version 5 creo que no esta, mejor bajate la ultima version porque esta mucho mejor que la 5.

Cualquier cosa.

Desconectado wqtrp

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 170
RE: Duda con una rutina de timer
« Respuesta #5 en: 05 de Noviembre de 2004, 20:08:00 »
noooo, no es el i++ quien tiene la culpa, q si bien agrega algo no es para tanto aunque si multiplicado por 50000, el problema es usar un loop de 50000

pero mejor le das una mirada al asm q genera el while y veras q lindo codigo es ese......

suerte..  y si puedes dale una mirada y dinos cuantas instrucciones/ciclos tiene....

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Duda con una rutina de timer
« Respuesta #6 en: 06 de Noviembre de 2004, 01:58:00 »
Para ver el tiempo, te pones en modo SIM del MPLAB y en debugger pulsas stopWatch
es un contador, te pones un break al inicio de la rutina, cuando llegas a ella borras el contador pones un break al final y run, cuando se pare te mostrará el tiempo transcurrido ok? ahora, si lo que quieres es ver exactamente que hace luego si usa el Trace Sonrisa GiganteSonrisa Gigante
- T0ni0 -
30RCF112