Buenos dias he encontrado un proyecto de una bobinadora , paso el link debajo , me parecio muy interesante y lo monte en un protoboard pero no logro compilar el programa uso el pic16f628a a 4Mhz , he tenido problemas con las librerias en ccs (lcd.c y KBD.c) entiendo que hay que modificarlas para que funcione el programa.
http://www.micropic.es/mpblog/2010/10/contador-de-vueltas-para-bobinadora/
Muchas gracias de antemano!
Código:
// 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
#include
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT
#use delay(clock=4000000)
#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 Vueltn2-Introd. Vuelt"};
int desbordamiento=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);
printf (lcd_putc,"Contador de Pulsosn By Rober ",);
do
caracter=kbd_getc();
while (caracter=='�');
printf(lcd_putc,"%s",cadena1);
while (1)
{
caracter=kbd_getc();
switch (caracter)
{
case '1':
desbordamiento=0;
set_timer0(0);
menu1();
printf(lcd_putc,"%s",cadena1);
break;
case '2':
desbordamiento=0;
set_timer0(0);
menu2();
printf(lcd_putc,"%s",cadena1);
break;
case '*':
printf(lcd_putc,"f BY BY");
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);
printf(LCD_PUTC,"%Lu",n);
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 otra vez =0
printf(lcd_putc,"f* Motor On/offn# salir");
do
{
caracter=kbd_getc();
switch (caracter)
{
case '*':
if (tecla_enter==0)
{
printf(lcd_putc,"fMotor ONn cuenta:");
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();
printf(lcd_putc,"Motor OFF");
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;
printf(lcd_putc,"fN. Vueltas (4cifras)n ");
lcd_enviar(LCD_COMANDO,LCD_CURSOR_ON); // activo cursor y blinker
do
{
caracter=kbd_getc();
if (caracter!='�')
{
printf(lcd_putc,"%c"caracter);
numeros[contador_caracter]=caracter;
contador_caracter++;
}
}
while (caracter!='#'&&contador_caracter<=4);
numeros[contador_caracter]='�';
vueltas=atol(numeros);
lcd_enviar(LCD_COMANDO,LCD_CLEAR);
lcd_enviar(LCD_COMANDO,LCD_HOME);
printf(lcd_putc,"f* Motor On/offn# salir");
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;
printf(lcd_putc,"fON Fin: %Luncuenta:",vueltas);
set_tris_a(0x10);
puertoA3=1; //Activo motor
}
else
{
lcd_gotoxy(1,1);
printf(lcd_putc,"Off Fin: %Lun cuenta:",vueltas);
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!='#'&&motor_off!=2);
if (motor_off==2)
{
printf(lcd_putc,"fSe han Bobinado: n %Lu Vueltas",n);
do
caracter=kbd_getc();
while (caracter=='�');
}
}
http://www.micropic.es/mpblog/2010/10/contador-de-vueltas-para-bobinadora/
Muchas gracias de antemano!
Última edición por un moderador: