TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: alarren en 07 de Enero de 2010, 06:08:43

Título: No actualizar PertoB durante interrupcion
Publicado por: alarren en 07 de Enero de 2010, 06:08:43
Muy buenas.

La cuestion, es que estoy detectando pulsos de corta duracion por cambio de flanco en rb7 y rb6. Trabajo con pic 16f876 y pic 16f84.
La cosa es que detecta bien los pulsos y provoca la interrupcion. Pero necesitaria saber cual de las dos entradas ha probocado la interrupcion.
Como son pulsos, la patilla vuelve a su valor original, y por lo tanto no puedo comprobarlo.
Me gustaria saber si existe la posibilidad de que los valores de la puerta b no se actualizen una vez entrada la interrupcion.

Muchas gracias
Título: Re: No actualizar PertoB durante interrupcion
Publicado por: alogic.on en 07 de Enero de 2010, 06:20:50
hacerlo mu rapido :D
Título: Re: No actualizar PertoB durante interrupcion
Publicado por: alarren en 07 de Enero de 2010, 07:05:57
??
Título: Re: No actualizar PertoB durante interrupcion
Publicado por: pibe en 07 de Enero de 2010, 08:09:41
Creo que sería tan sencillo como cuando apenas entres a la interrución entonces preguntes con un BTFSS/BTFSC en que estado está cada pin. Uno de ellos tendrá que estar en estado cambiado y entonces actuas en consecuencia.
Título: Re: No actualizar PertoB durante interrupcion
Publicado por: alogic.on en 07 de Enero de 2010, 08:47:08
es justo como te dice Pibe, al entrar en la rutina de interrupcion localizas que int ha saltado y de seguido testeas los pines, hay muchas rutinas por el foro. mira a ver si encuentras algo que te sirva, o pon un poco mas de info para que te podamos ayudar.
btfss   portb,4
goto    ande_quieras
btfss   portb,5
goto    ande_quieras
btfss   portb,6
goto    ande_quieras
btfss   portb,7
goto    ande_quieras

para pusadores normalmente se utiliza una pequeña rutina de demora, unos 10-20ms y vuelta a testear. para evitar rebotes

un saludo
Título: Re: No actualizar PertoB durante interrupcion
Publicado por: alarren en 07 de Enero de 2010, 13:58:53
Gracias por contestar, pero no me resulta valido.

Para poder mirar que puerta a recibido el cambio de estado, esta tiene q durar mas de un ciclo de reloj.

Mis pulsos duran un ciclo o dos de reloj como mucho, entonces, o consigo mantener sin actualizar los valores de la puerta b, o no sere capaz de saber kual es el que a disparado.

Imagino que la solucion vendra al final, con algo de logica digital externa, unos monoestables o biestables que cambien el estado con la interrupcion y luego resetearlos con el pic.
Título: Re: No actualizar PertoB durante interrupcion
Publicado por: migsantiago en 07 de Enero de 2010, 14:05:48
¿Es necesario que lo hagas por interrupción?

Porque podrías hacerlo dejando una lectura constante del puerto B en W. Cuando W sea diferente a cero, entonces revisas qué bit de W ha cambiado.
Título: Re: No actualizar PertoB durante interrupcion
Publicado por: mtristan en 07 de Enero de 2010, 15:26:35
.


¿y un oscilador más grande?  :?
Título: Re: No actualizar PertoB durante interrupcion
Publicado por: jhozate en 07 de Enero de 2010, 19:23:59
y cuanto han de durar los pulsos,me parece una solucion rapida la q plantea migsantiago y si le subes al cristal mejor, si no usas la interrupcion te ahorras el proceso "push” ” pop" al entrar y salir de la interrupcion respectivamente
Título: Re: No actualizar PertoB durante interrupcion
Publicado por: Suky en 07 de Enero de 2010, 22:08:43
Otra opción mas rebuscada  :mrgreen: es usar interrupción externa para un pulso y Timer0 en modo contador 1:1 y timer pre-cargado a 254. Con eso, si el estado en 0, es largo puedes determinar cual generó el pulso.


Saludos!
Título: Re: No actualizar PertoB durante interrupcion
Publicado por: alogic.on en 08 de Enero de 2010, 07:45:29
pa mi que como no especifiques un poco mas... vamos a estar tirando ideas que a lo mejor tienen una solucion simple. postea el codigo que tienes y lo que quieres hacer de una forma mas especifica para poderte ayudar mejor. que tipo de comunicacion, u que es lo que quieres conectar ...

un saludo
Título: Re: No actualizar PertoB durante interrupcion
Publicado por: tapi8 en 08 de Enero de 2010, 10:13:58
Creo que la opcion de Suki es la ideal, ya que son flags distintos los que se quedan seteados, la puede mirar si quiere media hora despues, ya que los flags los va a borrar el programador y no el hard del PIC.
Muy buena Suki  :-/

saludos
Título: Re: No actualizar PertoB durante interrupcion
Publicado por: Suky en 08 de Enero de 2010, 15:48:33
Pero estoy mal en un detalle, se debe pre-cargarse a 255, así al llegar el pulso incrementa la cuenta, el overflow genera la interrupción y se detecta.


Saludos!
Título: Re: No actualizar PertoB durante interrupcion
Publicado por: tapi8 en 08 de Enero de 2010, 16:02:43
Creo que ni en eso te equivocas porque avanza dos numeros por cada pulso no?. Pero para ir a lo seguro mejor poner 255
Título: Re: No actualizar PertoB durante interrupcion
Publicado por: Suky en 08 de Enero de 2010, 16:10:49
Creo que ni en eso te equivocas porque avanza dos numeros por cada pulso no?. Pero para ir a lo seguro mejor poner 255

mmm... No, podemos dejar el timer 1:1 asignando el prescaler al watchdog pero sin encenderlo, y como cuenta con flancos ascendentes capturaríamos el pulso.

Saludos!
Título: Re: No actualizar PertoB durante interrupcion
Publicado por: tapi8 en 09 de Enero de 2010, 18:47:27
Citar
mmm... No, podemos dejar el timer 1:1 asignando el prescaler al watchdog pero sin encenderlo, y como cuenta con flancos ascendentes capturaríamos el pulso.   
     


Pues si señor, porque con el preescaler asignado al TIMER0 para este caso concreto no valdria, ya que se tienen que producir 2 flancos para desbordar, cargado con 255.
No sabia que se pudiera hacer esto. Asignarle el prescaler al watchdog para que el TIMER vaya mas rapido, sorprendente.

saludos