TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: arhonbe en 13 de Agosto de 2018, 08:36:13

Título: Problema con la programación del PIC - inexplicable para mi.
Publicado por: arhonbe en 13 de Agosto de 2018, 08:36:13
Buen día, gente.
Estoy desarrollando un sistema diferenciador de productos para la empresa en la cual trabajo, en João Pessoa, Brasil. Es un sistema simple que cuenta la cantidad de marcas en embalajes que van pasando por una cinta transportadora. Si la cuenta es diferente a la cantidad indicada por el operador (pulsador y displays de 7 segmentos), la máquina para.
Estoy usando el compilador CCS y programando un PIC 16F877A con PicKit3.
El sistema estaba funcionando correctamente tanto en el Proteus, en la protoboard y en el circuito impreso. Testado durante más de un mes y todo OK. Pero de repente dejó de funcionar en la protoboard y en el circuito impreso; solamente en Proteus que funciona.
Verifiquei el hardware de arriba a abajo y todo estaba en orden. Después partí para el código y el sistema solamente volvió a funcionar cuando retiré una linea de código, un delay_ms(4000); . El problema es que realmente necesito colocar ese retardo.
¿Por qué estaba funcionando normalmente y de un momento para otro dejó de hacerlo? ¿Por qué no me está permitiendo agregar ese retardo?
A seguir parte final del código. Agradezco desde ya las ayudas.

Código: [Seleccionar]

///////////////////////// CONTROLE ///////////////////////
 
   if(input(pin_c2)==1){                                 // Se sensor 1 está ativado (produto).
   
    yy=1;
    output_low(pin_c3);                               // desliga saída.
    output_low(pin_c4);                              // desliga saída.
   
   
    estado_atual = input(pin_c1);                          //carrega entrada de sensor 2 em variável.
   
        if(estado_atual==1 && estado_anterior==0){        // Se detecta flanco de subida.
             xconta = xconta+1;                          // Contagem...
             
        }
        estado_anterior=estado_atual;
                         
         
   }
     else{                                              // Se sensor 1 não está ativado (produto).
         
         
         if((reg1==xconta)&&(yy==1)){             // compara registros. IGUAIS e já passou 1 ou mais produtos.   
            xconta =0;
            yy=2;
         }
         else if(!(reg1==xconta)&& (yy==1)){    // compara registros. DIFERENTES e já passou 1 ou mais produtos.
            xconta =0;
            yy=3;
         }
        else if(yy==2){
            output_low(pin_c3);                 //desliga led ERR.
            output_high(pin_c4);                // liga led OK.
            yy=0;
         }
         else if(yy==3){
            output_high(pin_c3);                 //liga led ERR.
            output_low(pin_c4);                // desliga led OK.
            // delay_ms(4000); // <-- RETARDO QUE ESTÁ DANDO PROBLEMA!!!
           
         }
         
         else{
            output_low(pin_c3); // desliga led ERR
         }
         
         
   } //else
         output_d(xconta);
  } //while

} // main


Título: Re:Problema con la programación del PIC - inexplicable para mi.
Publicado por: KILLERJC en 13 de Agosto de 2018, 08:58:57
Hola arhonde.

- Es muy dificil tratar de seguir un codigo cuando no hay un contexto de que hace cada variable, ya que nosotros no tenemos ni idea de donde esta ubicado ese codigo, si hay otro codigo que lo afecte, por lo que veo esta en el main, por los comentarios.
- Es muy dificil entender que es cada variable, cuando sus nombres son yy, reg1, xconta , es decir cuando no te dan nombres significativos. Tal ves para vos sea muy simple por que estas con el codigo todo el tiempo, pero para una persona que recien ve el codigo, es insensato, debo imaginar que reg1 es lo que cuenta la placa y xconta lo del usuario, yy no tengo ni idea que es.
- El que tengas que poner un delay de 4s me parece una mala practica directamente. Es demasiado, son 4 segundos que el micro pasa a ser una roca si no fuera por las interrupciones.

Citar
¿Por qué estaba funcionando normalmente y de un momento para otro dejó de hacerlo? ¿Por qué no me está permitiendo agregar ese retardo?

Los problemas que se me ocurren:

- Sensores funcionando mal.
- Tiempos de deteccion variables, si por ejemplo cruzan 2 productos en menos de 4 segundos, con ese delay nunca vas a poder hacer algo bueno. Y ni hablar si hay mas delays dentro del loop del main.

Tal ves para la "señalizacion" es decir leds con ERR, OK y muestra en el display, te conviene hacerlo con un Timer y su interrupcion.
Título: Re:Problema con la programación del PIC - inexplicable para mi.
Publicado por: arhonbe en 13 de Agosto de 2018, 10:09:26
Hola KillerJC.

Muchas gracias por tu respuesta. Ya verifiqué los sensores, y están OK.

No deseo modificar el código, porque como ya dije el sistema funcionó perfectamente durante un mes. Funcionó exactamente de la forma que yo queria. Ya probé cambienado el PIC, pero no lo resolvió.

Solamente quiero entender porque una simple línea de código está bloqueando todo y antes no lo hacía. Muchas gracias nuevamente.
Título: Re:Problema con la programación del PIC - inexplicable para mi.
Publicado por: KILLERJC en 13 de Agosto de 2018, 10:41:16
Disculpa que sea un poco insistente, pero es muy dificil tratar de dilucidar que puede estar saliendo mal, cuando solo tenemos un pedazo de codigo, me explico un poco mas:

Citar
Solamente quiero entender porque una simple línea de código está bloqueando todo y antes no lo hacía. Muchas gracias nuevamente.

Cuando diseñas algo tenes muchas variables, la velocidad con que pasa el producto, tiempo entre productos, algo un poco imposible para nosotros verificar desde la lejania, y seguramente alguna que es "temporal" no la estas teniendo en cuenta. Te lo vuelvo a decir. Al poner un delay de 4s estas haciendo que el microcontrolador no responda por esos 4seg. y de alli que tengas un error en lo que haces.

Citar
Solamente quiero entender porque una simple línea de código está bloqueando todo y antes no lo hacía. Muchas gracias nuevamente.

Un delay no te va a parar todo el programa, solo lo va a hacer funcionar mal. Si esta mal definido la frecuencia del cristal, o la frecuencia que ingresa no es la correcta, entonces es otro problema, ya que el delay se calculo para ese cristal y si tenes una frecuencia mucho menor, implica que el delay es mucho mas largo, casi "bloqueandolo".

Entonces y resumiendo.
El software no cambio, asi que las causas de mal funcionamiento son:
- Hardware.
- Cambios temporales en el sensado.

Me decis que los sensores funcionan correcto, el PIC lo cambiaste y sigue funcionando igual, ¿entonces que queda?:
- Observar la frecuencia de entrada
- Ver que no cambio o que no existe cambio temporal en el sensado, que el programa no soporte (demasiado rapido, etc).

Es la unica explicacion que te puedo dar de porque NO funciona ahora. Estas apuntando al software cuando al no haber cambios en el mismo dejo de funcionar.
Título: Re:Problema con la programación del PIC - inexplicable para mi.
Publicado por: arhonbe en 13 de Agosto de 2018, 10:51:37
Muchas gracias nuevamente KillerJC.

Identifiqué el problema. Era un resistor de pull-down de un sensor que estaba con mal contacto. Eso hacía con que el cp entrada directamente a ese else if que tenía el retardo y se quedara allá desde el incio del programa, cuando en realidad debería hacerlo al final.

Un abrazo.

PD: de que país sos?
Título: Re:Problema con la programación del PIC - inexplicable para mi.
Publicado por: KILLERJC en 13 de Agosto de 2018, 13:39:19
Bueno me alegro que encontraste la solución, y que no aumente el grado de incertidumbre al seguir fracasando en encontrar cual era el error (es lo mas feo ).
Asi que por lo menos te felicito por haberlo solucionado  :-/


PD: Soy de Argentina.
Título: Re:Problema con la programación del PIC - inexplicable para mi.
Publicado por: MGLSOFT en 13 de Agosto de 2018, 14:36:35
Acordate de ponerle el RESUELTO al titulo del hilo, así quienes lo leen no contestan nuevamente y aprenden de la solución.

Saludos!!