TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: lesterm123 en 21 de Julio de 2011, 00:37:42
-
Hola amigos electronicos, este es mi primer tema, y pues quisiera que me ayudaran, es que estoy haciendo un proyecto, y la verdad ya tengo el programa casi terminado, pero me falta una ultima cosa, lo hice con un ciclo While, y quisiera saber como puedo hacer para detenerlo ya sea con un switch o pulsador o lo que recomienden. Este es el codigo:
//Programa realizado por Lester Afredo Morales Villalobos
#Include <16f887.h>
#Use Delay (Clock=4M)
#Fuses XT NOLVP NOBROWNOUT PUT NOWDT
#Define Piston1 PortA,0
#Define Piston2 PortA,1
#Define Piston3 PortA,2
#Define Motor PortB,0
#Define Sw PortC,0
#Byte PortA=5
#Byte PortB=6
#Byte PortC=7
Void Main()
{
Set_Tris_A(0B11111000);
Set_Tris_B(0B11111110);
Set_Tris_C(0B11111111);
While (True)
{
Bit_clear(Piston1);
Bit_clear(Motor);
If (Bit_test(Sw))
{
Delay_ms(5000);
Bit_set(Motor);
Delay_ms(2000);
Bit_clear(Motor);
Delay_ms(1000);
Bit_set(Piston1);
Delay_ms(2000);
Bit_clear(Piston1);
Delay_ms(1000);
Bit_set(Motor);
Delay_ms(3000);
Bit_clear(Motor);
Delay_ms(1000);
Bit_set(Piston2);
Delay_ms(1000);
Bit_clear(Piston2);
Delay_ms(1000);
Bit_set(Motor);
Delay_ms(3000);
Bit_clear(Motor);
Delay_ms(1000);
Bit_set(Piston3);
Delay_ms(1000);
Bit_clear(Piston3);
Delay_ms(1000);
Bit_set(Motor);
Delay_ms(3000);
Bit_clear(Motor);
}
}
}
//Derechos reservados
-
El microntrolador debe quedar en un bucle infinito, sino se reinicia... en un primer while, en lugar de true podes colocar cualquier condicion
Saludos
-
El microntrolador debe quedar en un bucle infinito, sino se reinicia... en un primer while, en lugar de true podes colocar cualquier condicion
Saludos
Man, es que es una banda transportadora, y lo que hace es activar pistones y un motor, el de la banda, ok le puse un Switch para encender la maquina, entonces, si quiero que el ciclo sea repetitivo, pero digamos que algo salio mal, o hubo un cortocircuito o algo asi, entonces, como hago para agragar otro switch para apagar la maquina. espero me hayas entendido
-
Yo no te entiendo muy bien. Pero si lo que quieres es reiniciar el programa pues simplemente enchufa un switch al MCLR y masa y cuando lo pulses el programa del PIC se reinicia y por ende el funcionamiento de la máquina, aunque imagino que esto es demasiado obvio y no estoy entendiendo bien lo que preguntas.
Si por otra parte lo que quieres es hacer como dos estructuras de funcionamiento, como te comento suky, lo debes hacer dentro del while(true), yo pondría 2 variables condicionales y otros 2 while dentro, uno con el modo que tienes y otro con el modo que persigues, de tal forma que cuando pulses el switch cambie,, en plan:
while(true)
{
while(condicion1)
{
Aquí comprueba la condición uno y 2
}
while(condicion2)
{
Compruebas las dos condiciones
}
}
Si no te ayuda intenta explicarlo un poco mejor por favor.
-
Asi es man, es como dice nosecomo, con mclr reseteas todo, o sino vas tener que plantear otro enffoque de programacion no utilizando delay, sino ticks de tiempo e interrupciones, de esa manera podes tstear continuamente si ocurre alguna falla
Saludos
-
Hola, otra opción sería poner un botón de emergencia, para que se active con un switch de fin de linea.
-
Amigos lo que quiero es que con un switch la maquina se apague, ya sea que el ciclo while venga enpesando, esta a mitad o vaya terminando, no importa, no se si me entienden, como el switch de encendido, lo que quiero es otro switch apagar la maquina en cualquier momento.
GRACIAS
-
A ver, en maquinaria, y trabajo en eso, jamas se usa la señal de paro de emergencia en el automata nada mas que como señalizacion de eventos de menor importancia. Debe ser algo que corte de manera hard alimentaciones o algo asi, No se implememta vigilancia por ciclo de programa como emergencia para funciones peligrosas, por sistema. Ademas siempre a contacto cerrado para vigilar posible corte de hilo etc.
Ten en cuenta que es una vigilancia de emergencia, si algo falla y puede ser un bucle de programa hay que parar como sea de forma inmediata.
-
yo estoy de acuerdo con suky. todos mis programas siempre tienen un while(true) que corresponde al bucle principal, si lo que quieres es detener un determinado proceso, entonces usa una bandera.
-
Hola.
Voy con Algec ... los paros de emergencia se hacen interrumpiendo el flujo de corriente, no es bueno hacerlo desde el firm.
Saludos
-
Pues si lo que quieres es paro de emergencia simplemente apaga el controlador con el switch y ya está. Pon un switch normalmente cerrado y cuando lo pulses que se abra en la alimentación del circuito y todo detenido, luego vuelves a empezar.
Si lo quieres por código, una solución bastante cutre podría ser que hcieses comprobaciones de la pata enganchada al switch después de cada aspecto clave del programa, que vayas anidando todo, de tal forma que si te cambia el estado del switch no puedas seguir ejecutando el resto:
While(true)
{
if(switch==false)
{
//ejecuto acción
if(switch == false)
{
//ejecuto accion
if(switch==false)
{
//...
}
}
}
}
No se si te servira :shock: Un saludo.
-
un paro de emergencia lo puedes hacer con un rele externo, le das a la seta y tira el rele, corta tension del circuito de control, dejas alimentado el pic con una entrada de un contacto del mismo rele de emergencia y asi puedes activar un led o lo que sea para avisar de que se ha pulsado el paro de emergencia. ASi tambien puedes ir a un bucle infinito desde una entrada de interrupcion externa del pic, y mientras no se reponga la corriente el pic se mantiene en esa interrupcion externa, y si quieres mas seguridad pones el mismo bucle de la interrupcion externa chequeando esa entrada al empezar el programa, por si se resetea el micro estando en estado de emergencia y no detecta el flanco que activaria su interrupcion. Que supongo que es lo que quieres, que el pic detecte que hay un paro de emergencia activado y no siga corriendo el programa hasta reponer la tension.
si quieres que detecte que hay algo mal en el programa tendras que usar watchdog o algo similar
-
en un sistema bien elaborado, está incluida la opción de que hará el pic en caso de reiniciarse por causas externas.
programar de forma incorrecta por pensar que el pic actuará errático no sería mi solución.