TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: cmontoya en 06 de Noviembre de 2013, 17:46:14

Título: Problema con codigo utilizando IF y un presostato
Publicado por: cmontoya en 06 de Noviembre de 2013, 17:46:14
Hola amigos
Tengo en reparación un lavadora GE, me resolví por hacer la tarjeta con un pic, primeras pruebas de lavado y centrifugado funciono muy bien pero me salió un problema al adaptar el presostato , mi código es muy sencillo

while(true){
output_b(0x00);
if ( input(PIN_A1)==1){ //boton inicio
output_high(llenado);//Activo la electrovalvula
delay_ms(500);
}
if ( input(PIN_A4)==1){//si el presostato esta lleno
output_low(llenado); );//Desativo la electrovalvula
delay_ms(500);
//Lavado/////////////////////////////////////////////
output_high(lavado);
delay_ms(7000);
output_b(0x00);
delay_ms(10000);
//Centrifugado///////////////////////////////////////
output_high(centrifigado);
delay_ms(7000);
output_b(0x00);
delay_ms(1000);


//////Vuelve a llenar el tanque/////////////////
if ( input(PIN_A4)==0){//si el presostato dice que esta desocupado
output_high(llenado); );//Activo la electrovalvula
delay_ms(500);
if ( input(PIN_A4)==1){ //si el presostato esta lleno
output_low(llenado); //Desativo la electrovalvula
delay_ms(500);
//enjuagado/////////////////////////////////////////////
output_high(lavado);
delay_ms(7000);
output_b(0x00);
delay_ms(10000);
//Centrifugado///////////////////////////////////////
output_high(centrifigado);
delay_ms(7000);
output_b(0x00);
delay_ms(1000);
}
}
}
}//Se supone que acaba
El problema que tengo es que cuando acaba de hacer el ciclo de lavado y enjuagado  vuelve y repite y se me vuelve como un bucle y solo lo tiene que hacer una ves (lleno-lavo-centrifugo-vuelvo a llenar-enjuago-centrifugo-y listo)
Agradezo cualquier ayuda  en mi código 

Título: Re: Problema con codigo utilizando IF y un presostato
Publicado por: AngelGris en 06 de Noviembre de 2013, 22:26:56
  Creo que además de lo que te ocurre y es que si bien evalúas si el presostato indica lleno si es que no llegase a indicar lleno aún así inicias el ciclo de lavado.

  Tal vez podrías acomodar el código y probar algo así...

  Para este caso el switch de encendido debería ser un pulsador.

Código: C
  1. unsigned char pasadas;
  2.  
  3. while(true)
  4. {
  5.   if (input(PIN_A1) == 1) // boton de encendido
  6.   {
  7.      do
  8.      {
  9.        activar llenado
  10.        while (input(PIN_A4 != 1)); //espera al presostato
  11.        desactivar llenado
  12.        comenzar ciclo de lavado
  13.        retardo necesario
  14.        output_b(0x00);
  15.        retardo necesario
  16.        comenzar centrifugado
  17.        retardo necesario
  18.        output_b(0x00);
  19.        pasadas--; //decremento variable pasadas
  20.      }
  21.      while (pasadas > 0);
  22.   }
  23.   pasadas = 2;
  24. }
Título: Re: Problema con codigo utilizando IF y un presostato
Publicado por: cmontoya en 07 de Noviembre de 2013, 23:25:18
  Creo que además de lo que te ocurre y es que si bien evalúas si el presostato indica lleno si es que no llegase a indicar lleno aún así inicias el ciclo de lavado.

  Tal vez podrías acomodar el código y probar algo así...

  Para este caso el switch de encendido debería ser un pulsador.

Código: C
  1. unsigned char pasadas;
  2.  
  3. while(true)
  4. {
  5.   if (input(PIN_A1) == 1) // boton de encendido
  6.   {
  7.      do
  8.      {
  9.        activar llenado
  10.        while (input(PIN_A4 != 1)); //espera al presostato
  11.        desactivar llenado
  12.        comenzar ciclo de lavado
  13.        retardo necesario
  14.        output_b(0x00);
  15.        retardo necesario
  16.        comenzar centrifugado
  17.        retardo necesario
  18.        output_b(0x00);
  19.        pasadas--; //decremento variable pasadas
  20.      }
  21.      while (pasadas > 0);
  22.   }
  23.   pasadas = 2;
  24. }

Muchas gracias por  la ayuda  ((:-))
La verdad me sirvió mucho, claro que al comienzo no me funcionaba muy bien y me di de cuenta que había un paréntesis  mal ubicado

while (input(PIN_A4) != 1); //espera al presostato

Pues lo corregí y funciona de perlas………

Muchas gracias.

Título: Re: Problema con codigo utilizando IF y un presostato
Publicado por: AngelGris en 07 de Noviembre de 2013, 23:38:48
  Creo que además de lo que te ocurre y es que si bien evalúas si el presostato indica lleno si es que no llegase a indicar lleno aún así inicias el ciclo de lavado.

  Tal vez podrías acomodar el código y probar algo así...

  Para este caso el switch de encendido debería ser un pulsador.

Código: C
  1. unsigned char pasadas;
  2.  
  3. while(true)
  4. {
  5.   if (input(PIN_A1) == 1) // boton de encendido
  6.   {
  7.      do
  8.      {
  9.        activar llenado
  10.        while (input(PIN_A4 != 1)); //espera al presostato
  11.        desactivar llenado
  12.        comenzar ciclo de lavado
  13.        retardo necesario
  14.        output_b(0x00);
  15.        retardo necesario
  16.        comenzar centrifugado
  17.        retardo necesario
  18.        output_b(0x00);
  19.        pasadas--; //decremento variable pasadas
  20.      }
  21.      while (pasadas > 0);
  22.   }
  23.   pasadas = 2;
  24. }

Muchas gracias por  la ayuda  ((:-))
La verdad me sirvió mucho, claro que al comienzo no me funcionaba muy bien y me di de cuenta que había un paréntesis  mal ubicado

while (input(PIN_A4) != 1); //espera al presostato

Pues lo corregí y funciona de perlas………

Muchas gracias.



  Que bueno que funcione.

  Bien pudo haber sido un error de tipeo o una confusión por no utilizar CCS y entonces me cuesta un poco comprender el código.