Autor Tema: INTERRUPCION RB7  (Leído 3534 veces)

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

Desconectado MANUEL2005

  • PIC10
  • *
  • Mensajes: 5
INTERRUPCION RB7
« en: 25 de Septiembre de 2004, 08:29:00 »
ALGUIEN PODRIA DECIRME COMO REALIZO UNA INTERRUPCION EN EL RB7 PARA SABER CUANDO SE HA ACCIONADO UN PULSADOR EN ESE PIN. HE REALIZADO EL PROGRAMITA  EN BASE A IF THEN PERO AL TENER EL MISMO UN BUCLE MUY LARGO PIERDO LOS PULSOS DE ENTRADAS O A VECES TENGO MUCHA REPETICION.NECESITO QUE SEA UNICAMENTE ESE PIN Y NO SE COMO CONFIGURAR EL PORTB Y LAS INSTRUCCIONES ENABLE Y DISABLE.SI ALGUIEN TIENE ALGUN EJEMPLO AGRADECIDO DE ANTEMANO.
SALUDOS.

Desconectado tonyusp

  • PIC10
  • *
  • Mensajes: 17
RE: INTERRUPCION RB7
« Respuesta #1 en: 25 de Septiembre de 2004, 23:12:00 »
Aca te dejo un codigo de ejemplo echo en PB-Pro:

-------------------
TRISB=%10000000 " Definimos en RB7 solo como entrada el resto son salidas

led     VAR     PORTB.1


On Interrupt GoTo mi_int " Define donde salta cuando hay interrupcion

INTCON = $88" Habilita las interrupciones en los pines RB4 a RB7

loop:   High led                " Enciende el LED
        GoTo loop               " comienza nuevamente el programa


"Rutina de Interrupcion

        Disable                 " Desabilita las interrupciones
mi_int:  Low led                 " Apaga el Led
        Pause   500             " Espera de 1/2 segundo
        INTCON.0 = 0            " Borra la bandera de interrupcion
        Resume                  " vuelve al programa
        Enable                   " Habilita nuevamente las interrupciones

end

----------------
Espero que te sirva un abrazo desde Brazil
Tony

Desconectado MANUEL2005

  • PIC10
  • *
  • Mensajes: 5
RE: INTERRUPCION RB7
« Respuesta #2 en: 27 de Septiembre de 2004, 06:17:00 »
GRACIAS TONY POR RESPONDER CREO QUE ME SERVIRA DE MUCHA AYUDA.
UNA DUDA MAS SI LOS PINES DE TODO EL PUERTO B ES ENTRADA PERO UNICAMENTE ME INTERESA LA INTERRUPCION EN EL RB7 LO CONFIGURO COMO EN TU EJEMPLO O SETEO TODO EL TRISB EN 1
GRACIAS.
SALUDOS

Desconectado MarquesSalsero

  • PIC18
  • ****
  • Mensajes: 467
RE: INTERRUPCION RB7
« Respuesta #3 en: 27 de Septiembre de 2004, 09:40:00 »
Tienes un problema accesorio y es el de eliminar los rebotes. Como los interruptores son elementos mecanicos cuando los pulsamos no hacen un contacto inmediato y perfecto, sino que rebotan, fisicamente, hasta que definitivamente se estabilizan. Esto hace que en vez de haber un contacto limpio de uno a cero, o al reves depende de como tengas puesto el pulsador, haya muchos contactos breves hasta que mecanicamente se estabiliza.

Si usas un PIC es tan rapido que esos rebotes pueden generarte montones de interrupciones y el PIC terminara de procesarlas y todavia estará el boton rebotando, con lo que tendras una nueva interrupción.

Lo que tienes que hacer por tanto es eliminar los rebotes, conocido en ingles como debounce, si usas la funcion BUTTON ya tienes incorporado el debounce. tambien puedes hacerlo por soft, leyendo multiples feces el estado del pin hasta que este estable un tiempo minimo que se suele considerar de 50ms ya que cualquier pulsador de calidad media tiene un tiempo de estabilizacion inferior a eso.

Tambien puedes hacer el debounce por hard con un par de resistencias y un condensador ( pin de entrada del PIC a dos resistencias y un condensador, el condensador a masa, una resistencia a positivo y la segunda resistencia al pulsador que debera hacer corto a masa ( la entrada a la que lo conectes debe ser de tipo schmit trigger ). O bien puedes usar un par de puertas configuradas como flip flop pero entonces en vez de un pulsador necesitaras un conmutador.

Mi opcion suele ser la de usar las resistencias y el condensador, es barato y funciona perfectamente. Las opciones por soft si bien son mas baratas consumen muchos recursos del PIC.
Hay 10 tipos de personas las que entienden binario y las que no

Desconectado MANUEL2005

  • PIC10
  • *
  • Mensajes: 5
RE: INTERRUPCION RB7
« Respuesta #4 en: 27 de Septiembre de 2004, 15:14:00 »
GRACIAS MARQUEZ
PERO ADEMAS DEL YA CONOCIDO REBOTE EN LOS PULSADORES EL MAYOR PROBLEMA QUE TENGO ES EL BUCLE TAN LARGO REALIZANDO OTRAS OPERACIONES QUE AVECES PIERDE ALGUN PULSO EN LOS MISMOS POR ELLO QUERIA EXPERIMENTAR CON LAS INTERRUPCIONES A VER SI EL MISMO FUNCIONA EN MEJOR MANERA PERO NO SABIA Y AUN ME QUEDA LA DUDA DE COMO SETEAR EL TRISB PARA QUE UNICAMENTE FUNCIONE CON LOS PULSADORES QUE DESEO.(RB3 A RB7)
GRACIAS .
SALUDOS

Desconectado tonyusp

  • PIC10
  • *
  • Mensajes: 17
RE: INTERRUPCION RB7
« Respuesta #5 en: 27 de Septiembre de 2004, 18:43:00 »
Manuel si lo que necesitas es hacer algo seguro que no tenga rebotes ni cosas extrañas yo una vez use un integrado que controla solito la matrix de botones y te da un pulso de interrupcion cuando se presiona algun boton.
Era un 74C922, lee la hoja de datos para ver si te sirve.
Un abrazo
Tony

Desconectado Colores

  • Moderadores
  • PIC16
  • *****
  • Mensajes: 232
RE: INTERRUPCION RB7
« Respuesta #6 en: 27 de Septiembre de 2004, 20:19:00 »
Se me ocurren 2 dudas más para aportar, a ver si vamos refinando....

En el caso del debouncer con condensador y resistencia,  puede ser que agregue latencia a la lectura? Porque se supone que hasta que no se carga el capacitor no estará disponible la lectura. El cálculo de un antirebote de 50 ms con capacitor "atrasa" también la lectura 50 ms.  Esto es así?

En el caso de utilizar interrupciones, supongamos que el pulsador habilita la interrupción, entonces entra a una rutina "larga". En ése momento las interrupciones están desabilitadas y los datos de las pulsaciones siguientes se pierden hasta que se salga de la interrupción...
De cualquier manera, me parece, que nadie tiene un dedo tan rápido como para pulsar a tal velocidad que le haga perder datos a un pic... o realmente es TAN larga esa rutina?

Salu2.

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: INTERRUPCION RB7
« Respuesta #7 en: 28 de Septiembre de 2004, 03:06:00 »
El tiempo de carga del condensador depende de su constante de tiempo llamada TAU=R*C, esto te da un tiempo dependiente de los valores de R y C que pongas y por lo tanto es ajustable.

Saludos
Ricky
Madrid-España

Desconectado MarquesSalsero

  • PIC18
  • ****
  • Mensajes: 467
RE: INTERRUPCION RB7
« Respuesta #8 en: 28 de Septiembre de 2004, 04:19:00 »
Efectivamente, al usar el sistema de resistencia condensador de añade una latencia pero es, por decirlo de alguna manera, fisica y no afecta al  procesador. Simplemente el PIC recibira el pulso algunos milisegundos mas tarde pero el resto del proceso es igual.

En cuanto a lo de la rutina larga... como dice Colores2 muy rapido tienes que ser en el pulsador, eso o simplemente necesitas variar la filosofia del programa.

Muchas veces lo de crear bucles excesivamente largos es una deformacion que se tiene al principio de estudiar programacion y luego se arrastra durante años.

Una practica idonea de programacion es hacerla tan modular como puedas dividiendo procesos largos en rutinas mas cortas que pueden ser incluso subrutinas, asi entre subrutina y subrutina, puedes comprobar el estado de las entradas por ejemplo.

Si quieres explicanos algo mas del programa y puedes incluso publicarlo para que veamos como mejorarlo.
Hay 10 tipos de personas las que entienden binario y las que no

Desconectado MANUEL2005

  • PIC10
  • *
  • Mensajes: 5
RE: INTERRUPCION RB7
« Respuesta #9 en: 29 de Septiembre de 2004, 06:23:00 »
GRACIAS POR OCUPARCE DEL PROBLEMA QUE ME AQUEJA PERO NO CREO QUE SEA POSIBLE DISMINUIR EL BUCLE YA SEA CREANDO SUBRUTINAS O NO EL PROGRAMA SI O SI TIENE QUE INTERROGAR CONTINUAMENTE  ALGUNOS PUERTOS Y A LA VEZ HACER TOMAS DE UN PUERTO CON UN SENSOR DE TEMP. AL CUAL HAY QUE DARLE TIEMPO PARA QUE SE ESTABILIZE Y HACERLE UN PROMEDIO ENTRE TODAS LAS MUESTRAS TODO ELLO HACE QUE EL MICRO PIERDA TIEMPO HACIENDO UNA TAREA Y NO ME DE BOLILLA A LOS PULSOS DE ENTRADAS SIN CONTAR ADEMAS QUE DEBO REFRESCAR INFORMACION EN UN DISPLAY LCD.ES POR ESO QUE QUIERO PROBAR CON INTERRUPCIONES EN LOS PUERTOS AUNQUE NO HAGA CASO EN EL MOMENTO QUE NO PIERDA EL PULSO QUE ES LO MAS IMPORTANTE.
GRACIAS. SALUDOS

Desconectado Colores

  • Moderadores
  • PIC16
  • *****
  • Mensajes: 232
RE: INTERRUPCION RB7
« Respuesta #10 en: 29 de Septiembre de 2004, 21:01:00 »
Lo más probable es que esté diciendo cualquier cosa, pero... si yo tuviera que resolver algo así usaría 2 pic´s.
En el primero manejaría las entradas de datos, o sea, los pulsadores y señales exteriores con interrupciones y operaciones más sencillas las resolvería ahí mismo. En el segundo pic procesaría las partes que llevan más tiempo o cálculo.
Entonces, si se detecta una de las operaciones complicadas, el primer pic (el del frente) se las deriva al segundo pasandole un pulso por un pin o los datos que necesite, mientras tanto (y hasta que el resultado está disponible) el primer pic sigue en la guardia por más interrupciones. Una de las interrupciones que podría recibir también sería la de "resultado listo" del segundo pic para continuar con alguna ejecución.

Podria servir?

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: INTERRUPCION RB7
« Respuesta #11 en: 30 de Septiembre de 2004, 03:38:00 »
Antes que eso yo subiría la frecuencia del micro a 20 MHz o si no es suficiente a la serie 18 hasta 40MHz, esto agiliza mucho el proceso y no debería dar problemas para escanear un teclado y hacer otras cosas.

Saludos
Ricky
Madrid-España

Desconectado MarquesSalsero

  • PIC18
  • ****
  • Mensajes: 467
RE: INTERRUPCION RB7
« Respuesta #12 en: 30 de Septiembre de 2004, 03:52:00 »
Todo es cuestion de evaluar posibilidades, pero por ejemplo yo use hace algun tiempo un sensor de humedad y temperatura de honeywell ( ¡que cosa mas mala, señor! ) que una vez que le indicabas  que hiciera la medicion tardaba casi 100ms, pero por supuesto que no detenía el programa durante ese tiempo. Le indicaba que inicira la medicion y 100ms despues volvia a recuperarlas.

Ese el tipo de cosas que hece que un programa parezca mutitarea y te ahorran un monton de tiempo.
Hay 10 tipos de personas las que entienden binario y las que no

Desconectado MANUEL2005

  • PIC10
  • *
  • Mensajes: 5
RE: INTERRUPCION RB7
« Respuesta #13 en: 30 de Septiembre de 2004, 06:04:00 »
COMO IDEAS SON ALGUNAS BUENAS Y OTRAS NO TANTO  LO DE SUBIR LA FRECUENCIA DEL MICRO YA ESTA EN MARCHA TENGO UN 16F877 DE 4MHZ TRABAJANDO A 10 MHZ Y SI CON LA ULTIMA PRUEBA LAS DE LAS INTERRUPCIONES NO CAMINA EN MEJOR FORMA ME PASARE A UNO DE 20 MHZ PERO POR AHORA SIGO CON EL PROYECTO ORIGINAL.POR ESO CONSULTABA EL SETEO DEL PUERTO PARA LA HABILITACION Y DESABILITACION DE LAS INTERRUPCIONES.GRACIAS SALUDOS


 

anything