TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: ErnestAl en 21 de Junio de 2007, 19:08:18

Título: Retardo de 500seg usando el TIMR1
Publicado por: ErnestAl en 21 de Junio de 2007, 19:08:18
Buenas, estoy tratando de implementar un retardo de 500segundos usando el Timr1 para comprender las interrupciones, ¿se podria realizar?. Yo lo he intentado pero no consigo encender la bombilla en proteus a los 8minutos, ¿donde puede estar el fallo?
         list  p=16f877
         #include <p16f877.inc>
         
         conta      equ      0x20
         conta1      equ      0x21
         
         org      0x00
         nop
         goto   main
         org      0x04
         goto   inter

main      
          movlw   b'10111010'
         movwf   conta
         movlw   b'00000011'
         movwf   conta1
         bsf      STATUS,RP0
         BCF      STATUS,RP1
         CLRF   TRISB
         CLRF   INTCON         
         CLRF   PIE1
         CLRF   PIE2
         MOVLW   B'11000000'
         MOVWF   INTCON
         BSF      PIE1,TMR1IE
         BCF      STATUS,RP0
         MOVLW   B'00110000'
         MOVWF   T1CON
         CLRF   PORTB
BUCLE      BSF      T1CON,TMR1ON         
          GOTO   BUCLE

         



inter      DECFSZ   conta,f
         GOTO   SALIDA
         DECFSZ   conta1,f
         GOTO   SALIDA
         GOTO   FIN



SALIDA      BCF      PIR1,TMR1IF
         RETFIE

FIN         BSF      STATUS,RP0
         CLRF   INTCON
         BCF      T1CON,TMR1ON
         MOVLW   0XFF
         MOVWF   PORTB
         RETFIE

END
Título: Re: Retardo de 500seg usando el TIMR1
Publicado por: dhmejia en 21 de Junio de 2007, 19:32:28
Los tiempos en proteus no son reales, 8 minutos pueden demorarse una eternidad dependiendo del computador, si quieres verificar el funcionamiento de tu código yo te aconsejo que montes el circuito o que simules con el MPLAB SIM que es muy exacto, no tienes que esperar los 8 minutos, solo verifica el tiempo en que salta la interrupción del timer.  O si eres paciente puedes esperar los 8 minutos.

Saca la instrucción de encendido del timer del bucle infinito, solo es necesario activarlo una vez

saludos.
Título: Re: Retardo de 500seg usando el TIMR1
Publicado por: ErnestAl en 21 de Junio de 2007, 19:46:34
tambien simulo con mplab, y uso el stopwatch para ver el tiempo, pero m salta cada 2segundos
Título: Re: Retardo de 500seg usando el TIMR1
Publicado por: Leon Pic en 21 de Junio de 2007, 21:43:55
Perdón por lo que voy a decir, pero lo mejor, es en la vida real.

Suerte y saludos  :-/ :-/
Título: Re: Retardo de 500seg usando el TIMR1
Publicado por: micro_cadaver en 22 de Junio de 2007, 02:14:38
yo he simulaod con el proteus tiempos largos de 3 o 4 minutos y si se cumple en la realidad, es que el proteus se peude demorar pero tiene su propio contador o reloj y uno tiene que estar atento a eso. bueno igual ese no es el problema de ErnertAL

Veamos el periodo de desborde de tu timer1, como no has puesto el cristal que usas supondre para 4MHz
periodo = ( 4 * 8 * (FFFF - carga del timer1)  ) / (4 x 10^6)
         
            = ( 8 * 65535 ) / 1000000
               
            = 0.52428 segundos dura en desbordarse el timer1

luego tenemos una sucesión de repeticiones....

periodo * conta = 0.52428 * 186 = 97.51608 segundos

finalmente ....

97.51608 * conta1 = 97.51608 * 3 = 292.54824 segundos esto aproximadamente arroja 4 minutos y unos tantos segundos, pero no llega a 8 minutos.

Título: Re: Retardo de 500seg usando el TIMR1
Publicado por: ErnestAl en 22 de Junio de 2007, 03:10:40
Buenos dias!!!! los valores de esos contadores los hice por lo siguiennte:

R=0.5243---> 500s=B*0.5243
                       B=954 aprox ---> transformado a binario-->1110111010
                                                                          -->como trabajo con registros de 8btis
                                         conta-->10111010
                                         conta1-->00000011
¿Esta mal el contador para realizar la demora?
Título: Re: Retardo de 500seg usando el TIMR1
Publicado por: micro_cadaver en 22 de Junio de 2007, 03:33:34
ahora que lo vuelvo a ver tu codigo segun lo que comentas, pues no cumple lo que dices, intenta esto:

conta = d'10'
conta1 = d'10'

entonces R=0.5... luego
conta * R = 50 segundos finalmente
conta1 * 50 = 500

entonces en la interrupcion:

inter   DECFSZ   conta,f
         GOTO   SALIDA
         MOVLW   D'10'
         MOVWF   conta
         DECFSZ   conta1,f
         GOTO   SALIDA
         MOVLW   D'10'
         MOVWF   conta1
         GOTO   FIN

prueba con eso.
Título: Re: Retardo de 500seg usando el TIMR1
Publicado por: maunix en 22 de Junio de 2007, 08:44:03
Perdón por lo que voy a decir, pero lo mejor, es en la vida real.

Suerte y saludos  :-/ :-/

El simulador del MPSIM realmente es muy preciso.  Por supuesto  es la vida real la que nos indica si el retardo será realmente de 500useg o de 501 o 499.  Eso depende de la desviación de los componentes, etc. 

Si uno tiene una aplicación donde el retardo debe ser 500useg exactos... tal vez haya un grave problema de diseño.

Usar el simulador allana mucho terreno y nos permite ahorrar horas de pruebas y error de la vida real.

Si fuera tan tajante, no se harían simuladores de microprocesadores ni nada por el estilo, que permitan a los diseñadores anticipar el funcionamiento antes de realmente probarlo... cada día más en el mundo se invierte en simuladores de todo tipo porque es la forma más económica y veloz de probar muchas cosas.

Saludos


Título: Re: Retardo de 500seg usando el TIMR1
Publicado por: Leon Pic en 07 de Julio de 2007, 23:35:42
El simulador del MPSIM realmente es muy preciso.  Por supuesto  es la vida real la que nos indica si el retardo será realmente de 500useg o de 501 o 499.  Eso depende de la desviación de los componentes, etc. 

Si uno tiene una aplicación donde el retardo debe ser 500useg exactos... tal vez haya un grave problema de diseño.

Usar el simulador allana mucho terreno y nos permite ahorrar horas de pruebas y error de la vida real.

Si fuera tan tajante, no se harían simuladores de microprocesadores ni nada por el estilo, que permitan a los diseñadores anticipar el funcionamiento antes de realmente probarlo... cada día más en el mundo se invierte en simuladores de todo tipo porque es la forma más económica y veloz de probar muchas cosas.

Saludos




Estoy totalmente de acuerdo.

Saludos  :-/ :-/