Autor Tema: Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?  (Leído 5033 veces)

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

Desconectado Chuk

  • PIC10
  • *
  • Mensajes: 23
Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?
« en: 11 de Febrero de 2010, 19:54:30 »
Hola, tengo un programa que tiene en cuenta las interrupciones externas en RB0 por flanco de subida y un boton en RB4 (uso un PIC 16F84A). En Option_Reg tengo: 01000011 y en INTCON tengo: 10011000

Si debugeo con el isis, nadamas empezar el programa, cuando habilito las interrupciones me hace una interrupcion por apretar el botón en RB4 cuando no me lo tendría que hacer. Qué error hay? Adjunto la imagen del esquematico.

Saludos

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?
« Respuesta #1 en: 11 de Febrero de 2010, 20:38:35 »
Lo que debes hacer antes de habilitar la interrupción por cambio de estado de rb4-rb7, es leer el puerto b y limpiar el flag de esa interrupción, luego si habilitarla.
« Última modificación: 11 de Febrero de 2010, 20:43:54 por pablomanieri »

Desconectado Chuk

  • PIC10
  • *
  • Mensajes: 23
Re: Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?
« Respuesta #2 en: 12 de Febrero de 2010, 11:29:19 »
Pues lo hago y tampoco me funciona, me hace la interrupcion justo después de habilitar el INTCON. justo antes leo el puertoB porque el clear del flag de la interrupcion no hace falta ya que despues meto el vector en el registro INTCON y ya se borra el flag de interrupción no??

Saludos

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?
« Respuesta #3 en: 12 de Febrero de 2010, 11:34:48 »
El flag RBIF lo debes borrar despues de leer el puerto B, no se borra solo.
debes hacer
BCF INTCON,RBIF
creo que ese era el bit.

Desconectado Chuk

  • PIC10
  • *
  • Mensajes: 23
Re: Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?
« Respuesta #4 en: 12 de Febrero de 2010, 11:43:32 »
Si pero para habilitar la sinterrupciones escribo ya el registro INTCON con un 0 en el bit RBIF por lo que me tendría que borrar ese bit sin necesidad de hacer un bcf solo para ese bit no?

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?
« Respuesta #5 en: 12 de Febrero de 2010, 11:46:25 »
No recuerdo ahora si es asi, prueba limpiando ese flag antes de habilitar y luego avisas

Desconectado Chuk

  • PIC10
  • *
  • Mensajes: 23
Re: Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?
« Respuesta #6 en: 12 de Febrero de 2010, 17:06:51 »
Seguimos en las mismas, ni leyendo y haciendo un clear del flag de la interrupcion ni nada. La unica opcion es iniciar una variable que es la que controla la interrupcion en el otro estado que no quiero que se inicie para que así con la interrupcion cambie y se ponga al que yo quiero. Lo que no sé es si realmente cuando monte el PIC hará esta interrupción o no

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?
« Respuesta #7 en: 12 de Febrero de 2010, 17:21:10 »
sube el código, para ver que es lo que sucede.

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?
« Respuesta #8 en: 12 de Febrero de 2010, 17:56:01 »
Debes recordar que para leer y escribir en el puertob debes seleccionar el banco de memoria correcto, sino no hace caso a la lectura o escritura. Tal vez por eso no puedes borrar el flag de interrupción. Lo eseás simulando en proteus?

Desconectado Chuk

  • PIC10
  • *
  • Mensajes: 23
Re: Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?
« Respuesta #9 en: 13 de Febrero de 2010, 16:57:31 »
Sí, simulo con Proteus. El código es este, pero sí que he tenido en cuenta los bancos de memotira:

INICIO:    clrf      estado
         clrf      duracion
         bsf         selector,0
         movlw      b'01010011'
         movwf      caracter
         bsf         STATUS,RP0
         movlw      b'01111111'
         movwf      TRISB
         movlw      b'11111100'
         movwf      TRISA
         movlw      b'01000011'
         movwf      OPTION_REG
         bcf         STATUS,RP0
         bsf         PORTA,1
         bcf         PORTA,0
         movlw      b'10011000'
         movwf      INTCON
         bsf         PORTB,tx
         goto              MAIN

Lo que me cambia la interrupcion del boton es el bit 0 del registro selector y los PORTA,0 y PORTA1. En ese código he invertido el estdado de como quiero esos bits y así cuando inicio, contando la interrupción se me queda como quiero. Para leer el puerto y poner a 0 el flag lo hacía justo antes del bsf PORTA,1, después de cambiar de banco al 0
« Última modificación: 13 de Febrero de 2010, 17:00:02 por Chuk »

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?
« Respuesta #10 en: 13 de Febrero de 2010, 17:38:37 »
Estás habilitando también la interrupción por flanco del pin RB0.
Coloca todo el código, así podemos ver si hay algun error en otro lugar y así lo puedo simular y ver que pasa. Saludos

Desconectado Chuk

  • PIC10
  • *
  • Mensajes: 23
Re: Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?
« Respuesta #11 en: 13 de Febrero de 2010, 17:43:12 »
Pues sí, también habilito las interrupciones en RB0 por flanco de subida ya que el PIC servirá para detectar pulsos PWM y enviar una S por RS-232 cuando detecte pulsos de mas de 2ms.

Adjunto el código,

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?
« Respuesta #12 en: 13 de Febrero de 2010, 18:28:00 »
Cuando asignas el valor al option_reg, habilitas las pullups del puerto B, como el proteus asigna al principio como que tiene un cero, al poner los pullup hay un cambio de estado por eso entra a la interrupcion.

No se por que el proteus no deja borrar el flag RBIF cuando hacemos un clrf PORTB, debería hacerlo. Debe ser un BUG
Antes de habilitar las interrupciones coloca estas dos lineas
Código: [Seleccionar]
movfw PORTB
Bcf INTCON,0
Con esto si simula bien el proteus, y estoy seguro que en el micro tampoco va a saltar la interrupción.

Desconectado Chuk

  • PIC10
  • *
  • Mensajes: 23
Re: Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?
« Respuesta #13 en: 13 de Febrero de 2010, 18:36:32 »
Gracias :) Pues habia probado lo mismo pero con movf y no me funciono :S. En este caso,creo que no me hacen falta las resistencias pull-up ya que ya uso una conectada a Vcc y a la entrada del PORTB pero bueno.

Una pregunta a parte. Yo envio el carácter "S" por el puerto serie con 10bits (1 start, 8 de datos y 1 de stop). Para reconocerlo en el PC, hace falta enviar también un EOL (la tecla return)???

Saludos

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Porque me detecta una interrupcion por RB4-RB7 nadamas empezar?
« Respuesta #14 en: 13 de Febrero de 2010, 18:46:44 »
El return es para que el hyperterminal salte una linea, no hace falta enviarlo.