Autor Tema: Retardos???  (Leído 1618 veces)

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

Desconectado Kamus23

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 63
Retardos???
« en: 30 de Marzo de 2005, 10:01:00 »
hola m i gente tengo un duda necesito enviar un tren de pulsos con un f873 a 20Mhz... por cualquier pin ahora bien eso ya esta hecho la frecuencia es de 425hz..
   ahora bien mi duda es que necesito enviar el tren de pulso con cierta cadencia es decir: 1 seg. de trasmicion y 4 segundos de silencio...

otra de 0.25 seg de trsamicion y 0.25 seg. de silencio como me pueden explicar esto de tal forma que pueda hacerlo con otros tiempos...

  porque son varias variables con distintas cadencias...

Kamus de Acuario

Desconectado tornar

  • PIC18
  • ****
  • Mensajes: 342
RE: Retardos???
« Respuesta #1 en: 31 de Marzo de 2005, 04:16:00 »
Pues creo que tienes 2 soluciones, una usar PWM implementado por hardware, que en el f87 esta localizado en las patitas RC2 y RC3. Y otra usar PWM por software con la tipica secuencia:

output_bit(PIN_xx,1);
delay_ms(1000); //1 segundo de transmision
output_bit(PIN_xx,0);
delay_ms(4000); //4 segundos de silencio



Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Retardos???
« Respuesta #2 en: 31 de Marzo de 2005, 04:37:00 »
No es muy dificil, creo.

Para las temporizaciones durante las cuales saldrá el tren de pulsos usa un TMR por interrupción.

A grandes rasgos podría ser:

- Usa variables para las diversas temporizaciones: x, y, z, a, b, ....

- Si x=1: Cargar el TMR para una determinada temporización. Si la temporización es larga deberás usar variables auxiliares para repetir la rutina de desbordamiento.

- Cuando finalice la temporización pasar x=0

- Mientras (while) x=1 realizar el programita del tren de pulsos

- Cuando finalice la temporización hacer un delay_ms() para el tiempo de silencio.

- Idem para otras temporizaciones.

No sé si entenderás la idea, de palabra es un poco complicado de entender.

Un saludo

Desconectado Kamus23

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 63
RE: Retardos???
« Respuesta #3 en: 01 de Abril de 2005, 09:33:00 »
No entiendo muy bien como usar los registros para que se ejecuten por un cierto tiempo...
supongamos que:

inicio:
         output_low(PIN_x);
         delay_ms(20); //frecuencia pulso bajo
         output_hoigh(PIN_x);
         delay_ms(20);//frecuencia pulso alto total 40ms
         
como hago para que esto se repita por 4seg y luego lo desactivo por 1seg...
para desactivarlo es facil solo:
        output_low(PIN_x);
        delay_ms(1000);

pero el problem es para hacer el bucle de 4seg... noc conq valor cargar los registros auxiliares....

uso el 16f877 a 20mhz

Kamus de Acuario

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Retardos???
« Respuesta #4 en: 01 de Abril de 2005, 11:46:00 »
Una forma sería usando interrupción del TMR como te he comentado antes. La verdad es que sin el programita quizá sea dificil de comprender.

Otra forma:

En el ejemplo que propones quieres repertir esos "40ms" durante 4000ms, por lo tanto tendrás que repetir la secuencia 100 veces:

for (n=0;n<100;n++)
{
output_low(PIN_x);
delay_ms(20);
output_hoigh(PIN_x);
delay_ms(20);
}

Un saludo


 

anything