Autor Tema: No logro que el programa entre a Interrupción por RB0 pic16f887  (Leído 7715 veces)

0 Usuarios y 6 Visitantes están viendo este tema.

Desconectado Darkman_A

  • PIC18
  • ****
  • Mensajes: 288
Re: No logro que el programa entre a Interrupción por RB0 pic16f887
« Respuesta #15 en: 15 de Abril de 2013, 12:11:27 »
Para que funciones debes agregar las siguientes lineas de código, fíjate que en tu código existe un error en estas lineas ya que estos registros se encuentran en el banco 3 y no en el banco 1 de la memoria como esta implementado en el programa guía.

Código: [Seleccionar]
bsf STATUS,6
    bsf STATUS,5 ; banco 2
    CLRF   ANSELH          ;ENTRADAS DIGITALES
    CLRF ANSEL

De esta manera funciona si problema alguno.

Ecxelente un paso mas, ahora me enciende y me apaga el led con el flanco de subida, pero no se me interrumpe el triger lo que necesito es que mietras el led este encendido no halla pulso en el triger

En "inicio" chequea si el bit del led esta en 1 ( o en cero como prefieras; BTFss o BTFsc) y luego ejecutas la rutina call trigger. Si no pones una condicion lo hace siempre.
Fijate si necesitas o no deshabilitar la interrupcion mientras generas el pulso (durante la rutina del pulso),  para que no te quede un pulso cortado.
Saludos.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: No logro que el programa entre a Interrupción por RB0 pic16f887
« Respuesta #16 en: 15 de Abril de 2013, 12:13:44 »
Si bien soy partidario del uso de las interrupciones, en este caso particular me parece que estás complicando tal vez más de lo que está solucionando. Si el propósito de la interrupción no es académico no me parece un buen caso para utilizar  la interrupción.

Desactivando la interrupción y colocando:

TRIGER
        BTFSC PORTB,0
        GOTO TRIGER

        BSF PORTA,0
        ...

Alcanza y sobra para tu propósito.

Ojo que en ese caso se puede perder la separación entre pulsos de 60mS.


Por otro lado, estás guardando y restaurando de forma errónea los registros clave (W y STATUS en este caso). No podés usar movf libremente, porque movf es una instrucción que modifica el flag Z del registro STATUS, por lo que estás corrompiendo el correcto valor del registro a restaurar. Eso puede hacer que tu programa se descontrole en el momento menos pensado. Revisá la forma correcta de hacerlo, revisando el datasheet de tu uC, bajo la sección: Context Saving During Interrupts.
« Última modificación: 15 de Abril de 2013, 12:15:53 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 tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: No logro que el programa entre a Interrupción por RB0 pic16f887
« Respuesta #17 en: 15 de Abril de 2013, 13:06:37 »
Citar
Si bien soy partidario del uso de las interrupciones, en este caso particular me parece que estás complicando tal vez más de lo que está solucionando. Si el propósito de la interrupción no es académico no me parece un buen caso para utilizar  la interrupción.

Totalmente de acuerdo, no se porque motivo la gente, a veces, cree que las interrupciones son la solucion a todo y hay muchas veces que complican algo que seria muy simple.

Tambien pasa que hay profesores que se los mandan hacer asi, para que aprendan, pero les mandan hacer ejemplos tan "malos" que en vez de aprender "desaprenden"  :P :P

Desconectado ECHEARANJUEZ

  • PIC10
  • *
  • Mensajes: 14
Re: No logro que el programa entre a Interrupción por RB0 pic16f887
« Respuesta #18 en: 15 de Abril de 2013, 13:18:48 »
Citar
Si bien soy partidario del uso de las interrupciones, en este caso particular me parece que estás complicando tal vez más de lo que está solucionando. Si el propósito de la interrupción no es académico no me parece un buen caso para utilizar  la interrupción.

Totalmente de acuerdo, no se porque motivo la gente, a veces, cree que las interrupciones son la solucion a todo y hay muchas veces que complican algo que seria muy simple.

Tambien pasa que hay profesores que se los mandan hacer asi, para que aprendan, pero les mandan hacer ejemplos tan "malos" que en vez de aprender "desaprenden"  :P :P


Lo que quiero implementar es un sensor de distancia ultrasonico, pero como apenas me inicio en esto de los pics y la programación, me pareció que lo primero que tenia que hacer  era aprender las interrupciones, ya que necesito contar el ancho de pulso que le llega al puerto rb0 ya que este esta en funcion de la distancia, o si alguien me recomienda otra forma mas sencilla de hacerlo se lo agradecería mucho.   

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: No logro que el programa entre a Interrupción por RB0 pic16f887
« Respuesta #19 en: 15 de Abril de 2013, 15:24:47 »
Citar
Lo que quiero implementar es un sensor de distancia ultrasonico, pero como apenas me inicio en esto de los pics y la programación, me pareció que lo primero que tenia que hacer  era aprender las interrupciones, ya que necesito contar el ancho de pulso que le llega al puerto rb0 ya que este esta en funcion de la distancia, o si alguien me recomienda otra forma mas sencilla de hacerlo se lo agradecería mucho. 

Si quieres medir el ancho de un pulso en el foro hay bastante info del tema, es más hay ejemplos de todas la clases y en todo los lenguajes,  sólo utiliza el buscador del foro y te saldrá bastantes hilos, te recomiendo el hilo del compañero REDPIC donde enseña algunas técnicas (creo que son las únicas) para medir el ancho de un pulso utilizando diferentes modulo de hardware de la máquina.
Un saludo desde Pereira - Colombia

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: No logro que el programa entre a Interrupción por RB0 pic16f887
« Respuesta #20 en: 15 de Abril de 2013, 15:57:46 »
Si, hay informacion por el foro, en esencia es darle al sensor orden de enviar eco, poner un TIMER a contar (TMR1 es el mas preciso) y cuando caiga el receptor del sensor leer ese TMR, supongo que hay mas maneras de hacerlo.

Recorde que hablamos de esto no hace mucho aqui:

http://www.todopic.com.ar/foros/index.php?topic=34630.0

Hay una documentacion bastante buena del SRF-05 en español.

A hacer interrupciones esta bien que aprendas, puede que en este caso te sean utiles, pero hay veces que no van bien...