• Martes 5 de Noviembre de 2024, 15:01

Autor Tema:  Retardo En 16f84  (Leído 6941 veces)

jpaler

  • Miembro MUY activo
  • ***
  • Mensajes: 479
    • Ver Perfil
Retardo En 16f84
« en: Lunes 9 de Agosto de 2004, 22:14 »
0
Hola a todos  ! ! !

Quisiera saber como hago un retardo de aproximadamente de
1 o 2 (o lo que sea) segundos para el pic-16f84...

Creo que se utiliza algo llamdo 'perro guardian', pero en
verdad no se que és ni como se trabaja, me gustaria que
fuera lo mas sencilla posible, pero si es necesario hacer
uso del 'perro guardian' no importa, lo k importa es que sea
facil de entender.

gracias a todos  ! ! !

kimera

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Retardo En 16f84
« Respuesta #1 en: Lunes 9 de Agosto de 2004, 23:32 »
0
HOLA COMO TE VA ESPERO QUE BIEN BUSCA POR INTERNET UN PROGRAMITA QUE TE CALCULA LOS TIEMPO QUE VOS NESECITAS SE LLAMA PICLOOP

:hola:   KIMERA

oldkami

  • Miembro activo
  • **
  • Mensajes: 50
    • Ver Perfil
Re: Retardo En 16f84
« Respuesta #2 en: Martes 10 de Agosto de 2004, 00:20 »
0
El retardo mas facil y comun es el que se hace mediante bucles anidados. un ejemplo sencillo:


   cblock  0x20
   CONT1
   endc

    movlw      k
   movwf      CONT1
Bucle:
   decfsz      CONT1,F
   goto         Bucle
   .
   .
   .
   END

para calcular el tiempo del retardo entonces:


operacion                             num ciclos

movlw   k                              1
movwf                                   1
decfsz  CONT1,F                     k-1     (mientras CONT1 no llegue a 0)
decfsz  CONT1,F                     2        (por el salto al llegar CONT1 a 0)
goto     Bucle                         2*(k-1)

total                                     (3*k) + 1  ciclos

cada ciclo maquina toma 1 microsegundo si el XTAL es de 4mhz.
como k no puede ser mayor que 255 el numero obtendras un maximo de
766 microsegundos con este retardo basico.

 para 1 segundo se necesitan 1 millon de ciclos, asi que se debe anidar este retardo a su maximo en uno mayor entonces:

   cblock  0x20
   CONT1
   CONT2
   endc


   movlw      k2
   movwf      CONT2
Bucle_2:
   movlw      k1          
   movwf      CONT1
Bucle:
   decfsz      CONT1,F
   goto         Bucle
   
   decfsz      CONT2,F
   goto         Bucle_2
   .
   .
   .
   END

asi

operaciones                          ciclos

 movlw k2                               1
 movwf CONT2                        1
 movlw  k1                             k2-1    
 movwf  CONT1                      k2-1
 decfsz   CONT1,F                   (k2-1)*(k1-1) (mientras no llegue a 0)
 decfsz   CONT1,F                   2 * (k2-1)        (al llegar a 0)
 goto      Bucle                       2 * (K2-1)*(k1-1)
 decfsz   CONT2,F                   k2-1            (mientras no llegue a 0)
 decfsz   CONT2,F                   2                   (al llegar a 0)
 goto      Bucle_2                    2* (k2-1)


TOTAL                                  4 + ((k2-1)*(4 + 3k1))  ciclos

si reemplazamos k1 =255 y k2 =255 tenemos  un total de 195330 microsegundos, aproximadamente 0.2 segundos, sera necesario hacer un 3 bucle.

Bien, siguiendo este ejemplo yo creo que ya podras acabar 3 el bucle tu mismo para completar el de 1, 2 o tantos segundos como quieras.


por otro lado cabe aclarar que el "perro guardian" se usa como medida de seguridad, ya que por X o Y circunstancia el programa de nuestro PIC puede dejar de operar (por ejemplo entrar en un bucle infinito), esto seria catastrofico en un sistema de control. al usar el perro guardian se le configura un tiempo de acción, despues del tiempo programado, el "Perro guardian" realiza un "Reset" del programa. para evitar que el perro guardian reinicie nuestro programa a cada instante,  hay que "patearlo" (kick the dog) es decir colocar en segmentos del codigo la funcion "clrwdt" para que se ejecute y no permita que el contador del perro guardian alcance el limite.

espero que esto te sea de alguna ayuda.

karen81

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Retardo En 16f84
« Respuesta #3 en: Martes 10 de Agosto de 2004, 06:24 »
0
:) Hola, como dice Kimera hay un programa para calcular retardos lo puedes descargar en http://www.todopic.com.ar/
te metes donde dice utiles ahi hay varios programas pero el que necesitas es calcular_retardos.zip. solo le colocas el tiempo que necesitas en milisegundos y la frecuencia del reloj de el pic que estas usando y  le das calcular ciclos y finalmente generar codigo y ya!! aparece tu codigo con diferentes instrucciones y lazos bastante eficientes que te generan el retardo deseado.

 :comp:
No basta tener buen ingenio; lo principal es aplicarlo bien.

jpaler

  • Miembro MUY activo
  • ***
  • Mensajes: 479
    • Ver Perfil
Re: Retardo En 16f84
« Respuesta #4 en: Martes 10 de Agosto de 2004, 18:57 »
0
Muchisimas gracias a todos por contestarme y tener paciencia con las preguntas de los novatos  . . .