TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: kain589 en 05 de Enero de 2006, 17:33:00

Título: Ayuda con el tmr1 del 16f876
Publicado por: kain589 en 05 de Enero de 2006, 17:33:00
He estado intentando hacer una rutina que me temporice 10 segundos, esto lo intento realizar temporizando 50ms con el timer1 y con un contador cuyo valor es 200,se decrementa cada vez y cuando es 0 la salida debe bascular, pero no lo hace y no se cual puede ser el problema. A ver si alguien puede ayudarme, muchas gracias
Codigo:
list p = 16f876;no funciona
#include <p16f876.inc>
;temporiza y parpadea portb,0
CONTADOR   EQU   20H
TRANSICION   EQU 21H

ORG 00H
   GOTO INICIO
   ORG   04H
   BCF      PIR1,0;Borro bandera
   DECFSZ   CONTADOR
   GOTO    CONTINUA;Va a retornar de la int,
   BSF      TRANSICION,0
   GOTO   VERSAL
VERSAL
   MOVLW   0C8H
   MOVWF   CONTADOR
   BTFSS   PORTB,0;Analiza la salida
   GOTO    ACTIVAR;Va a activar salida
   BCF      PORTB,0;DESACTIVA
CONTINUA   
   RETFIE
ACTIVAR
   BSF      PORTB,0;activa
   RETFIE
   
INICIO
   BCF      STATUS,6
   BSF      STATUS,5;banco 1
   CLRF   TRISB;B  SALIDA
   MOVLW   01H;HABILITA TMR1E
   MOVWF   PIE1
   MOVLW   0C0H;
   MOVWF   INTCON;HABILITA GIE Y PERIFERICOS
   BCF      STATUS,5;BANCO 0
   CLRF   PORTB
   BSF      PORTB,1;COMPROBAR SI FUNCIONA EL PROGRAMA
TIEMPO
   BCF      T1CON,0
   MOVLW   0DCH
   MOVWF   TMR1L;CARGA TIMER1BAJO
   MOVLW   0BH
   MOVWF   TMR1H;CARGA TIMER1ALTO
   MOVLW   31H
   MOVWF   T1CON;PRESCALER 8 Y ACTIVA
NADA
   GOTO   NADA
   GOTO   TIEMPO
   
   END


Tras ejecutarse la interrupcion el puntero se cargara apuntanto a la siguiente instruccion ,asi saldra del bucle nada y se ira a tiempo. de todas formas por si esto no es asi lo he intentado configurando de nuevo el timer1 antes de retornar de la interrupcion y tampoco me ha funcionado
Título: RE: Ayuda con el tmr1 del 16f876
Publicado por: PAOLA09 en 06 de Enero de 2006, 08:06:00
HOLA

YO LO HE PROBADO EN EL MPLAB Y ME CORRE BIEN, UN DETALLE QUE TE PUEDE ESTAR AFECTANDO ES QUE TENGAS ACTIVO EL WDT, RECUERDA DESACTIVARLO PARA QUE NO SE SATURE Y GENERE CONFLICTO. DIME SI ESO TE FUNCIONA PARA DADO EL CASO MIRAR QUE OTRA COSA PUEDE ESTAR SUCEDIENDO.
Título: RE: Ayuda con el tmr1 del 16f876
Publicado por: kain589 en 06 de Enero de 2006, 08:56:00
Gracias por tu respuesta, se me olvido anotar que a la hora de programar desactivo el wdt, las que tengo activas son lvp, boden y wrt, y Xt para el cristal de 4 Mhz
Título: RE: Ayuda con el tmr1 del 16f876
Publicado por: antoniof en 06 de Enero de 2006, 12:13:00
No se si lo sabes, pero al activar el LVP, estás desperdiciando una patilla del PIC, en tu caso, la RB3/PGM, que además debe tener una resistencia de pulldown a masa. Si realmente no programas el PIC en bajo voltage, desactiva este FUSE. El boden también lo suelo desactivar que ma dao más problemas que soluciones.
Título: RE: Ayuda con el tmr1 del 16f876
Publicado por: kain589 en 06 de Enero de 2006, 13:17:00
Gracias por la informacion, no lo sabia. Ahora lo he programado asi y tambien sigue sin funcionar, creo que se debe a que el pic cae en un bucle del que no sale. Si lo configuras como salida no pierdes ninguna patilla,no? o habré estado forzando al pic
Título: RE: Ayuda con el tmr1 del 16f876
Publicado por: antoniof en 06 de Enero de 2006, 16:38:00
Esa patilla la pierdes de todas formas, ya que es la que sustituye al MCLR en la programación en bajo voltaje. Con el fuse LVP activado, la patilla RB3 no existe, ni como entrada ni como salida.

En tu programa tienes un fallo. Cada vez que la interrupción del timer salte, debes recargar el valor del timer a 50ms, si no lo haces, la primera interrupción te saltará a los 50ms, pero las demás tardarán todo el timer en volverse a activar, ya que cuando vuleves de la interrupción el micro sigue ejecutando el bucle "nada goto nada". Después de una interrupción siempre se sigue el programa por donde iva y nunca a la instrucción siguiente, por lo tanto no salta nunca al "goto tiempo".
Título: RE: Ayuda con el tmr1 del 16f876
Publicado por: kain589 en 06 de Enero de 2006, 19:23:00
Gracias por tu ayuda, te lo decia porque yo he usado antes el lvp y el puerto b para sacar datos y no me habia pasado nada. Lo de la recarga tambien lo valore pero tampoco me iba,seria algo asi:

Codigo:
ORG 00H
   GOTO INICIO
   ORG   04H
   BCF      PIR1,0;Borro bandera
   DECFSZ   CONTADOR
   GOTO    RETORNA;Va a retornar de la int,
   BSF      TRANSICION,0
   GOTO   VERSAL
VERSAL
   MOVLW   0C8H
   MOVWF   CONTADOR
   BTFSS   PORTB,0;Analiza la salida
   GOTO    ACTIVAR;Va a activar salida
   BCF      PORTB,0;DESACTIVA
                GOTO    RETORNA
ACTIVAR
   BSF      PORTB,0;activa
   GOTO RETORNA
RETORNA                
               BCF   T1CON,0
   MOVLW   0DCH
   MOVWF   TMR1L;CARGA TIMER1BAJO
   MOVLW   0BH
   MOVWF   TMR1H;CARGA TIMER1ALTO
   MOVLW   31H
   MOVWF   T1CON;PRESCALER 8 Y ACTIVA
                RETFIE


Edito:
Ya lo he conseguido hacer funcionar, tenia varios fallos. Para empezar el timer1 temporizaba 500 milisegundos y no 50, no se xq me equivoque; y ademas el contador hay que configurarlo junto al temporizador, ya que si no la primera vez toma un valor cualquiera
Título: RE: Ayuda con el tmr1 del 16f876
Publicado por: FixxxerMetal en 23 de Febrero de 2006, 17:55:00
Escrito originalmente por antoniof
No se si lo sabes, pero al activar el LVP, estás desperdiciando una patilla del PIC, en tu caso, la RB3/PGM, que además debe tener una resistencia de pulldown a masa. Si realmente no programas el PIC en bajo voltage, desactiva este FUSE. El boden también lo suelo desactivar que ma dao más problemas que soluciones.


Como eseso que se desperdicia una pata del pic? para que sirve el LVP y el BODEN? la resistencia de pull down se coloca solamente cuando se activa el LVP? a que se debe?
Título: RE: Ayuda con el tmr1 del 16f876
Publicado por: maunix en 23 de Febrero de 2006, 20:32:00
Escrito originalmente por FixxxerMetal
Escrito originalmente por antoniof
No se si lo sabes, pero al activar el LVP, estás desperdiciando una patilla del PIC, en tu caso, la RB3/PGM, que además debe tener una resistencia de pulldown a masa. Si realmente no programas el PIC en bajo voltage, desactiva este FUSE. El boden también lo suelo desactivar que ma dao más problemas que soluciones.


Como eseso que se desperdicia una pata del pic? para que sirve el LVP y el BODEN? la resistencia de pull down se coloca solamente cuando se activa el LVP? a que se debe?


FixxxerMetal fijate aquí , ya te he respondido tu duda.

http://miarroba.com/foros/ver.php?foroid=6510&temaid=4911605