Autor Tema: problemas con inicializar el TIMER1 en un 16f876  (Leído 4853 veces)

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

Desconectado bones18

  • PIC12
  • **
  • Mensajes: 54
problemas con inicializar el TIMER1 en un 16f876
« en: 10 de Noviembre de 2006, 10:49:56 »
Wuenas..

estoy intentando inicializar el timer1 y no hay manera. Solo tiene que temporizar de 0x0000 a 0xFFFF y una vez activado el flag encender 2 leds colocados en PORTA,0 y PORTA,1. Por ahora no me hace falta restaurar los valores de recarga ni el flag.  Este es mi codigo:

ORG    0         ; El programa comienza en la dirección 0.
   goto Inicio
ORG 0x04
   goto INTER


INTER
;pongo a 0 el flag, aunque no hace falta
bcf PIR1,0

;Enciendo los LEDS
bsf PORTA,0
bsf PORTA,1
retfie


Inicio
   
   ;BANCO 1
   bsf   STATUS,RP0      ; Acceso al Banco 1.
   clrf   TRISA      ;PUERTO A como salida
   bcf   STATUS,RP0      ; Acceso al Banco 0.
   bcf PORTA,0
   bcf PORTA,1
   ;Paramos el timer 1
   movlw 0x00
   movwf T1CON
      ;ponemos a 0 los valores de recarga
   clrf TMR1L
   clrf TMR1H
   ;ponemos a 0 el flag
   bcf   PIR1,0
   ;activamos la interrupciones
   bsf INTCON,6
   ;activamos la interrupcion del timer1
   bsf   STATUS,RP0      ; Acceso al Banco 1.
   bsf PIE1,0
   ;activemos el timer1
   bcf   STATUS,RP0      ; Acceso al Banco 1.
   bsf T1CON,0
   goto Principal
   
Principal

   goto    Principal      ; Crea un bucle cerrado e infinito.

END            ; Fin del programa.



tenias alguna idea de que puede fallar?

GRACIAS

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: problemas con inicializar el TIMER1 en un 16f876
« Respuesta #1 en: 10 de Noviembre de 2006, 13:37:19 »
Hola amigo:

Creo que te falta en la cabecera del programa indicarle al compilador que tipo de micro vas a utilizar. Además falta el include con los registros de micro
Todos los días se aprende algo nuevo.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: problemas con inicializar el TIMER1 en un 16f876
« Respuesta #2 en: 10 de Noviembre de 2006, 13:43:12 »
Hola de nuevo:
En concreto las lineas de código seria:
LIST   P=16F876            ; usar PIC 16F84A   
#include <p16f876.inc>    
Despues la palabra de configuracion que puede ser una como por ejemplo:
__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC   ; code protec      off                     ; power up timer   on                     ; watchdog      off                     ; osc         XT
Todos los días se aprende algo nuevo.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: problemas con inicializar el TIMER1 en un 16f876
« Respuesta #3 en: 10 de Noviembre de 2006, 15:19:22 »
hola bones18, te faltaron 3 detalles:

- PONER INTCON,GIE es decir, habilitar las interrupciones de todo el micro, solo habilitaes el timer1, perotambien se tien q poner a 1 este bit q gobierna a todas las interrupciones.

- CONFIGURAR PORTA COMO DIGITAL, pues si no lo anuncias el micro lo pondra como analogo pues ahi estan los conversores A/D. esto aparte del TRISA.

- ORDENAR TU CODIGO, observa como se dbee alinear todo el codigo, las etiquetas van pegadas al margen y las intrucciones van espaciadas, para una mejor ilustracion pongo tu rpograma con los añadido para q funcione bien.  :mrgreen:

Código: ASM
  1. ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  2. ;***************************************************************************************************
  3. ;
  4. ;                                                                               Emcabezado del PIC
  5. ;
  6.                 LIST            P=16F876
  7.                 #INCLUDE        "P16F876.INC"
  8.                 __CONFIG _CP_ALL & _DEBUG_OFF & _PWRTE_ON & _CPD_OFF & _WDT_OFF & _BODEN_OFF & _LVP_OFF & _XT_OSC
  9.                 ERRORLEVEL -302,-306
  10.                 RADIX           HEX
  11. ;
  12. ;***************************************************************************************************
  13. ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  14. ;
  15.                 ORG     0         ; El programa comienza en la dirección 0.
  16.                 goto    Inicio
  17.                 ORG     0x04
  18.                 goto    INTER
  19.  
  20.  
  21. INTER;pongo a 0 el flag, aunque no hace falta
  22.                 bcf     PIR1,0
  23.                 ;Enciendo los LEDS
  24.                 bsf     PORTA,0
  25.                 bsf     PORTA,1
  26.                 retfie
  27.  
  28.  
  29. Inicio  ;BANCO 1
  30.                 bsf     STATUS,RP0      ; Acceso al Banco 1.
  31.                 movlw   0X06
  32.                 movwf   ADCON1
  33.                 clrf    TRISA      ;PUERTO A como salida
  34.                 bcf     STATUS,RP0      ; Acceso al Banco 0.
  35.                 bcf     PORTA,0
  36.                 bcf     PORTA,1
  37.                 ;Paramos el timer 1
  38.                 movlw   0x00
  39.                 movwf   T1CON
  40.               ;ponemos a 0 los valores de recarga
  41.                 clrf    TMR1L
  42.                 clrf    TMR1H
  43.                 ;ponemos a 0 el flag
  44.                 bcf     PIR1,0
  45.                 ;activamos la interrupciones
  46.                 bsf     INTCON,6
  47.                 ;activamos la interrupcion del timer1
  48.                 bsf     STATUS,RP0      ; Acceso al Banco 1.
  49.                 bsf     PIE1,0
  50.                 ;activemos el timer1
  51.                 bcf     STATUS,RP0      ; Acceso al Banco 1.
  52.                 bsf     T1CON,0
  53.                 bsf             INTCON,GIE;nuevo!!!!
  54.                 goto    Principal
  55.    
  56. Principal
  57.                 goto    Principal      ; Crea un bucle cerrado e infinito.
  58.        
  59.                 END            ; Fin del programa.

el assembler  es un lenguaje muy detalloso pero tienes el control absoluto del micro, exitos!  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: problemas con inicializar el TIMER1 en un 16f876
« Respuesta #4 en: 10 de Noviembre de 2006, 15:49:55 »
- CONFIGURAR PORTA COMO DIGITAL, pues si no lo anuncias el micro lo pondra como analogo pues ahi estan los conversores A/D. esto aparte del TRISA.

micro_cadaver es una buena costumbre pero no estrictamente necesario.  De hecho se puede usar el puerto como salida y si se lo pone en 1, sacará un 1.

Creo que el problema está donde has dicho tú antes, en la habilitación del GIE.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: problemas con inicializar el TIMER1 en un 16f876
« Respuesta #5 en: 11 de Noviembre de 2006, 00:57:31 »
si es verdad, exagere un poco jiji, pero es una buena costumbre dejarlo bien definido para luego si hay errores no tener q ver en toooodooo el codigo .  :mrgreen:
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado bones18

  • PIC12
  • **
  • Mensajes: 54
Re: problemas con inicializar el TIMER1 en un 16f876
« Respuesta #6 en: 12 de Noviembre de 2006, 05:24:50 »
wuenas...

me olvidé de copiar la cabecera, pero estaba alli desde el principio

   __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
   LIST      P=16F876
   INCLUDE  <P16F876.INC>

por otra parte, he activado las interrupciones(ya las habia activado anteriormente pero tampoco no funcionaba). El codigo ha quedado asi, pero siguen sin encenderse los leds :-(

__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
   LIST      P=16F876
   INCLUDE  <P16F876.INC>

ORG    0         ; El programa comienza en la dirección 0.
   goto Inicio
ORG 0x04
   goto INTER


INTER
;pongo a 0 el flag, aunque no hace falta
bcf PIR1,0

;Enciendo los LEDS
bsf PORTA,0
bsf PORTA,1
retfie


Inicio
   
;BANCO 1
   bsf   STATUS,RP0      ; Acceso al Banco 1.
   clrf   TRISA      ;PUERTO A como salida
   bcf   STATUS,RP0      ; Acceso al Banco 0.
   bcf PORTA,0
   bcf PORTA,1
;Paramos el timer 1
   movlw 0x00
   movwf T1CON
;ponemos a 0 los valores de recarga
   clrf TMR1L
   clrf TMR1H
;ponemos a 0 el flag
   bcf   PIR1,0
;activamos la interrupciones, el GIE
   bsf INTCON,7
;activamos la interrupcion del timer1
   bsf   STATUS,RP0      ; Acceso al Banco 1.
   bsf PIE1,0
;activemos el timer1
   bcf   STATUS,RP0      ; Acceso al Banco 1.
   bsf T1CON,0
   goto Principal
   
Principal

   goto    Principal      ; Crea un bucle cerrado e infinito.

END            ; Fin del programa.



el programa es muy sencillo pero nose encontrarle el error

adios!

Desconectado Manofwar

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 156
Re: problemas con inicializar el TIMER1 en un 16f876
« Respuesta #7 en: 12 de Noviembre de 2006, 07:04:36 »
Hola bones

Creo que tu problema está en esta línea

;activamos la interrupciones, el GIE
   bsf INTCON,7

Estas activando las interrupciones generales pero no las específicas de los periféricos que se encuentran el el bit 6 del INTCON, cambialo por esto a ver que tal:

;activamos la interrupciones, el GIE
   bsf INTCON,6
   bsf INTCON,7


Saludos desde Almería, España

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: problemas con inicializar el TIMER1 en un 16f876
« Respuesta #8 en: 12 de Noviembre de 2006, 07:30:50 »
Para usar la interrupcion de Timer1 te falta habilitar el INTCON,PEIE.
Joder! que me descuido 2 min y me ganan de mano! :D :D

Saludos.
« Última modificación: 12 de Noviembre de 2006, 07:38:01 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado bones18

  • PIC12
  • **
  • Mensajes: 54
Re: problemas con inicializar el TIMER1 en un 16f876
« Respuesta #9 en: 12 de Noviembre de 2006, 07:45:42 »
y se hizo la luz!!


gracias!

el problema era q no activaba las interrupciones generales y las de los perifericos a la vez.


yata! gracias!

Desconectado emuphone

  • PIC10
  • *
  • Mensajes: 6
Re: problemas con inicializar el TIMER1 en un 16f876
« Respuesta #10 en: 19 de Octubre de 2007, 16:01:13 »
Hola gente del foro, estoy con un problema similar a este post que encontré con el buscador.
Estoy haciendo unas pruebas con el pic 16F877. Quiero usar el timer 1 para encender y apagar un led del port E, o sea pasado un tiempo lo enciendo y pasado otro tiempo similar lo apago. En la simulacion con el MPLAB funciona pero en la placa no. El codigo es el siguiente:

       LIST   P=PIC16F877
       #INCLUDE <P16F877.INC>    ;definiciones del uC
       __CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _LVP_OFF & _CPD_OFF

       ERRORLEVEL -306, -302, -307
       
              CBLOCK  0x020
              delay
              led
              fin
              ENDC
              
                 org 0x00
             
              goto INICIO
             
                 org 0x04
                 bcf      STATUS,RP0      ;banco 0
                 bcf      STATUS,RP1
               movlw   0x0b         ;vuelvo a cargar los valores iniciales
            movwf   TMR1H         ;del timer 1
            movlw   0xdb
            movwf   TMR1L
            bcf      PIR1,TMR1IF      ;borro flag de desbordamiento del timer1
            bsf      INTCON,GIE      ;activo la interrupcion global           
                 decfsz    delay,f         ;decremento delay y si no es cero   
                 return               ;retorna
            btfsc   led,0         ;verifico si el flag del led esta a 0
            goto   LED_1         ;el flag de led esta a uno entonces salto a LED_1
            bsf      PORTE,0      ;activo el led del PORTE,0
            movlw   0x06         ;recargo el registro delay
            movwf   delay
            bsf      led,0         ;activo el flag de led
                 return               ;retorno
LED_1         
            bcf      PORTE,0         ;apago el led del PORTE,0
            movlw   0x06         ;recargo el registro delay      
            movwf   delay
            bcf      led,0         ;borro el flag de led
                 return               ;retorno
INICIO           
            bcf      STATUS,RP0   ;banco 0
                 bcf      STATUS,RP1   ;banco 0
            clrf   led         ;borro el registro del estado del led usado como flag
            clrf   fin         ;registro usado para mantener un bucle infinito
            movlw   0x06      ;cargo a delay con 6
            movwf   delay      ;
            movlw   B'00000000'   ;borro todos los flags aunque solo
            movwf   PIR1      ;uso el TMR1IF
            movlw   B'00000000'   ;latch del PORTE=0
            movwf   PORTE      ;
            bsf      STATUS,RP0   ;banco 1
            movlw   B'10000111'   ;configuro los puertos A y E como
            movwf   ADCON1      ;I/O digitales
            movlw   0x00      ;configuro todos los puertos como salidas
            movwf   TRISA
            movwf   TRISC
            movwf   TRISD
            movwf   TRISE            
            movwf   TRISB
            movlw   0x01      ;activo permiso de interrupcion para el
            movwf   PIE1      ;desbordamiento del TMR1
            bcf      STATUS,RP0   ;banco 0
               movlw   0x0b      ;cargo el valor de inicio del timer 1
            movwf   TMR1H      ;de los registros TMR1H
            movlw   0xdb      ;y TMR1L
            movwf   TMR1L
               movlw   B'00110101'   ;rango del divisor 1:8 , modo temporizador
                 movwf   T1CON      ;e inicio del timer
            movlw   B'11000000'   ;permiso de los perifericos que no se controlan con INTCON y
            movwf   INTCON      ;permiso de interrupcion global
            bcf      PORTE,0      ;LED del PORTE,0 apagado
            bcf      led,0      ;flag de led a 0
VERIF1         btfss   fin,0      ;bucle infinito ya que fin,0 nunca sera =1
            goto   $-1
SALIR         nop
            END

No se si me olvidé de setear algún bit, tal vez en el datasheet haya alguna cita que yo no haya leido. O quizas el pic no funcione bien o el xtal este defectuoso. Asi que recurro a uds a ver si le encuentran algo mal al codigo.   

Gracias de antemano.         

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: problemas con inicializar el TIMER1 en un 16f876
« Respuesta #11 en: 20 de Octubre de 2007, 15:55:40 »
Hola emuphone. Lo que te debe de estar pasando, es la pesadilla de todos, los ruidos electricos. Chequea el hardware y filtralo con todo. Ve al post hablemos de ruuuuido y fijate como filtrarlo.

Saludos.  :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado emuphone

  • PIC10
  • *
  • Mensajes: 6
Re: problemas con inicializar el TIMER1 en un 16f876
« Respuesta #12 en: 21 de Octubre de 2007, 14:56:41 »
Gracias por responder Leon Pic. Efectivamente es asi, el circuito tiene ese enorme problema de ruido. Me di cuenta que al acercar la mano cerca del pic recién ahi encendia el led. Me habia armado la rrboard2 que se trato en este foro con el orcad y no hice los planos a tierra y esto lo estoy pagando muy caro.

Saludos y gracias.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: problemas con inicializar el TIMER1 en un 16f876
« Respuesta #13 en: 21 de Octubre de 2007, 15:47:00 »
Lamento mucho leer eso, lo de los planos de tierra. Después de un par de años haciendo diseños hay cosas que no se deben pasar por alto.  :?

Como dice Leon Pic pásate por Hablemos de Ruuuuido. Su contenido debería ser de obligado cumplimiento. ja ja  :D :D

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado emuphone

  • PIC10
  • *
  • Mensajes: 6
Re: problemas con inicializar el TIMER1 en un 16f876
« Respuesta #14 en: 24 de Octubre de 2007, 14:28:29 »
Gracias por las respuestas. El post que trata sobre ruidos es muy bueno. En cuanto al circuito ya pude determinar donde estaba el error gracias al ruido. Resulta que el pin de #Mclr no estaba a Vcc a traves de una resistencia sino a masa (yo estaba seguro de que estaba a VCC) y cuando  yo acercaba la mano al pic se producia ruido que hacia que el pic funcione y cuando sacaba la mano otra vez se reseteaba el pic. Asi que la rrboard2 de RedPic ahora funciona correctamente.

Recomiendo el post de Hablemos de Ruuuuido.
Saludos.