Autor Tema: problema con interrupcion  (Leído 2766 veces)

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

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
problema con interrupcion
« en: 01 de Marzo de 2006, 21:23:00 »
Hola amigos, haber si me dan una manito con este problema, he armado el siguiente circuito en proteus



Cada vez que presiono el interruptor los leds avanzan un numero en binario por las salidas de RA0 a RA3, Primero use la interrupcion de RB0 sin ningun problema, luego cambie por la interrupcion de RB4 a RB7, es aqui que cuando presiono el interruptor RB4 o RB5 el circuito empieza a incrementar la cuenta pero no se detiene. He probado varias combinaciones y nada. Lo unico que me funciono fue desactivar la interrupcion pero luego no me permite activarla. Aqui adjunto el codigo

   list   P=16F84
   include   "P16F84a.inc"

   org   0
   goto   inicio
   org   4

   btfsc   INTCON,RBIF      ;cambio por INTF de RB0
   goto   intext
   retfie

intext   incf   PORTA,1
   bcf   INTCON,RBIF      ;cambio por INTF de RB0
   retfie

inicio   bsf   STATUS,RP0
   movlw   b"11110000"
   movwf   TRISA
   movlw   b"11111111"
   movwf   TRISB
   bcf   OPTION_REG,NOT_RBPU        ;activo las resistencias
   bcf   OPTION_REG,INTEDG             ;uso el flanco de bajada
   bcf   STATUS,RP0

   movlw   b"00000000"
   movwf   PORTA

   bsf   INTCON,GIE
   bsf   INTCON,RBIE      ;cambio por INTE de RB0

fin   goto   fin

   end

la verdad ye se me acabaron las ideas de que hacer. Alguna sugerencia?
“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 Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
RE: problema con interrupcion
« Respuesta #1 en: 02 de Marzo de 2006, 05:49:00 »
Hola veguepic!

No creo que sea por eso pero... sería recomendable que en el vector de interrupciones salvaras los registros W, STATUS y PCLATH.

Así te evitarás algún problema que otro en el futuro.


Un saludo desde Alicante.

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
RE: problema con interrupcion
« Respuesta #2 en: 04 de Marzo de 2006, 08:24:00 »
Gracias por la respuesta:

Por favor me podrias poner una sugerencia de codigo, pues he leido lo de PCLATH
y STATUS pero no menciona como hacerlo.

“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 mmonterei

  • PIC10
  • *
  • Mensajes: 49
RE: problema con interrupcion
« Respuesta #3 en: 04 de Marzo de 2006, 15:37:00 »
Hola veguepic, yo tuve un problema parecido en una simulacion con el MPLAB y la solucion paso por realizar una lectura del puerto B dentro de la rutina de interrupcion y problema resuelto. Por lo visto es una caracteristica especial de comportamiento de la interrupcion por este puerto que no se explicarte pero a mi me funciono.
saludos.

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
RE: problema con interrupcion
« Respuesta #4 en: 04 de Marzo de 2006, 16:25:00 »
Gracias mmonterei por el dato, lo pruebo de inmediato.


“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 Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
RE: problema con interrupcion
« Respuesta #5 en: 04 de Marzo de 2006, 20:33:00 »
Hola veguepic!

Mira esto a ver que te parece.
Antes de meternos con las interrupciones nos grabamos en unas variables temporales los registros W,STATUS y PCLATH.
Despues ponemos nuestro código de interrupción y acto seguido recuperamos y el valor que tenían W,STATUS y PCLATH para que... cuando volvamos al programa principal, estos registros sigan siendo los mismos que justo antes de llamar a la interrupción.


Codigo:


-------- 16F84A --------
    list    p=16F84A        ; list directive to define processor
    #include <p16F84A.inc>  ; processor specific variable definitions

w_temp      EQU     0x0C    ; variable used for context saving
status_temp EQU     0x0D    ; variable used for context saving
pclath_temp EQU    0x0E

    ORG     0x004           ; interrupt vector location
    movwf   w_temp          ; save off current W register contents
    movf    STATUS,w        ; move status register into W register
    movwf   status_temp     ; save off contents of STATUS register
    movf        PCLATH,w        ;save PCLATH
    movwf        pclath_temp


; isr code can go here or be located as a call subroutine elsewhere

    movf        pclath_temp,w   ;restore PCLATH
    movwf        PCLATH

    movf    status_temp,w   ; retrieve copy of STATUS register
    movwf   STATUS          ; restore pre-isr STATUS register contents
    swapf   w_temp,f
    swapf   w_temp,w        ; restore pre-isr W register contents
    retfie                  ; return from interrupt





Suerte!!


Un saludo desde Alicante.

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
RE: problema con interrupcion
« Respuesta #6 en: 04 de Marzo de 2006, 22:17:00 »
Gracias Azicuetano:

La verdad no tenia ni idea que habia que hacer todo este menjunje para la interrupcion, solo nunca lo iba a ver.
“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 Y@el

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 415
RE: problema con interrupcion
« Respuesta #7 en: 06 de Marzo de 2006, 14:30:00 »
Bueno, io que me acuerde....
Entre uno de los Bug"s que le encontre a proteus, estaba este.

Pues puedes depurar tu codigo Paso a paso, y darte cuenta que si mandas la interrupcion por RB4-RB7.... al toque salta  a interrupcion y no se detiene.

Espero equivocarme.... :"-( Pero ami me sucedio asi.

bye

Desconectado mmonterei

  • PIC10
  • *
  • Mensajes: 49
RE: problema con interrupcion
« Respuesta #8 en: 06 de Marzo de 2006, 17:44:00 »
Hola veguepic, prueba leer el puerto B con la siguiente instruccion:
"MOVF PORTB,W"
Ejecutala dentro de la subtrina de interrupcion y antes de poner la bandera correspondiente a la interrupcion a cero y claro esta antes de ejecutar la instruccion "RETFIE".
Saludos.

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
RE: problema con interrupcion
« Respuesta #9 en: 07 de Marzo de 2006, 21:44:00 »
Muchas gracias a todos por sus respuestas.

Luego de probar todas las alternativas propuestas, les comento que con ninguna pude hacer funcionar correctamente la interrupcion. Me inclino a pensar lo que dice yoel, ni bien sale la interrupcion por RB4-RB7 esta no se detiene, la unica forma que he logrado detenerla es desactivando las interrupciones pero luego no puedo activarlas Llorica.

Saben si con otra version no tiene este problema, la mia es la 6.7 SP3.

Creo que este es el segundo bug que le encuentro loco. Agredeceria que postearan los otros bugs que han encontrado para evitarme sorpresas futuras Helado.

Voy a probar las alternativas con un pic de "carne y hueso" para comparar Fumador.

“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