Contador programable para Bobinadora

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.

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:
Adjunto el programa con las modificaciones para que lo puedas compilar.
Si no funciona, por lo menos ya podrás realizar cambios y probar.

Saludos.
 

Adjuntos

  • 16F628A Bobinadora.rar
    57.5 KB · Visitas: 395
Antes que nada agradezo todo tu trabajo pero haber en el rar que vos me pasas encuentro archivos con cantidad de extensiones entre ellos veo dos .c (kbd) osea el teclado y el programa de la bobinadora.c , tengo que reemplazar el kbd del ccs por tu archivo? también veo un archivo .hex este ya podría pasarlo al pic? y así probar el circuito? reitero muchísimas gracias.
 
Antes que nada agradezo todo tu trabajo pero haber en el rar que vos me pasas encuentro archivos con cantidad de extensiones entre ellos veo dos .c (kbd) osea el teclado y el programa de la bobinadora.c , tengo que reemplazar el kbd del ccs por tu archivo? también veo un archivo .hex este ya podría pasarlo al pic? y así probar el circuito? reitero muchísimas gracias.
No tienes que reemplazar ningún archivo, usa los que están dentro de la carpeta del proyecto.
La librería kbd.c que se encuentra ahí, es la que ya está modificada para ese programa.
Y si puedes utilizar ese archivo hex para que veas si funciona el programa.
El resto de archivos son los que crea el compilador, y los de la simulación.

Saludos.
 
Siguiendo todos tus pasos basándome en tu programa y en un kbd.c o en la de ccs original tengo estos errores pero por parte del LCD:
Warning 203 "Codigo del 05032012.c" Line 70(1,1) Condition always TRUE
***Error 12"Codigo del 05032012.c" Line 187(13,14) Undefined identifier --lcd_enviar
***Error 12"Codigo del 05032012.c" Line 208(13,14) Undefined identifier --lcd_enviar
***Error 12"Codigo del 05032012.c" Line 210(13,14) Undefined identifier --lcd_enviar

Luego de investigar creo que este se debe o se relaciona con
#define use_portb_lcd TRUE pero no puedo llegar al caso!
 
Por eso te dije que usaras el programa que subí, ese ya tiene comentadas las instrucciones "lcd_enviar ()",
que deben ser parte de la librería que se usó para ese programa. Coméntalas o elimínalas, no son importantes.
También ya tiene modificada la librería kbd.c, que aunque se llama igual que la original, se accede a ella de forma diferente.
Nota que se usa #include "kbd.c" en vez de #include <kbd.c>
Eso hace que el compilador busque la librería en la carpeta del proyecto, y no en la carpeta Drivers.
La advertencia 203 sólo es porque varios usan en PCWHD while (1) en vez de while (true).
Pero esa advertencia también puede ser generada por otro tipo de condiciones.

Saludos.
 
Bueno ya logre compilar el programa! ahora mi unico problema es en el proteus .. cuando simulo no puedo corroborar el 2do menu (introd veultas) en el cual yo tendria que poder introd 4 cifras para que el contador llege a esas cifras esta en el programa pero no en el proteus! ya intente reiniciando el proteus poniendo el archivo cof y el archivo hex en el pic etc.
 
Adjunto un programa para un contador de bobinadora escrito por mí, en lenguaje C con PCWHD Compiler.
El proyecto no utiliza librerías extra, y puede contar hasta 99999 vueltas.
La cantidad de vueltas se ingresa por un teclado 3x4 y se tiene la posibilidad de guardar la cantidad en la EEPROM interna.
He utilizado un PIC16F628A y el programa actual ocupa toda la ROM del microcontrolador.
Si desean añadir más funciones, pueden cambiar el 16F628A por un 16F648A que tiene más capacidad.
Por ahora el proyecto cuenta con las funciones necesarias para el contador, y pueden modificar el código por si requieren cambiar u optimizar el programa para mejor desempeño o añadir más funciones.

Dentro del archivo comprimido se encuentra el código fuente, la simulación y el esquema.

Espero que sea de utilidad y cualquier mejora que realicen al código, espero puedan publicarla aquí mismo.

Nota:
El programa lo he probado físicamente con pulsadores, pero no tengo idea qué tipo de sensor se pueda usar para que se detecte cuando la bobinadora retroceda y se empiece a contar hacia atrás.
Cualquier sugerencia es bienvenida para colaborar con el proyecto.

Saludos y suerte.
 

Adjuntos

  • 16F628A Contador para Bobinadora.rar
    156.7 KB · Visitas: 835
  • Bobinadora SCH.jpg
    Bobinadora SCH.jpg
    127.6 KB · Visitas: 525
Hola, cuando vi el proyecto me parecio muy bueno y me decidí a montarlo para automatizar la bobinadora de un colega, decir que si controla muy bien pero el buzer no consigo que funcione.
Si funcina en la simulación, he intentado modificar en el codigo la frecuencia y mas tiempo de sonido y cuando compilo con PCW ya no funciona la simulación, el display indica bien pero al pulsar el teclado no responde, aun no tacando nada en el codigo al compilar deja de funcionar, he creado un proyecto nuevo y nada de nada.
Agradeceria ayuda a ver si lo consigo.
Gracias
.
 
No deberías tener problemas de ningún tipo para hacer funcionar el circuito.
El proyecto está probado y funciona bien tal cual y como está en el diagrama.
Posiblemente estés conectando algo mal y el buzzer no sea de 5V o requiera más corriente.
Coloca un transistor PNP como buffer y una resistencia pull-up en la base para controlar el buzzer.
También verifica las líneas del teclado matricial, pues todo ha sido verificado antes de postear el proyecto.

Suerte.
 
Gracias por responder, ya he probado a colocar un amplificador al buzer y nada
si con algunos buzer da un ligero sonido, he medido en la salida y siempre hay -4 v. mas o menos y cuando debe sonar solo varia unos mv., he probado con otro pic y se comporta igual.
Y el problema que tengo es que al compilar deja de funcionar, creo que es algo de las librerias lcd o kbd pues en la simulación el teclado no responde.
Resaltar que no tengo demasiados conocimientos en esto de la programación pero si me gustaria intentar hacer algunos cambios cmo alargar el tiempo de sonido, pues donde tiene este la maquina hay mucho ruido.
Estoy utilizando para editar y compilar PCWHD y creo que no lo hago bien o me falta algo, el caso es que no da error al compilar pero deja de funcionar en la simulación, he intentado cargar el hex que arroja y me da error de verificación.
con el PCW he creado un proyecto que incluye lcd, kbc y 16f628a, podria hacerme el favor de indicarme como debo hacerlo para poder compilar bien?
El equipo ya está armado funcionando todo bien menos el buzer con el hex original.
Subiré aqui el pcb y fotos cuado lo tenga totalmente listo.
Gracias de nuevo.
 
Última edición:
ya he probado a colocar un amplificador al buzer y nada.
Si con algunos buzzer da un ligero sonido.
He usado un pequeño buzzer de 5V estándar sin problemas, el sonido es bajo, pero así suenan esos buzzers.
Con un transistor como buffer para el buzzer ya podrías controlar cualquier otro tipo a otros voltajes.
el problema que tengo es que al compilar deja de funcionar, creo que es algo de las librerías lcd o kbd pues en la simulación el teclado no responde.
Podría ser. Tal vez necesites actualizar el programa para corregir posibles errores en las librerías.
podría hacerme el favor de indicarme como debo hacerlo para poder compilar bien?
El proyecto que subí en el post #9 funciona sin problemas, hasta el momento no se han encontrado bugs.
Cuida bien todo lo que cambies al realizar modificaciones, siempre realiza una prueba con cada cambio.

Revisa muy bien las características de los componentes que uses en el circuito, (sobre todo el buzzer),
pues todo funciona bien.

Nota:
Cuando se finaliza un conteo, se puede volver a presionar la tecla # para realizar otro conteo.

Suerte.
 
Yo particularmente le di otro fin a este contador de vueltas de bobinadora , lo use para contar tapitas con un sensor óptico pero bueno es otra historia , tuve problemas en su momento con las librerías del teclado y la del lcd. especialmente con las del teclado , danos el error que te tira asi te puedo ayudar.
 
Insisto en que el equipo funciona, está armado y funcionando perfecto, el problema del buzer es que no suena y puede que no encontré el adecuado.
El problema es que con PCWHD Compiler creo el proyecto y compilo, este hex que arroja ya no funciona, si el display indica bien pero el teclado no responde simulando en proteus.
Seguramente el problema está en la libreria kbd o en la configuración del PCW, hay algo que no estoy haciendo bien.
Si tienen plantilla para PCW del proyecto agradeceria que la subieran aqui, seguro que es una tonteria pero no alcanzo a dar con el problema.
Necesito controlar la salida del buzer en tiempo y frecuencia o al menos intentarlo y aprender al mismo tiempo que falta me hace.
Espero impaciente Su ayuda.
Gracias
 

Adjuntos

  • 2013-10-13 12.10.03.jpg
    2013-10-13 12.10.03.jpg
    74.4 KB · Visitas: 653
Sería posible postear los archivos lcd.c,kbd.c y 16f628.h que usaron para compilar el fuente, creo que el problema lo tengo en la configuración de estos archivos en PCW, no se si lo hago bien y el caso es que no me va.
Gracias
 
Última edición:
¿Sería posible postear los archivos lcd.c,kbd.c y 16f628.h que usaron para compilar el fuente?, creo que el problema lo tengo en la configuración de estos archivos en PCW

¿Leíste lo que te mencioné anteriormente?
Tal vez necesites actualizar el programa para corregir posibles errores en las librerías.
Eso ha resuelto muchos problemas con las librerías.
no sé si lo hago bien y el caso es que no me va.
Tampoco nosotros lo sabemos, pues el código lo estás modificando tú.

Si el problema lo tienes con el teclado, tal vez tengas problema con la librería KBD.C
Utiliza la que está en el archivo del post #2. Esa librería es la misma que usé para el proyecto.
Tan solo tienes que comentar una sentencia.

En esta parte de esa librería, comenta esta parte...
Código:
////////////////// The following defines the keypad layout on port D

// Un-comment the following define to use port B
[B] #define use_portb_kbd TRUE[/B]
Dejándola de esta forma...
Código:
////////////////// The following defines the keypad layout on port D

// Un-comment the following define to use port B
[B]// #define use_portb_kbd TRUE[/B]
Esa definición ahora está incluida en el código del programa.

Suerte.
 
Perdon por hacerles perder su tiempo y por mi ignorancia.
Intentaré explicar como lo estoy haciendo, descomprimo el rar en una carpeta, hago la simulación con proteus y todo va de maravilla.
Abro el fichero bobinadora.c con PCW y veo el codigo con los ficheros incluidos 16f628A.h, lcd.c, kbd.c, sin tocar nada del codigo ni opciones ,le doy a compilar y no me arroja ningun error como se ve en la captura.
Simulo de nuevo y el teclado no responde, he probado todo lo que me ha indicado y no consigo nada.
Adjunto rar con el original y los ficheros arrojados que no funcionan.
Por favor echenle un vistazo a la simulación que seguro que es algo que no estoy haciendo bien,
Hay que tocar algo de la configuración en el compilador??? nunca lo usé antes.
Les agradezco Su ayuda.
Gracias.
 

Adjuntos

  • contador bobinadora.rar
    334.1 KB · Visitas: 240
  • captura 1.jpg
    captura 1.jpg
    83.3 KB · Visitas: 133
Te vuelvo a repetir, actualiza el programa. "PCWHD Compiler" para resolver los problemas con las librerías.
También se han resuelto algunos problemas más, como el uso de la instrucción SET_TRIS_X
Estás usando una versión anterior: CCS PCM C Compiler, Version 4.104
Y el programa yo lo compilé usando uno más reciente: CCS PCM C Compiler, Version 4.140

Realiza la actualización y verás que todo debe funcionar correctamente.

Saludos.
 
Última edición:
He seguido tus instrucciones, he actualizado el PCW a v4.114 y ahora me aroja error de desbordamiento.
De nuevo pido disculpas y Gracias.
 

Adjuntos

  • captura 2.jpg
    captura 2.jpg
    72.9 KB · Visitas: 59
Por finnnnn, ya puedo compilar sin problemas.
La versión del PCW no era la correcta, probé con varias y solo funciona con la 4.140
Torpeza la mia, Perdon por las molestias, si consigo alguna mejora lo subiré aquí.
Intentaré migrar a un pic de más capacidad porque a este ya no le cabe nada más está al 100x100
Gracias a todos.
 
Atrás
Arriba