Autor Tema: ¿Se puede hacer varias instrucciones a la vez?  (Leído 2026 veces)

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

Desconectado victor_esp_1982

  • PIC10
  • *
  • Mensajes: 22
¿Se puede hacer varias instrucciones a la vez?
« en: 22 de Febrero de 2005, 05:37:00 »
La idea de lo que yo quiero realizar es la siguiente, lo q no se si se podrá, haber si alguine me lo puede decir:

Seria ir haciendo pequeñas funciones básicas que irán dentro del micro. Cada una de estas corresponderá a una accion, por ejemplo abrir una puerta de un garaje otra hacer saltar una alarma.... Lo que quiero es enviar, mediante puerto serie al micro una instrucción, la cual un manejador recibirá y actuará en función a dicha instrucción(por ejemplo hacer saltar la alarma). La otra posibilidad sería la de enviar un comando que cuando el manejador lo detecte , estará a la espera de una serie de instrucciones básicas que el micro irá almacenando. Esto lo ira haciendo hasta que reciba otra instrucción que cuando la reconozca el micro dejara de almacenar instrucciones y realizará a la vez todas las ya almacenadas(es decir, saltar la alarma,abrir la puerta...). La historia esq es muy importante que realice todas las instrucciones a la vez el micro y me parece que con c va haciendo una detras de otra, no es asi?

Si acaso se pudiera agradeceria que me lo digerais y me explicaseis como seria pq yo por lo poco q conozco solo se hacerlo correlativamente.


Muchas gracias de antemano


Desconectado akydes_

  • PIC12
  • **
  • Mensajes: 68
RE: ¿Se puede hacer varias instrucciones a la vez?
« Respuesta #1 en: 22 de Febrero de 2005, 08:13:00 »
hola amigos!!
desde mi ignorancia, te diré que me parece que no es posible una programación de PICs multitarea, salvo que hagas uso de  las interrupciones de los micros.
De otras forma, supongo que tendrás que "multiplexar" las tareas, y repartirles el tiempo de proceso para ejecutarlas de la forma más "en paralelo" posible.

espero que te sirva,
un saludo!!.

Desconectado mariosaul

  • PIC10
  • *
  • Mensajes: 21
RE: ¿Se puede hacer varias instrucciones a la vez?
« Respuesta #2 en: 22 de Febrero de 2005, 10:21:00 »
A ver si te puedo contestar,

Tu tienes que hacer por ejemplo las siguientes funciones :
funcion abrir puerta
funcion cerrar puerta
funcion prender alarma
funcion apagar alarma

Entonces cuando quieras abrir la puerta y disparar la alarman llamas a las funcioones corespondientes una despues de la otra. Exactamente al mismo tiempo no puede ser,  pero por la velocidad del pic no vas a percibir el retardo, (de no ser que alguna de las funciones sea extremadamente lenta de ejecutar)

Lo que no tienes que hacer es, por ejemplo una funcion :
prender alarma durante X seg
abrir puerta durante  Y seg

porque en ese caso deberas esperar a que una funcion termine de ejecutarse para que comienze la siguiente, y nunca vas a poder tener la alarma prendida a la vez que la puerta abierta (por dar un ejemplo)

Desconectado fenix_jn

  • PIC18
  • ****
  • Mensajes: 418
RE: ¿Se puede hacer varias instrucciones a la vez?
« Respuesta #3 en: 22 de Febrero de 2005, 18:29:00 »
Ok, bueno una ventaja que tienes con el PIC es que puedes contar con su alta velocidad, asi q el uso de procedimientos multitarea se vuelve innecesario, A MENOS que desees diseñar una aplicacion de tiempo real, en la cual se vuelve un poco dificil, la mejor forma es enlazar las tareas como dice mariosaul, es decir, dentro de las rutinas haz que se llamen unas a las otras, recuerdo hace unos años salio publicado un articulo sobre un proceso multitarea implementado en un PIC 16F84 pero realmente no recuerdo dond, usa el google y busca un poco de codigo a lo mejor tienes suerte y hallas lo que buscas.

Desconectado victor_esp_1982

  • PIC10
  • *
  • Mensajes: 22
RE: ¿Se puede hacer varias instrucciones a la vez?
« Respuesta #4 en: 23 de Febrero de 2005, 02:48:00 »
ok, muchas gracias. Yo lo que queria hacer, como ya os dije era mandar por puerto serie una instruccion por ejemplo cp q significaria cerrar puerta. En ese caso la puerta se cerraria. Otra forma seria  enviarle una palabra por ejemplo "codigo". Cuando el micro la reciba se quedaria a la espera de ir recibiendo tramas e ir almacenandolas hasta que recibiera por ejemplo "fin_codigo" y entre ambas cp (cerrar puerta) y sa (saltar alarma). Cuando el micro recibiera fin codigo irse a donde ha almacenado las instrucciones q le has enviado y ejecutarlas a la vez. Ya se que el micro es rapido pero como la puerta no termina su ejecucion hasta que no se cierra detectandolo un sensor y este proceso se puede considerar lento, ¿la alarma no saltaria hasta q terminara este?

Si esto es asi , aqui veo una limitacion importante,¿No os parece?.

Bueno amigos muchas gracias

Otra pregunta es, ¿sabeis como se trata una interrupcion a traves de un sensor analogico? Es que yo solo he tratado con digitales de momento. Con analogico me refiero por ejemplo uno de peso q salte si el peso es mayor a  tantos kgs

Desconectado victor_esp_1982

  • PIC10
  • *
  • Mensajes: 22
RE: ¿Se puede hacer varias instrucciones a la vez?
« Respuesta #5 en: 23 de Febrero de 2005, 02:52:00 »
Ah, se me olvidaba, respecto a lo del sensor analogico supongo q habra q conectarlo a una patilla q tenga un conversor analogico digital dento del micro, pero mi duda es a la hora de programar, ¿de donde se lee?¿ ya no es del puerto de entrada directamete no?Supongo q ahora a la entrada tendras distintas tensiones aunq no se muy bien como va esto

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: ¿Se puede hacer varias instrucciones a la vez?
« Respuesta #6 en: 23 de Febrero de 2005, 03:03:00 »
Tu problema no es el PIC, ¡¡¡ es que tienes una puerta muy lenta !!!

Bromas aparte, creo que tu solución podría ser dividiendo el proceso "Cerrar puerta" en un proceso y una comprobación por separado.
Algo así:

CerrarPuerta();
while (!PuertaCerrada())
{
  Otros procesos;
};
SaltaAlarma();

De esta manera, la alarma saltará cuando se cierre la puerta, pero puedes seguir haciendo procesos mientras dura el cierre de la puerta.


 

anything