Autor Tema: reducion de codigo  (Leído 1682 veces)

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

Desconectado nordestenica

  • PIC16
  • ***
  • Mensajes: 215
reducion de codigo
« en: 26 de Diciembre de 2005, 12:39:00 »
pues nada e escrito este codigo com mis pocas esperiencias e funciona perfectamente pero ay cosas que creo que se puedem reducir por exemplo aqui

void MENU_RESTAURO ( void )
en este menu tengo que acer el mismo trabajo dos vezes e la sulucion que encontre fue duplicar el codigo pero seguro que ay otra forma de acer lo mismo ocupando menos lineas de codigo que opinais




#include <16F84a.H>
#fuses NOWDT,XT, PUT, NOPROTECT
#use delay ( clock=4000000 )
#use standard_io ( A )
#use standard_io ( B )

#define TESTE               PIN_A0
#define LIMPEZA             PIN_A1
#define RELE_TESTE          PIN_B0
#define RELE_LIMPEZA        PIN_B1
#define RELE_FILAMENTO      PIN_B2
#define RESTAURO            PIN_A2
#define VOLT_5              PIN_B3
#define VOLT_6              PIN_B4
#define VOLT_7              PIN_B5
#define VOLT_8              PIN_B6

void MENU_TESTE      ( void );
void MENU_LIMPEZA      ( void );
void MENU_RESTAURO      ( void );



void MENU_RESTAURO ( void )
{

//-------------------------------4,5V-------------------------------------------
   delay_ms(80);
   output_HIGH (RELE_FILAMENTO);//alimentamos o filamento do crt com 4,5v
   output_HIGH (VOLT_5);
   delay_ms(2000);              //filamento ligado durante 2 segundos
   output_LOW (VOLT_5);
   delay_ms(80);
//-----------------------------5,5V---------------------------------------------
   output_HIGH (VOLT_6); // aumentamos de 4,5v para 5,5v
   delay_ms(2000);       // esperamos mais 2 segundos
   output_LOW (VOLT_6);
   delay_ms(80);
//------------------------------6,5V--------------------------------------------
   output_HIGH (VOLT_7); // aumentamos para 6,5v funcionamento normal dos crt
    delay_ms(2000);      // esperamos mais 2 segundos
   output_LOW (VOLT_7);
   delay_ms(80);
//------------------------------7,5V--------------------------------------------
   output_HIGH (VOLT_8); // ligamos ao maximo 7,5v
         delay_ms(5000);// deixamos os filamentos ligados durante 5 segundos pre aquecendo
   OUTPUT_LOW (VOLT_8); // desligamos a saida de 7,5v
   DELAY_MS(80);
   OUTPUT_LOW (RELE_FILAMENTO); //desligamos o rele de filamento fica sem alimentacao
   DELAY_MS(80);
output_HIGH (RELE_LIMPEZA); // aplicamos 300v a G2
output_HIGH (RELE_TESTE );  //alpicamos 300v  G1

         delay_ms(7000);// esperamos 7 segundos e desligamos tudo
   OUTPUT_LOW (RELE_LIMPEZA);
   OUTPUT_LOW (RELE_TESTE);

   //-------------------------------2 volta igual que acima --------------------
   delay_ms(2000);
   output_HIGH (RELE_FILAMENTO);
   output_HIGH (VOLT_5);
   delay_ms(2000);
   output_LOW (VOLT_5);

//-----------------------------5,5V---------------------------------------------
   output_HIGH (VOLT_6);
   delay_ms(2000);
   output_LOW (VOLT_6);
   delay_ms(80);
//------------------------------6,5V--------------------------------------------
   output_HIGH (VOLT_7);
    delay_ms(2000);
   output_LOW (VOLT_7);
   delay_ms(80);
//------------------------------7,5V--------------------------------------------
   output_HIGH (VOLT_8);
          delay_ms(5000);
   OUTPUT_LOW (VOLT_8);
   DELAY_MS(80);
   OUTPUT_LOW (RELE_FILAMENTO);
   DELAY_MS(80);
output_HIGH (RELE_LIMPEZA);
output_HIGH (RELE_TESTE );

         delay_ms(7000);
   OUTPUT_LOW (RELE_LIMPEZA);
   OUTPUT_LOW (RELE_TESTE);

}


//---------------------TESTE CINESCOPIO-----------------------------------------

//1ª ACTIVA FILAMENTO COM 4,5V DURANTE 2 SEGUNDOS
//2º ACTIVA FILAMENTO COM 5,5V DURANTE 2 SEGUNDOS
//3ª ACTIVA FILAMENTO COM 6,5V DURANTE 2 SEGUNDOS
//4ª ACTIVA FILAMENTO COM 7,5V DURANTE 2 SEGUNDOS
//OS FILAMENTOS ESTAO LIGADOS DURANTE 8 SEGUNDOS PRE AQUECENDO
void MENU_TESTE ( void )
{

//-------------------------------4,5V-------------------------------------------
   delay_ms(80);
   output_HIGH (RELE_FILAMENTO);
   output_HIGH (VOLT_5);
   delay_ms(2000);
   output_LOW (VOLT_5);

//-----------------------------5,5V---------------------------------------------
   output_HIGH (VOLT_6);
   delay_ms(2000);
   output_LOW (VOLT_6);
   delay_ms(80);
//------------------------------6,5V--------------------------------------------
   output_HIGH (VOLT_7);
    delay_ms(2000);
   output_LOW (VOLT_7);
   delay_ms(80);
//------------------------------7,5V--------------------------------------------
   output_HIGH (VOLT_8);
         delay_ms(2000);

// 4ª FILAMENTOS LIGADOS A 7,5V ALIMENTA  O RELE TESTE OU G2  A 300V POR 7 SEGUNDOS
// ONDE SE MEDE A INTENSIDADE NUM MILIAMPERIMETRO O RELE _TESTE NUMA SAIDA TEM 300V
// QUANDO ESTA DESLIGADO CARREGA NA ENTRADA UM CAP 400V/ 220NF QUANDO O RELE ACTIVA
//  DESLIGA OS 300V E PASSA A ALIMENTAR G2 ATRAVEZ DA OUTRA SAIDA A ALIMENTACAO VEM DO CAP

   output_HIGH (RELE_TESTE);
   delay_ms(5000);
   output_LOW (RELE_FILAMENTO);
   output_low (RELE_TESTE);
   output_low (VOLT_8);
   delay_ms(80);
}


//-------------------------------LIMPEZA CINESCOPIO-----------------------------
void MENU_LIMPEZA ( void )
{

//-------------------------------4,5V-------------------------------------------
   delay_ms(80);
   output_HIGH (RELE_FILAMENTO);
   output_HIGH (VOLT_5);
   delay_ms(2000);
   output_LOW (VOLT_5);

//-----------------------------5,5V---------------------------------------------
   output_HIGH (VOLT_6);
   delay_ms(2000);
   output_LOW (VOLT_6);
   delay_ms(80);
//------------------------------6,5V--------------------------------------------
   output_HIGH (VOLT_7);
    delay_ms(2000);
   output_LOW (VOLT_7);
   delay_ms(80);
//------------------------------7,5V--------------------------------------------
   output_HIGH (VOLT_8);
         delay_ms(5000);
   OUTPUT_LOW (VOLT_8);
   DELAY_MS(80);
   OUTPUT_LOW (RELE_FILAMENTO);
   DELAY_MS(80);
output_HIGH (RELE_LIMPEZA);
         delay_ms(7000);
   OUTPUT_LOW (RELE_LIMPEZA);

   //-------------------------------4,5V-------------------------------------------
   delay_ms(2000);
   output_HIGH (RELE_FILAMENTO);
   output_HIGH (VOLT_5);
   delay_ms(2000);
   output_LOW (VOLT_5);

//-----------------------------5,5V---------------------------------------------
   output_HIGH (VOLT_6);
   delay_ms(2000);
   output_LOW (VOLT_6);
   delay_ms(80);
//------------------------------6,5V--------------------------------------------
   output_HIGH (VOLT_7);
    delay_ms(2000);
   output_LOW (VOLT_7);
   delay_ms(80);
//------------------------------7,5V--------------------------------------------
   output_HIGH (VOLT_8);
         delay_ms(5000);
   OUTPUT_LOW (VOLT_8);
   DELAY_MS(80);
   OUTPUT_LOW (RELE_FILAMENTO);
   DELAY_MS(80);
output_HIGH (RELE_LIMPEZA);
         delay_ms(7000);
   OUTPUT_LOW (RELE_LIMPEZA);



}
//----------------------------------MAIN---------------------------------------
void main ( void )
{
output_LOW (RELE_TESTE);
output_LOW (RELE_LIMPEZA);



 while ( TRUE )
 {
  if ( input (TESTE) == 1 )
      {
         MENU_TESTE();
      }
      if ( input (LIMPEZA) == 1 )
      {
         MENU_LIMPEZA();
         delay_ms(80);
      }
      if ( input (RESTAURO) == 1 )
      {
         MENU_RESTAURO();
         delay_ms(80);
      }
         }
              }

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: reducion de codigo
« Respuesta #1 en: 26 de Diciembre de 2005, 13:26:00 »
Buenas!!!!si necesitas hacer dos veces la misma cosa o lo haces como tu, es decir lo pones el codigo dos veces o usas un bucle, declaras una variable en este caso puede ser boolean y haz un bucle de esta manera:

Codigo:

                 for(i=0;i<2;i++){
                         el codigo a realizar;
                  }



Y ya esta! ya lo repites dos veces.

Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado nordestenica

  • PIC16
  • ***
  • Mensajes: 215
RE: reducion de codigo
« Respuesta #2 en: 26 de Diciembre de 2005, 16:33:00 »
antes de nada darles las gracias al maestro vszener pues nada una reducion de codigo del 65% para 39% casi nada hehe

otra consulta uso los pines b3 a b6 para comutar unos bc 548 que atacam um regulador lm 317 variando el voltage de salida desde 4,5v asta 7,5v lo que me gustaria saber es si usando el ancho de pulso e un lm 741 consegiria regular el lm 317  usando un solo pin en vez de 4 o antes usar um pote digital 1666 que usa 3 lineas o un 4017 enviandole pulsos com um solo pin e conectando a las salidas los transitores que atacam el lm 317 que opinais quiero haorrar lineas en el pic para otras cosas

assi me a quedado


#include <16F84a.H>
#fuses NOWDT,XT, PUT, NOPROTECT
#use delay ( clock=4000000 )
#use standard_io ( A )
#use standard_io ( B )

#define TESTE               PIN_A0
#define LIMPEZA             PIN_A1
#define RELE_TESTE          PIN_B0
#define RELE_LIMPEZA        PIN_B1
#define RELE_FILAMENTO      PIN_B2
#define RESTAURO            PIN_A2
#define VOLT_5              PIN_B3
#define VOLT_6              PIN_B4
#define VOLT_7              PIN_B5
#define VOLT_8              PIN_B6

void MENU_TESTE      ( void );
void MENU_LIMPEZA      ( void );
void MENU_RESTAURO      ( void );

signed char i;

void MENU_RESTAURO ( void )
{
for(i=0;i<2;i++){
//-------------------------------4,5V-------------------------------------------
   delay_ms(80);
   output_HIGH (RELE_FILAMENTO);//alimentamos o filamento do crt com 4,5v
   output_HIGH (VOLT_5);
   delay_ms(2000);              //filamento ligado durante 2 segundos
   output_LOW (VOLT_5);
   delay_ms(80);
//-----------------------------5,5V---------------------------------------------
   output_HIGH (VOLT_6); // aumentamos de 4,5v para 5,5v
   delay_ms(2000);       // esperamos mais 2 segundos
   output_LOW (VOLT_6);
   delay_ms(80);
//------------------------------6,5V--------------------------------------------
   output_HIGH (VOLT_7); // aumentamos para 6,5v funcionamento normal dos crt
    delay_ms(2000);      // esperamos mais 2 segundos
   output_LOW (VOLT_7);
   delay_ms(80);
//------------------------------7,5V--------------------------------------------
   output_HIGH (VOLT_8); // ligamos ao maximo 7,5v
         delay_ms(5000);// deixamos os filamentos ligados durante 5 segundos pre aquecendo
   OUTPUT_LOW (VOLT_8); // desligamos a saida de 7,5v
   DELAY_MS(80);
   OUTPUT_LOW (RELE_FILAMENTO); //desligamos o rele de filamento fica sem alimentacao
   DELAY_MS(80);
output_HIGH (RELE_LIMPEZA); // aplicamos 300v a G2
output_HIGH (RELE_TESTE );  //alpicamos 300v  G1

         delay_ms(7000);// esperamos 7 segundos e desligamos tudo
   OUTPUT_LOW (RELE_LIMPEZA);
   OUTPUT_LOW (RELE_TESTE);

 
}
}

//---------------------TESTE CINESCOPIO-----------------------------------------

//1ª ACTIVA FILAMENTO COM 4,5V DURANTE 2 SEGUNDOS
//2º ACTIVA FILAMENTO COM 5,5V DURANTE 2 SEGUNDOS
//3ª ACTIVA FILAMENTO COM 6,5V DURANTE 2 SEGUNDOS
//4ª ACTIVA FILAMENTO COM 7,5V DURANTE 2 SEGUNDOS
//OS FILAMENTOS ESTAO LIGADOS DURANTE 8 SEGUNDOS PRE AQUECENDO
void MENU_TESTE ( void )
{

//-------------------------------4,5V-------------------------------------------
   delay_ms(80);
   output_HIGH (RELE_FILAMENTO);
   output_HIGH (VOLT_5);
   delay_ms(2000);
   output_LOW (VOLT_5);

//-----------------------------5,5V---------------------------------------------
   output_HIGH (VOLT_6);
   delay_ms(2000);
   output_LOW (VOLT_6);
   delay_ms(80);
//------------------------------6,5V--------------------------------------------
   output_HIGH (VOLT_7);
    delay_ms(2000);
   output_LOW (VOLT_7);
   delay_ms(80);
//------------------------------7,5V--------------------------------------------
   output_HIGH (VOLT_8);
         delay_ms(2000);

// 4ª FILAMENTOS LIGADOS A 7,5V ALIMENTA  O RELE TESTE OU G2  A 300V POR 7 SEGUNDOS
// ONDE SE MEDE A INTENSIDADE NUM MILIAMPERIMETRO O RELE _TESTE NUMA SAIDA TEM 300V
// QUANDO ESTA DESLIGADO CARREGA NA ENTRADA UM CAP 400V/ 220NF QUANDO O RELE ACTIVA
//  DESLIGA OS 300V E PASSA A ALIMENTAR G2 ATRAVEZ DA OUTRA SAIDA A ALIMENTACAO VEM DO CAP

   output_HIGH (RELE_TESTE);
   delay_ms(5000);
   output_LOW (RELE_FILAMENTO);
   output_low (RELE_TESTE);
   output_low (VOLT_8);
   delay_ms(80);

}

//-------------------------------LIMPEZA CINESCOPIO-----------------------------
void MENU_LIMPEZA ( void )
{
for(i=0;i<2;i++){
//-------------------------------4,5V-------------------------------------------
   delay_ms(80);
   output_HIGH (RELE_FILAMENTO);
   output_HIGH (VOLT_5);
   delay_ms(2000);
   output_LOW (VOLT_5);

//-----------------------------5,5V---------------------------------------------
   output_HIGH (VOLT_6);
   delay_ms(2000);
   output_LOW (VOLT_6);
   delay_ms(80);
//------------------------------6,5V--------------------------------------------
   output_HIGH (VOLT_7);
    delay_ms(2000);
   output_LOW (VOLT_7);
   delay_ms(80);
//------------------------------7,5V--------------------------------------------
   output_HIGH (VOLT_8);
         delay_ms(5000);
   OUTPUT_LOW (VOLT_8);
   DELAY_MS(80);
   OUTPUT_LOW (RELE_FILAMENTO);
   DELAY_MS(80);
output_HIGH (RELE_LIMPEZA);
         delay_ms(7000);
   OUTPUT_LOW (RELE_LIMPEZA);

}

}
//----------------------------------MAIN---------------------------------------
void main ( void )
{

output_LOW (RELE_TESTE);
output_LOW (RELE_LIMPEZA);

 while ( TRUE )
 {
  if ( input (TESTE) == 1 )
      {
         MENU_TESTE();

      }
      if ( input (LIMPEZA) == 1 )
      {
         MENU_LIMPEZA();
         delay_ms(80);
      }
      if ( input (RESTAURO) == 1 )
      {
         MENU_RESTAURO();
         delay_ms(80);
      }
         }
              }

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: reducion de codigo
« Respuesta #3 en: 26 de Diciembre de 2005, 17:26:00 »
¿podrias poner un esquematico en PROTEUS o un dibujo del circuito?Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado nordestenica

  • PIC16
  • ***
  • Mensajes: 215
RE: reducion de codigo
« Respuesta #4 en: 27 de Diciembre de 2005, 05:11:00 »
pues lo que estoi intentando acer es um recuperador de cinescopios  trc ya que um recuperador professional vale um monton

aqui te dejo alguns links al respecto

http://www.comunidadelectronicos.com/proyectos/reactivador.htm
http://paginadekueyar.iespana.es/paginadekueyar/index.html

aqui te dejo la simulacion le falta la parte del regulador de minino es igual entre 0 e 3v pero de maxima no puede passar de 7,5v ya que el funcionamiento normal de los filamentos del crt es de 6,5v

http://miarroba.com/foros/ver.php?foroid=348538&temaid=4010344

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: reducion de codigo
« Respuesta #5 en: 28 de Diciembre de 2005, 08:41:00 »
Haber si cuando termine las fiestas y vuelva a casa y me siente en mi ordenador de siempre jeje trasteo un poco con el circuito!

Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte