Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
juarez321

Contador de voltas para bobinadeira

Recommended Posts

Boa noite pessoal, é minha primeira vez por aqui e já venho pedindo ajuda, vamos ao pedido, estou montando um contado de voltas para uma maquina de enrolar transformador, ele é muito interessante, tem a opção de programar a quantidade de espiras para desligar o motos apos atingir o numero programado, ou contar direto sem programação, toda programação ta funcionando muito bem, o que ta acontecendo é o seguinte, ele conta normalmente em qualquer velocidade até 254, ai pula para 256, ai segue normal até 510, ai pula para 512, ou seja, ele pula 1 a cada multiplo de 255, segue a baico o código fonte.

 

// Debe recordarse que las líneas RA0-RA2 actúan ahora como salida de señales de control
// hacia el LCD. Al estar conectadas con sendos interruptores en la MicroPIC Trainer,
// estos deben estar a nivel lógico "1" permanentemente, es decir en la posicion
//marcada como 0 en la placa
//Datos del LCD conectado al puerto B
// Teclado conectado al puerto B: Columna 0,1,2 a B5,B6 y B7. Fila 0,1,2 y 3 a B1, B2,B3 y B4
//RA3 conecto la salida para el motor. En un principi funciona como salida de enable. Se puede
//estudiar posibilidad de implementar un control PWM para la velocidad.
//RA4 entrada para el Timer0

#include <16f877a.h>
#include <stdlib.h>
#include <stdio.h>


#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT
#use delay(clock=4000000)
//#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_B1,RCV=PIN_B2)

#define use_portb_kbd TRUE // para evitar error (undefined identifier --set_tris_d)
//#define use_portb_lcd TRUE // para evitar error (undefined identifier --set_tris_d)
#include <LCD2.c>
#include <KBD.c>

#use fast_io(A)
#use fast_io(B)

//#include
//#include

#bit puertoA3 = 5.3   //Usado para control on/off motor

void menu1(void);
void menu2 (void);
int16 contar(void);
int16 introducir_valor(void);

char cadena1[]={"\f1-CONTAR DIRETO\n2-PROGRAMAR"};
int desbordamiento=0;
int amp=0;

void main()
{


   char caracter;

   port_b_pullups(TRUE);
   lcd_init();
   kbd_init();
   set_tris_a(0x10); //A4 como entrada
   puertoA3=0; //inicializo motor con 0

   //lcd_enviar(LCD_COMANDO,LCD_CURSOR_BLINK); No activo cursor ni blinker

   setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1);
  // delay_us(1000);
   printf (lcd_putc,"Aperte uma tecla \n Para continuar",);
 // delay_us(1000);
   do
     caracter=kbd_getc();
   while (caracter=='\0');
   // delay_us(1000); 
   printf(lcd_putc,"%s",cadena1);
   // delay_us(1000); 
   while (1)
   {
     caracter=kbd_getc();

     switch (caracter)
     {
        case '1':
           desbordamiento=0;
           set_timer0(0);
           menu1();
          // delay_us(1000); 
           printf(lcd_putc,"%s",cadena1);
          // delay_us(1000); 
           break;
        case '2':
           desbordamiento=0;
           set_timer0(0);
           menu2();
          // delay_us(1000); 
           printf(lcd_putc,"%s",cadena1);
         // delay_us(1000); 
           break;
        case '*':
           printf(lcd_putc,"\fSE *****");
          // delay_us(1000); 
           sleep();
     }
   };

}

int16 contar()
{
     int cuenta=0;
     int16 n;


     cuenta=get_timer0();

     if (cuenta==255)
     {
       set_timer0(0);
       desbordamiento++;
     }
     n=256*desbordamiento+cuenta;

     lcd_gotoxy(10,2);
    // delay_us(1000); 
     printf(LCD_PUTC,"%Lu",n);
   //  delay_us(1000); 
     return(n);
}

void menu1()
{
  char caracter;
  int contador_parcial=0;
  int motor_off=1;
  int tecla_enter=0;  //control de la tecla asterisco pulsada primera vez=1, pulsada outra vez =0
 // delay_us(1000); 
  printf(lcd_putc,"\f* Ligar Motor\n# sair");
 // delay_us(1000); 
  do
  {
    caracter=kbd_getc();

    switch (caracter)
    {
       case '*':
          if (tecla_enter==0)
          {
            // delay_us(1000); 
             printf(lcd_putc,"\fMotor Ligado\nConte:");
            // delay_us(1000); 
             set_timer0(contador_parcial);
             tecla_enter=1;
             motor_off=0;
             set_tris_a(0x10);
             puertoA3=1; //activo motor
          }
          else
          {
            lcd_gotoxy(1,1);
            contador_parcial=get_timer0();
          // delay_us(1000); 
            printf(lcd_putc,"Motor Desligado");
          // delay_us(1000); 
            motor_off=1;
            tecla_enter=0;
            set_tris_a(0x10);
            puertoA3=0;  // motor apagado
          }
          break;
       case '#':
          tecla_enter=0;
          motor_off=1;
          set_tris_a(0x10);
          puertoA3=0;
          break;
    }

    if (tecla_enter)
        contar();
  }while (caracter!='#');
}

int16 introducir_valor()
{
  char caracter;
  char numeros[6];
  int contador_caracter=0;
  int16 vueltas;
 // delay_us(1000); 
  printf(lcd_putc,"\fN. de Espiras\n  ");
 // delay_us(1000); 
  
  //lcd_send_byte(LCD_COMANDO,LCD_CURSOR_ON); // activo cursor y blinker
  lcd_enviar(LCD_COMANDO,LCD_CURSOR_ON); // activo cursor y blinker
 // delay_us(1000); 
  do
  {

    caracter=kbd_getc();

    if (caracter!='\0')
    {
      // delay_us(1000); 
      //printf(lcd_putc,"%c"caracter);
       printf(lcd_putc,"%c",caracter); // aqui faltaba la coma antes de la palabra caracter
     // delay_us(1000); 
       numeros[contador_caracter]=caracter;
       contador_caracter++;
    }
  }
  //while (caracter!='#'&amp,&amp;contador_caracter<=4); //Cambiar los punto y coma por coma como en la siguiente linea
  while (caracter!='#'&amp,&amp,contador_caracter<=4);
  numeros[contador_caracter]='\0';
  vueltas=atol(numeros);
  // delay_us(1000); 
  lcd_enviar(LCD_COMANDO,LCD_CLEAR);
 // delay_us(1000); 
  lcd_enviar(LCD_COMANDO,LCD_HOME);
  // delay_us(1000); 
  printf(lcd_putc,"\f* Para Iniciar\n# Para sair");
  // delay_us(1000); 
  return (vueltas);
}


void menu2()
{
  char caracter;
  int16 vueltas;
  int motor_off=1;
  int tecla_enter=0;  //*es la tecla enter y asi controlo si la he pulsado 1 o ninguna vez

  int16 n;

  vueltas=introducir_valor();

  do
  {
    caracter=kbd_getc();

    switch (caracter)
    {
       case '*':
          if (tecla_enter==0)
          {
             tecla_enter=1;
             motor_off=0;
            // delay_us(1000); 
             printf(lcd_putc,"\fTotal: %Lu\nConta: ",vueltas);
            // delay_us(1000); 
             set_tris_a(0x10);
            puertoA3=1; //Activo motor
          }
          else
          {
           // delay_us(1000); 
             lcd_gotoxy(1,1);
             printf(lcd_putc,"Off Fim: %Lu\n conta:",vueltas);
            // delay_us(1000); 
             motor_off=1;
             tecla_enter=0;
             set_tris_a(0x10);
             puertoA3=0; //motor apagado
          }
          break;
       case '#':
          tecla_enter=0;
          motor_off=1;
          set_tris_a(0x10);
         puertoA3=0; //motor apagado
          break;
    }

    if (tecla_enter)
    {
       n=contar();

       if (vueltas==n) /*debo parar motor*/
       {
           motor_off=2; /*Usado para salir de la función*/
           set_tris_a(0x10);
           puertoA3=0; //apago motor
       }
    }
  //}while (caracter!='#'&amp;&amp;motor_off!=2);     //Cambiar los punto y coma por coma como en la siguiente linea
  }while (caracter!='#'&amp,&amp,motor_off!=2);
  if (motor_off==2)
  {
   // delay_us(1000); 
    printf(lcd_putc,"\fEnrolamento com: \n  %Lu Espiras",n);
   // delay_us(1000); 
    do
      caracter=kbd_getc();
    while (caracter=='\0');
  }
}
 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×