Autor Tema: Encolar interrupciones en PIC16F84a  (Leído 7536 veces)

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

Desconectado merycr

  • PIC10
  • *
  • Mensajes: 19
Encolar interrupciones en PIC16F84a
« en: 30 de Mayo de 2008, 14:28:37 »
¡Hola a todos! Primero deciros que me ha sido bastante útil este foro ^^

Tengo que hacer una práctica para la universidad y me ha surgido una dudilla: cómo se pueden encolar interrupciones en el PIC16F84a? Osea, que mientras estás con una interrupción, si se producen un par más, se pongan a la cola y luego se ejecute la más prioritaria de ellas.
Es que necesito programar un ascensor y lo hago mediante interrupciones, y si mientras el ascensor está en movimiento la gente pulsa más botones, pues se tiene que recordar e ir luego a la planta correspondiente.

¿Alguien podría ayudarme? He estado un buen rato con el buscador y no he encontrado nada parecido...  :(


Gracias!!! :mrgreen:

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Encolar interrupciones en PIC16F84a
« Respuesta #1 en: 30 de Mayo de 2008, 15:16:12 »
Saludos merycr, bienvenido al foro!
Pues si es un ascensor y las interrupciones son causadas por usuarios que presionan botones, no creo que deba preocuparte que se produzca una interrupción mientras estás ocupado con otra interrupción...
Mi razón es la velocidad con la que trabaja el micro versus la velocidad con la que una persona puede presionar otro botón...
Si usas un cristal de 20MHz, estás trabajando con un ciclo de máquina de 0.1us.... bastante rápido no crees?
Entonces la cuestión sería tratar de que tu rutina de interrupción no contenga tanto código (cosa muy conveniente que se ha tratado con anterioridad en otros hilos)... más bien activar banderas en la rutina de interrupción y hacer el resto del trabajo en el programa principal...
Ya algún experto dará alguna opinión, pero entonces como te digo, no creo que eso sea un problema... siempre un botón será presionado primero que otro... y el micro será capaz de reconocer eso...
Por cierto, sería bueno que especificaras en qué lenguaje estás programando, para así poder ayudarte mejor.
Bueno te deseo éxito, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Encolar interrupciones en PIC16F84a
« Respuesta #2 en: 30 de Mayo de 2008, 15:25:11 »
Me ganaste de mano FIRE.

El pic16f84A no puede correr a 20Mhz, y como máximo lo puedes hacer correr es a 10Mhz (que no es nada lento). Otro punto importante es que tampoco permite dos o mas interrupciones a la vez. Esto es así, porque en el momento de ejecutarce una interrupción, el bit GIE, se desactiva para evitar otra.

Debes hacer lo que te dijo Fire, porque el CP trabaja muy rápido y entre un pulso y otro, deberás esperar como mínimo 50ms para evitar que el botón presionado, se lea dos veces, y en este tiempo, tienes suficiente como para atender la interrupción y activar otra.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Encolar interrupciones en PIC16F84a
« Respuesta #3 en: 30 de Mayo de 2008, 15:48:54 »
Pues teneis toda la razón Leon Pic... es que siempre trabajo a 20MHz con los otros micros y pues se me escapó!  :D
A 10MHz todavía tiene tiempo de sobra!
Nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado merycr

  • PIC10
  • *
  • Mensajes: 19
Re: Encolar interrupciones en PIC16F84a
« Respuesta #4 en: 31 de Mayo de 2008, 08:56:34 »
¡Muchas gracias por las respuestas!  :mrgreen:

Teneis razón en esto de las interrupciones....

Pero más bien me refería a que se guarden las posibles interrupciones para mientras el ascensor esté subiendo, o bajando... Ya sabeis, si mientras el ascensor sube alguien le da a otro botón, o alguien lo llama desde otra planta... ¿cómo podría hacer eso?

Y el lenguaje, estoy utilizando el ensamblador ^^

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Encolar interrupciones en PIC16F84a
« Respuesta #5 en: 31 de Mayo de 2008, 11:41:59 »
Saludos merycr!
Pues simplemente mientras se producen las interrupciones vas evaluando quién produjo la interrupción y guardas en una variable para saber a qué piso tienes que ir...
Pero sería bueno que colocaras el esquema eléctrico de lo que estás haciendo... para ser más exactos en cuanto a lo que se puede hacer.
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado merycr

  • PIC10
  • *
  • Mensajes: 19
Re: Encolar interrupciones en PIC16F84a
« Respuesta #6 en: 31 de Mayo de 2008, 13:12:24 »
¡Claro, qué buena idea!   :-/

¡Muchas gracias firepic! :mrgreen:
Mmm no sé muy bien qué es eso del esquema eléctrico....  :lol: pero bueno jeje ya me has ayudado mucho ^^

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Encolar interrupciones en PIC16F84a
« Respuesta #7 en: 31 de Mayo de 2008, 13:15:55 »
Merycr, lo que te sugiero que coloques es el diagrama eléctrico de cómo lo vas a montar en la realidad... , el pic, algún otro integrado que vayas a usar, el teclado del ascensor, la alimentación.... todo eso. ¿Me explico?
¿Sí tienes ya idea de cómo lo vas a hacer o estás todavía en fase inicial?
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado merycr

  • PIC10
  • *
  • Mensajes: 19
Re: Encolar interrupciones en PIC16F84a
« Respuesta #8 en: 31 de Mayo de 2008, 13:28:46 »
Ahhh ya sé a lo que te refieres jaja

Lo que pasa es que en realidad no voy a montarlo, es sólo un proyecto para simularlo en el ordenador (con el MPLAB).

Por si te refieres también a esto, las especificaciones son que el ascensor se moverá por 4 plantas (guardaré la planta en la que estoy en la memoria EEPROM). Para abrir y cerrar las puertas el PIC está conectado a un servomotor por el pin RB4 (esta parte ya la tengo solucionada :P).
La parte de subir y bajar es lo que aún no sé muy bien cómo lo haré... Pero me pondré a ello y si tengo alguna dudilla ya sé en quién puedo confiar  :mrgreen: jeje.

Si mientras sube y baja el ascensor (que ahí es donde tenía yo la cosa) se pulsan más botones, se recordará y luego se irá primero a la planta más cercana de las que tenga pendientes, y así hasta que no tenga ninguna interrupción pendiente.



Asique supongo que con todo esto... Aún estoy un poco en la fase inicial jejej

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Encolar interrupciones en PIC16F84a
« Respuesta #9 en: 31 de Mayo de 2008, 13:41:15 »
Ah pues si son no más cuatro plantas usas directamente cuatro botones conectados a RB4:RB7 y lo manejas mediante interrupciones como hemos hablado, ya ahí tienes resuelto el problema...
Ponte a echar código... podrías guardar los botones detectados y asignarle un valor de acuerdo al piso que corresponda, por ejemplo:

piso1: 01
piso2: 02
piso3: 03
piso4: 04

Entonces se me ocurre que hagas restas entre los pisos que ha sido solicitados y el piso actual, y el resultado menor es el piso que está más cerca.
Bueno no más es una idea. Sigue dándole y seguro terminarás tu proyecto satisfactoriamente!
Nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado merycr

  • PIC10
  • *
  • Mensajes: 19
Re: Encolar interrupciones en PIC16F84a
« Respuesta #10 en: 31 de Mayo de 2008, 13:51:37 »
Otra gran idea  :mrgreen:

¡Gracias de nuevo!

Vuelvo a ponerme a ello, ya os contaré cómo voy jeje

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Encolar interrupciones en PIC16F84a
« Respuesta #11 en: 31 de Mayo de 2008, 13:59:02 »
Vaya pues, a trabajar se ha dicho!  :-/
Te vas a divertir un mundo!
Nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado merycr

  • PIC10
  • *
  • Mensajes: 19
Re: Encolar interrupciones en PIC16F84a
« Respuesta #12 en: 01 de Junio de 2008, 15:01:54 »
Ahhg me he vuelto a liar!  :(

He intentado hacer eso de guardar en una variable quién produjo una interrupción a medida que se produzcan pero no sé muy bien cómo hacerlo...

El caso es este: cuando hay una interrupción el pin RB1 se pone a 0 si la llamada ha sido desde fuera del ascensor, y se pone a 1 si alguien ha pulsado un botón dentro del ascensor. Además los pines RB2 y RB3 (siendo RB2 el más significativo) indican a qué planta hay que ir: 00 para la planta baja, 01 para la primera planta, 10 para la segunda y 11 para la tercera.

El caso es que no sé cómo guardar toda esta información a medida que se vayan produciendo las interrupciones.... ¿Lo hago en una variable o en varias? Y si es en varias ¿Cómo sé qué variable modificar cada vez?

Estoy en ello toda la tarde y nada...

¿A alguien se le ocurre algo? :?

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Encolar interrupciones en PIC16F84a
« Respuesta #13 en: 01 de Junio de 2008, 15:10:58 »
No te preocupes merycr, que lo vas a lograr!  :P
La pregunta es, quién genera la interrupción? Tienes botones conectados a RB4, RB5, RB6, RB7 correspondientes a cada planta como te mencioné antes?
Por cierto, aún no has colocado el esquema eléctrico. Cárgalo para poder entender mejor lo que estás haciendo y estar en capacidad de ayudarte más.
Dale pues, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Encolar interrupciones en PIC16F84a
« Respuesta #14 en: 01 de Junio de 2008, 15:17:45 »
Acá hay algo que no entiendo. El pin RB1 indica si el pulsador que se accionó fue:

0 si se accionó fuera del ascensor (una persona que llama al ascensor)
1 si se precionó desde dentro de la cabina (una persona que desea ir a un piso)

solo tienes 2 opciones, y las dos muestran acción y no contemplan el estado de reposo del ascensor esperando. Por lo que interpreto que el RB1, comanda a algún circuito. ¿esto es así?

¿puedes subir las directivas del profesor para armar el ascensor? porque la información que nos propoorcionas es muy poca. Esto es para ver si se puede mover el RB4 a otro pin o hay que usar las puertas en el RB4 si o si.

¿porqué? porque una de las interrupciones del del pic, es por cambio de nivel en los pines RB4 al RB7, además, los botones están por duplicado. Los cuatro botones dentro de la cabina y los cuatro botones que estan en cada piso para llamar al ascensor, que justamente, son los mismo y no hay nececidad de distinguirlos (botones e adentro de la cabina y de los de afuera)
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.