Autor Tema: Consulta Delay!  (Leído 2507 veces)

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

Desconectado elfrancho

  • PIC16
  • ***
  • Mensajes: 101
Consulta Delay!
« en: 15 de Noviembre de 2011, 16:50:14 »
Sres, quiero hacerles un consulta....

CCS desactiva las interrupciones durante un delay_ms(500); ?

en caso de que no, necesito saber lo siguiente:

Si el programa esta dentro de en un delay_ms(1000); y justo en la mitad del mismo tengo una interrupción de uno de los timers... puedo saltar ese dalay? o sea que cuando retorne de la interrupcion NO regrese al delay ???



Saludos  y gracias !!!

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Consulta Delay!
« Respuesta #1 en: 15 de Noviembre de 2011, 17:05:54 »
no las desactiva, el delay no deja de ser un loop durante x tiempo. Y cuando regrese de la interrupcion volvera al delay en caso de que le pille ahi. No puedes hacer que salte el delay en caso de que haya una interrupcion, el codigo volvera donde estaba, lo que puedes hacer es tu propio delay y añadirle una variable global, que en caso de que haya una interrupcion la interrupcion ponga esa variable a 1, si el delay detecta de que se ha puesto esa variable a 1 entonces acaba el delay y pone la variable a 0.

Desconectado elfrancho

  • PIC16
  • ***
  • Mensajes: 101
Re: Consulta Delay!
« Respuesta #2 en: 15 de Noviembre de 2011, 21:43:56 »
no las desactiva, el delay no deja de ser un loop durante x tiempo. Y cuando regrese de la interrupcion volvera al delay en caso de que le pille ahi. No puedes hacer que salte el delay en caso de que haya una interrupcion, el codigo volvera donde estaba, lo que puedes hacer es tu propio delay y añadirle una variable global, que en caso de que haya una interrupcion la interrupcion ponga esa variable a 1, si el delay detecta de que se ha puesto esa variable a 1 entonces acaba el delay y pone la variable a 0.

A ver si entendi....

Puedo hacer asi???

Para delay de 4 segundos:

for(i=0;i<4000&&stopdelay==0;i=i+10) delay_ms(10);




Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Consulta Delay!
« Respuesta #3 en: 15 de Noviembre de 2011, 23:50:04 »
si, pero lo que yo te decia es que hagas tu propia funcion delay_ms aunque tendrias que hacer calculos con la velocidad de tu pic y tal, y dentro de esa funcion hagas eso mismo que has escrito pero en cada loop, asi como mucho tendras un delay de 2tcy despues de la interrupcion.

Desconectado elfrancho

  • PIC16
  • ***
  • Mensajes: 101
Re: Consulta Delay!
« Respuesta #4 en: 17 de Noviembre de 2011, 19:49:26 »
si, pero lo que yo te decia es que hagas tu propia funcion delay_ms aunque tendrias que hacer calculos con la velocidad de tu pic y tal, y dentro de esa funcion hagas eso mismo que has escrito pero en cada loop, asi como mucho tendras un delay de 2tcy despues de la interrupcion.

Me mataste. como podría hacer eso?  la velocidad es de 8 mhz PIC18f4620

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Consulta Delay!
« Respuesta #5 en: 17 de Noviembre de 2011, 20:49:36 »
si, pero lo que yo te decia es que hagas tu propia funcion delay_ms aunque tendrias que hacer calculos con la velocidad de tu pic y tal, y dentro de esa funcion hagas eso mismo que has escrito pero en cada loop, asi como mucho tendras un delay de 2tcy despues de la interrupcion.

Me mataste. como podría hacer eso?  la velocidad es de 8 mhz PIC18f4620

Primero tienes que plantearte si es necesario para tu aplicación o con lo que planteaste es suficiente (for(i=0;i<4000&&stopdelay==0;i=i+10) delay_ms(10) ; )  ;-)  Sino podes usar algo parecido con delayus() o delay_cycles(), pero en ese caso si necesitas un delay (o sea los 4 seg, por ejemplo) más exacto debes tener en cuenta el consumo de ciclos en los for o while que implementes.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Consulta Delay!
« Respuesta #6 en: 17 de Noviembre de 2011, 21:05:49 »
8mhz = 500ns/tcy
1ms=2000tcy


void delay_msX(int tim) {
   unsigned long tmp;
   tmp=tim*2000;
   while(tmp-- && !stopdelay);
}

realmente seria algo asi, pero no del todo, habria que ver cuantas TCY consume el codigo en total y el while y restarselo al tmp, ya de por si la multiplicacion gasta unos ms, seguramente habra otra forma mas eficaz (mayor precision) pero es lo que se me ocurre ahora asi rapidamente.

Desconectado elfrancho

  • PIC16
  • ***
  • Mensajes: 101
Re: Consulta Delay!
« Respuesta #7 en: 17 de Noviembre de 2011, 21:08:26 »
si, pero lo que yo te decia es que hagas tu propia funcion delay_ms aunque tendrias que hacer calculos con la velocidad de tu pic y tal, y dentro de esa funcion hagas eso mismo que has escrito pero en cada loop, asi como mucho tendras un delay de 2tcy despues de la interrupcion.

Me mataste. como podría hacer eso?  la velocidad es de 8 mhz PIC18f4620

Primero tienes que plantearte si es necesario para tu aplicación o con lo que planteaste es suficiente (for(i=0;i<4000&&stopdelay==0;i=i+10) delay_ms(10) ; )  ;-)  Sino podes usar algo parecido con delayus() o delay_cycles(), pero en ese caso si necesitas un delay (o sea los 4 seg, por ejemplo) más exacto debes tener en cuenta el consumo de ciclos en los for o while que implementes.


Saludos!

Estimado:
yo creo que con (for(i=0;i<4000&&stopdelay==0;i=i+10) delay_ms(10) ; ) me va a ser suficiente, paso a detallar lo que quiero hacer.

Tengo un bus 485 donde tengo conectaod 32 controladores PWM de leds RGB. Ahora lo que quiero hacer es hacer un "Show de luces" con música.

Ya tengo creados varios efectos y programas, ahora lo que quiero hacer es que vayan cambiando sincronizados con el tema musical, para esto pienso escuchar el tema y anotar en que tiempo (ms) se producen los golpes. y en ese preciso momento cambiar de efecto,color,etc.

con esto (for(i=0;i<4000&&stopdelay==0;i=i+10) delay_ms(10) ; )  me daría una resolución de 10ms (casi impersectible para el ojo humano, creo que 100 ms ya se puede notar un pequeño delay)

Se entiende algo?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Consulta Delay!
« Respuesta #8 en: 17 de Noviembre de 2011, 22:55:31 »
Si, coincido que con 10 ms de resolución sobra  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro


 

anything