Ir ao conteúdo
  • Cadastre-se

juarez321

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

1
  1. 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'); } }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...