Ayuda con programacion para controlar motor

Hola amigos necesito ayuda para programar el PIC16F628A, la idea es poder controlar a travez de RA0(START) y RA1(STOP) el funcionamiento de un motor, mi problema principal esta en no poder parar el motor cuando este esta funcionando durante un determinado tiempo, necesito poder parar el motor en cualquier momento de dicha temporizacion, se podria decir que es como una parada de emergencia. No se pueden realizar modificacion al esquema del circuito, adjunto codigo de programa que tengo, esperare atento a sus comentarios. Saludos.

#byte porta=05
#byte portb=06
#use fast_io(a)
#use fast_io(b)
#fuses NOPROTECT,NOCPD,NOLVP,NOWDT,XT
#use delay(clock=4000000) //Reloj 4MHz


void main()
{
set_tris_a(0xff); // Puerto A como entrada
set_tris_b(0x00); // Puerto B como entrada
portb=0; // Limpia puerto B

DO{

IF (INPUT(PIN_A0)){ // Si se presiona RA0
delay_ms(100);
portb=1;
delay_ms(5000);
}

IF (INPUT(PIN_A1)){ // Si se presiona RA1
delay_ms(100);
portb=0;
}
}
WHILE(TRUE);
}


El esquematico lo pueden descargar aqui:
 
No me quedo muy claro...el circuito no lo podemos modificar, osea que hay que usar el boton STOP para detener el motor... Lo que necesitas es que ni bien se preione el boton se detenga? Sino que necesitas que haga el programa?
Saludos

PD: te aconsejo subir el diagrama aqui en el foro para no tener que esperar en megaupload, si la imagen es grande la pones en un winzip ;)
 
Hola, el circuito no se puede modificar y la idea es cuando se presione el boton STOP debe detenerse el motor, lo que pasa es que no se detiene debido al delay_ms(5000);, lo que quiero es poder detenerlo en ese delay, si saco el delay del programa el motor se para sin problemas con el boton STOP, pero la idea es poder detenerlo mientras esta en el delay. Atento a sus comentarios.
 
Que tal si se utiliza una interrupción, aunque habría que mirar si el micro responde a una interrupción mientras se esta ejecutando un delay, eso no se.
 
Hola, no puedo utilizar la interrupcion RB0 ya que ahi se encuentra la salida hacia el motor, ademas el pic16f628a no tiene interrupcion por cambio de estado.Despues de realizar el delay debe detenerse, pero lo que necesito es poder parar el motor mientras esta en el delay.
 
ok ok ahora si...hay varias formas, lo ideal seria usar la interrupcion, pero no se puede modificar el circuito.
Se me ocurre esto:

PHP:
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//Si no se presiona el boton START, el motor esta detenido, pero si se presiona start          //
//entra en el bucle for el cual cada 1 mili segundo se fija que no se haya presiuonado         //
//el boton stop, si se lo presiono, sale del bucle y se repetiria el ciclo si en el programa      // /principal pones un while                                                                                        // 
//////////////////////////////////////////////////////////////////////////////////////////////////////

unsigned int16 v;

if(START)
{
portb=1;

for(v=0;v<=5000;v++)                                
 {
 delay_ms(1);
 if(STOP) break;
 }
portb=0;
}

else
{
portb=0;
}

Cuando llegue a casa lo pruebo, si podes anda probandolo vos si es lo que necesitas.
Saludos
 
Atrás
Arriba