Autor Tema: Ayuda el pic se pierde en la programacion  (Leído 1416 veces)

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

Desconectado oswaldof

  • PIC10
  • *
  • Mensajes: 1
Ayuda el pic se pierde en la programacion
« en: 12 de Febrero de 2017, 13:20:23 »
buenas, amigos estoy haciendo un programa para controlar un motor de porton (abre y cierra) pero dado un tiempo de envio de los comandos por pulsadores  el pic se me pierde, es decir, hace lo que quiere. Soy nuevo programando por eso requiero de su ayuda en cualquier cosa que me puedan ayudar se los agradaceria sospecho que es el stack pero no estoy seguro.

 
Citar

#include <16f84a.h>
#fuses nowdt,hs,noprotect,NOPUT
#use delay(clock = 20M)

#use standard_io(b)
#use standard_io(a)
 int8 A=0;
void main () {
set_tris_a(01111);
set_tris_b(0xff);

output_low(pin_b0);
output_low(pin_b1);

while(true){

A=0;

if (input(pin_a2)==0 ) {            // se testea los finales de carrera
   if (input(pin_a3)==0 ) {
 
        while(A<1){ // comienzo del while
       
        A=0;
              if(input(pin_a2)==1){            // ACCION DEL FIN DE CARRERA
                delay_ms(100);
                 if(input(pin_a2)==1){
               output_low(pin_b1);
                output_low(pin_b0);
               A=A+2;
                                    }
                                    }
                             
              if(input(pin_a3)==1){            // ACCION DEL FIN DE CARRERA
                 delay_ms(100);
                 if(input(pin_a3)==1){
                     output_low(pin_b0);
                      output_low(pin_b1);
                      A=A+2;     
                                          }
                                     }
                               
               if (input(pin_a0)==1){           // si se preciona el primer boton (abrir)
                     delay_ms(40);
                    if(input(pin_a0)==0)    {
                         output_low(pin_b1);
                         delay_ms(1500);
                         output_high(pin_b0);
                                    }
                              }     
               
               if (input(pin_a1)==1){           // si se preciona el otro boton (cerrar)
                  delay_ms(40);
                    if(input(pin_a1)==0) {
                   output_low(pin_b0);
                   delay_ms(1500);
                   output_high(pin_b1);                 
                                         }
                                    } 
         
                                   }
      }                     
   }                 
                                       
   A=0;

if (input(pin_a2)==1 ) {   // se testea los finales de carrera abierto completo
   if (input(pin_a3)==0 ) {           // esto para que no sigua abriendo
                  if (input(pin_a1)==1){
                  delay_ms(40);
                    if(input(pin_a1)==0) {
                   output_low(pin_b0);
                   delay_ms(80);
                   output_high(pin_b1);
 
                                        }
                                         }
                          }
                        }
 
if (input(pin_a3)==1 ) {   // se testea los finales de carrera cerrado completo
   if (input(pin_a2)==0 ) {          // esto para que no sigua cerrando
                  if (input(pin_a0)==1){
                  delay_ms(40);
                    if(input(pin_a0)==0) {
                   output_low(pin_b1);
                   delay_ms(80);
                   output_high(pin_b0);
 
                          }
                         }
 
                           }
                        }
 
}// fin del while del pricipio (infinito)
}// fin del void main

enlace de la imagen

[/url]


http://subefotos.com/ver/?51f84532af249eda8f977dc9c4684bc2o.png

tambien tengo el archivo en proteus 8.4 si a alguien le interesa


otro problema que tengo es ue para que el pic reciba la señal de abrir o cerrar tengo que accionar varias veces los pulsadores ayudenme a solventar eso por favor.
« Última modificación: 12 de Febrero de 2017, 14:29:54 por oswaldof »

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re:Ayuda el pic se pierde en la programacion
« Respuesta #1 en: 12 de Febrero de 2017, 14:26:49 »
Hola oswaldof, y gracias por participar del foro, pero debo comentarte que está prohibido publicar varias veces el mismo mensaje.

Por lo tanto, amablemente te propongo leas las REGLAS DEL FORO y trates, en la manera de lo posible cumplirlas.

Desde ya muchas gracias. Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado robo_z

  • PIC10
  • *
  • Mensajes: 16
Re:Ayuda el pic se pierde en la programacion
« Respuesta #2 en: 28 de Marzo de 2017, 14:06:54 »
Hola oswaldof

Simulandolo no parece haber errores, pero si dices que tienes problemas con bloqueo con el pic, puede ser la parte del hardware:

Te Puedo Recomendar lo Siguiente:

1.-Usa optocopladores y no reles.
2.-Aterriza las patas del pic que no estas usando hacia tierra.
3.-Revisa bien la parte de tu fuente de poder del PIC(coloca un capacitor de 100nF entre vcc y tierra).
4.- No veo en tus palabras de configuracion NOBROWNOUT.
5.- Haz Definiciones de tus Pines: Como BTN_ABRIR    PIN_A0, REL_ABRIR    PIN_B0, etc. asi será mas entendible tu codigo.
6.- Puedes Usar un Case Para los Estados de la Puerta: Case ... ABIERTO, Case CERRADO.
7.- Por Ultimo si no te Responden los Botones Puedes Usar Interrupciones del Puerto B o INT0.

Espero te Ayude  :)
« Última modificación: 28 de Marzo de 2017, 14:20:22 por robo_z »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Ayuda el pic se pierde en la programacion
« Respuesta #3 en: 28 de Marzo de 2017, 14:15:14 »
Idente el codigo, y veo que faltan muchas llaves, demasiados if/while a mi gusto, busca resumirlos.

Código: C
  1. #include <16f84a.h>
  2. #fuses nowdt,hs,noprotect,NOPUT
  3. #use delay(clock = 20M)
  4.  
  5. #use standard_io(b)
  6. #use standard_io(a)
  7. int8 A=0;
  8.  
  9. void main ()
  10. {
  11.         set_tris_a(01111);
  12.         set_tris_b(0xff);
  13.  
  14.         output_low(pin_b0);
  15.         output_low(pin_b1);
  16.  
  17.         while(true)
  18.         {
  19.  
  20.                 A=0;
  21.  
  22.                 if (input(pin_a2)==0 )
  23.                 {            // se testea los finales de carrera
  24.                         if (input(pin_a3)==0 )
  25.                         {
  26.  
  27.                         while(A<1)
  28.                         { // comienzo del while
  29.  
  30.                                 A=0;
  31.                             if(input(pin_a2)==1)
  32.                             {            // ACCION DEL FIN DE CARRERA
  33.                                 delay_ms(100);
  34.                                 if(input(pin_a2)==1)
  35.                                 {
  36.                                         output_low(pin_b1);
  37.                                         output_low(pin_b0);
  38.                                         A=A+2;
  39.                                     }
  40.                         }
  41.  
  42.                         if(input(pin_a3)==1)
  43.                         {            // ACCION DEL FIN DE CARRERA
  44.                                 delay_ms(100);
  45.                                 if(input(pin_a3)==1)
  46.                                 {
  47.                                         output_low(pin_b0);
  48.                                         output_low(pin_b1);
  49.                                         A=A+2;    
  50.                                 }
  51.                         }
  52.  
  53.                         if (input(pin_a0)==1)
  54.                         {           // si se preciona el primer boton (abrir)
  55.                                 delay_ms(40);
  56.                                 if(input(pin_a0)==0)    {
  57.                                         output_low(pin_b1);
  58.                                 delay_ms(1500);
  59.                                 output_high(pin_b0);
  60.                                 }
  61.                         }      
  62.                        
  63.                                 if (input(pin_a1)==1)
  64.                                 {           // si se preciona el otro boton (cerrar)
  65.                                         delay_ms(40);
  66.                                         if(input(pin_a1)==0)
  67.                                         {
  68.                                                 output_low(pin_b0);
  69.                                                 delay_ms(1500);
  70.                                                 output_high(pin_b1);                
  71.                                         }
  72.                                 }  
  73.                     }
  74.                 }                      
  75.                 }                  
  76.  
  77.                 A=0;
  78.  
  79.                 if (input(pin_a2)==1 ) {   // se testea los finales de carrera abierto completo
  80.                         if (input(pin_a3)==0 ) {           // esto para que no sigua abriendo
  81.                                 if (input(pin_a1)==1){
  82.                                         delay_ms(40);
  83.                                         if(input(pin_a1)==0) {
  84.                                                 output_low(pin_b0);
  85.                                                 delay_ms(80);
  86.                                                 output_high(pin_b1);
  87.                                                 }
  88.                                         }
  89.                                 }
  90.                         }
  91.  
  92.                         if (input(pin_a3)==1 ) {   // se testea los finales de carrera cerrado completo
  93.                                 if (input(pin_a2)==0 ) {          // esto para que no sigua cerrando
  94.                                         if (input(pin_a0)==1){
  95.                                                 delay_ms(40);
  96.                                                 if(input(pin_a0)==0) {
  97.                                                         output_low(pin_b1);
  98.                                                         delay_ms(80);
  99.                                                         output_high(pin_b0);
  100.                                                 }
  101.                                         }
  102.                                 }
  103.                         }
  104.                 }// fin del while del pricipio (infinito)
  105. }// fin del void main