Autor Tema: Rutina para un retardo de 0.5seg  (Leído 6413 veces)

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

Desconectado ErnestAl

  • PIC10
  • *
  • Mensajes: 37
Rutina para un retardo de 0.5seg
« en: 08 de Mayo de 2007, 17:32:10 »
Buenas de nuevo, parece que le he tomado el gusto a esto jejejejej. Con esta rutina puedo obtener un retardo exacto de 0.5seg¿?

retardo                movf      0x32
               movwf      tempi   ;retardo de 10ms realizado 50 veces      
retar               movlw      0xD9     ;mi retardo de partida es un retardo de 10milisegundos
                            movwf      OPTION_REG
                bcf      INTCON,2
Explora0_5            btfss      INTCON,2
               goto      Explora0_5
                decfsz      tempi,1
    goto      retar
   return

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Rutina para un retardo de 0.5seg
« Respuesta #1 en: 08 de Mayo de 2007, 17:52:58 »
Hola ernest:
Exactamente, wzactamnete no tendrás los 0,5sg, pues aunque repitas 50 veces la rutina de 20msg. el tiempo será un poquitin mayor ues las setencias decfsz tempi,1 y goto retar (por cierto debe ser "retardo") consumen unos ciclos maquina que multiplicados por 50 dara unos microsegundos más.
Fermin
Todos los días se aprende algo nuevo.

Desconectado ErnestAl

  • PIC10
  • *
  • Mensajes: 37
Re: Rutina para un retardo de 0.5seg
« Respuesta #2 en: 08 de Mayo de 2007, 17:55:13 »
Entonces como lo podria hacer?????

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Rutina para un retardo de 0.5seg
« Respuesta #3 en: 08 de Mayo de 2007, 18:02:16 »
Hombre depende de la precision que necesites, date cuenta que se está hablando de microsegundos. Tu mismo puedes haver el calculo 50 x los ciclos maquina que consumen las instruciones indicadas (segun sea la frecuencia del cristal que hayas puesto) = tienes el resultado concreto.
Otra forma de realizarlo puede ser  por ejemplo Poniempo en tempi=49 en decimal y rellenado con NOP la cantidad de tiempo que te falte.
Otra es si utilizas el buscador existen programas (ya se han expuesto aqui en el foro) los delay que necesiten, incluso con su correspondiente codigo. Si no recuerdo mal uno se llama PICDELAY. Si encuentro el link te lo pongo
fermin
Todos los días se aprende algo nuevo.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Rutina para un retardo de 0.5seg
« Respuesta #4 en: 08 de Mayo de 2007, 18:13:42 »
Hola de nuevo:

En el link adjunto tienes un gnerador de codigo, pero vamos hay otros muchos. Este en concreto no utiliza el TMR0 como el ejemplo que has puesto, utiliza registos auxuliares. Asi que tu mismo.
http://www.piclist.com/techref/piclist/codegen/delay.htm

Fermin
Todos los días se aprende algo nuevo.

Desconectado ErnestAl

  • PIC10
  • *
  • Mensajes: 37
Re: Rutina para un retardo de 0.5seg
« Respuesta #5 en: 08 de Mayo de 2007, 18:32:23 »
voy a estrujarme un poco los sesos, si quiero aprender assambler necesito controlar los tmr, ahora posteare mis avances, GRACIAS!!!!!

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Rutina para un retardo de 0.5seg
« Respuesta #6 en: 08 de Mayo de 2007, 18:37:01 »
Bueno pues con los TMR para hacer el calculo ya sabes lo que te comenté en el post anterior. Los retardos si la precision no es mu importante, estamos halando de alrederdor de 200microsegundos máximo eso con el ejemplo que has puesto.
Si pones 49 cuentas y antes del goto retardo puedes poner los NOP que te falten hasta que ajustes los 0,segundos.
Bueno si mas adelante necesitas mas ayuda ya sabes donde encontrarnos.
Fermin
Todos los días se aprende algo nuevo.

Desconectado ErnestAl

  • PIC10
  • *
  • Mensajes: 37
Re: Rutina para un retardo de 0.5seg
« Respuesta #7 en: 08 de Mayo de 2007, 18:45:41 »
He subido el tiempo de retardo a 1seg y usando un cristal de 4Mhz la rutina se queda de la siguiente manera:
retardo         
            movlw      D'15'
            movwf      temp
            clrf      TMR0
            bcf         INTCON,T0IF
   retardo_2   btfss      INTCON,T0IF
            goto      retardo_2
            decfsz      temp,f
            goto      retardo_3
            return
   retardo_3   bcf         INTCON,T0IF
            goto      retardo_2

Estoy simulando con proteus pero el cronometro no se corresponde con el retardo, ¿Esta bien?

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Rutina para un retardo de 0.5seg
« Respuesta #8 en: 08 de Mayo de 2007, 19:14:48 »
Si necesitas calcular retardos en ciclos anidados lo mejor es usar un programa que ya viene listo para eso, solo es un ejecutable, se ingresa la velocidad del cristal y el tiempo deseado y el nos genera el código.  De esta forma nos olvidamos de los tiempos y nos preocupamos más por el programa.  Yo lo he usado y aunque no es 100% preciso si da muy buenos resultados.

El uso de los timer ya sería para manejar tiempos pero aprovechando las interrupciones y eso ya es otro cuento.

Adjunto el archivo.

Saludos
Pereira - Colombia

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Rutina para un retardo de 0.5seg
« Respuesta #10 en: 09 de Mayo de 2007, 15:58:41 »
hola ErnestAl

te puedes ayudar con el mplab-sim para saber sobre los tiempos exactos de los retardos.

en esta página hay un programita llamado PICMultiCalc con el que puedes jugar variando la frecuencia del cristal y el timer1 para obtener los tiempos

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek


 

anything