# Contador programable para Bobinadora



## Finskey

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!


----------



## D@rkbytes

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.


----------



## Finskey

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.


----------



## D@rkbytes

Finskey dijo:


> 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.


----------



## Finskey

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!


----------



## D@rkbytes

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.


----------



## Finskey

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.


----------



## D@rkbytes

Adjunto un programa para un contador de bobinadora escrito por mi, 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 16F88 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 que 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.


----------



## carmant

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
.


----------



## D@rkbytes

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.


----------



## carmant

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.


----------



## D@rkbytes

carmant dijo:


> 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.


carmant dijo:


> 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.


carmant dijo:


> 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.


----------



## Finskey

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.


----------



## carmant

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


----------



## carmant

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


----------



## D@rkbytes

carmant dijo:


> ¿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?


D@rkbytes dijo:


> Tal vez necesites actualizar el programa para corregir posibles errores en las librerías.


Eso ha resuelto muchos problemas con las librerías.


carmant dijo:


> 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.


----------



## carmant

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.


----------



## D@rkbytes

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.


----------



## carmant

He seguido tus instrucciones, he actualizado el PCW a v4.114 y ahora me aroja error de desbordamiento.
De nuevo pido disculpas y Gracias.


----------



## carmant

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.


----------



## Fogonazo

carmant dijo:


> 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í.*_ . .



Podrías ir subiendo el diseño del impreso y algunas fotos de lo que empleaste aquí:

Ver el archivo adjunto 99930​


----------



## carmant

Voy a corregir algunos errores en el pcb, en cuanto lo tenga listo lo subiré.
Por fin lo tengo funcionando aunque aun no he podido solucionar lo del buzer ya no le cabe nada más al pic.
Intentaré migrar a otro mayor.
Gracias por todo y Mis felicitacines al Creador.


----------



## kuman23

me uno a la peticion de fogonazo, no se si podre construirlo ya que soy analfabeto electronicamente, pero si puedes subir el diseño te lo agradeceria. Por cierto despues de leer el post, los sensores que has usado son del tipo hall?.

un saludo


----------



## Finskey

Yo no use sensores hall use una barrera infrarroja , subire mis diseños en un tiempo ya que usea unas fuente   comun que es muy variante , tiene picos maximos que me impiden el funcionamiento del circuito, nececitas una fuente  con un 7805 a la salida para tener 5V contantes.


----------



## kuman23

Finskey dijo:


> Yo no use sensores hall use una barrera infrarroja , subire mis diseños en un tiempo ya que usea unas fuente   comun que es muy variante , tiene picos maximos que me impiden el funcionamiento del circuito, nececitas una fuente  con un 7805 a la salida para tener 5V contantes.



a mi me viene bien cualquier aporte y si ademas esta explicado mejor que mejor.

un saludo


----------



## carmant

Aqui está el pcb realizado con pcwizard, todo lo demas está en este hilo de 
D@rkbytes que es el autor 16F628A Contador para Bobinadora.rar,
Puede que el pcb tenga algun error, comprobar con el esquema por si acaso, el teclado que he usado es de un telefono viejo.
Saludos.


----------



## Finskey

Hace tiempo que estoy con este proyecto al cual no lo use como bobinadora  y tengo una preguntar a usted gran programador Darkbytes , es posible que cuando yo desconecte todo el circuito osea le corte la alimentación en ese momento el numero total que haya contado se guarde en la ROM interna del pic? al otro dia cuando sale el sol volver a conectar el aparato  y que siga contando? muchas gracias


----------



## D@rkbytes

Finskey dijo:


> Hace tiempo que estoy con este proyecto al cual no lo use como bobinadora  y tengo una preguntar a usted gran programador Darkbytes , es posible que cuando yo desconecte todo el circuito osea le corte la alimentación en ese momento el numero total que haya contado se guarde en la ROM interna del pic? al otro dia cuando sale el sol volver a conectar el aparato  y que siga contando? muchas gracias


Si, de hecho al subir el proyecto lo comenté


D@rkbytes dijo:


> La cantidad de vueltas se ingresa por un teclado 3x4 y *se tiene la posibilidad de guardar la cantidad en la EEPROM interna*.


Así que al volver a encender el equipo, se visualiza el último conteo realizado.


Finskey dijo:


> gran programador  D@rkbytes


 Gracias.


----------



## Finskey

Volvi con todo el proyecto que encare  pero tengo problemas con el programa ... en el proteus va todo bien pero en la realidad el lcd no se ve muy bien  pero lo peor es que aveces no cuenta o quizás después de contar alguna veces se para por un momento dejo el programa que use que es muy similar a lo que plantie al principio de esto.  Usare tu programa darkbytes pero quiero saber que es lo que hice mal. Muchas Gracias!


----------



## D@rkbytes

Finskey dijo:


> Usaré tu programa D@rkbytes, pero quiero saber que es lo que hice mal.


No veo que uses mi programa, sino el primero que posteaste.
Tampoco adjuntas el esquema del proyecto, ni la librería que estás usando para el control de la pantalla.
Yo tengo la librería que fue usada para ese programa que adjuntas,
pero es necesario el esquema del proyecto debido a la configuración de pines para la pantalla.

Es requerido por este detalle...
En el programa estás usando el pin RA3 para controlar un motor:
*#bit* *puertoA3* = *5.3  * //Usado para control on/off motor

Pero en la librería LCD2.C el pin RA3 es el control del pin Enable de la pantalla:
*#bit* *lcd_enable* = *5.3*      //RA3 --> Enable

Por lo tanto, esperamos que adjuntes tu proyecto completo para poder ayudarte.


----------



## Finskey

Quiero usar tu programa pero tu programa y tu diseño no coincide con el diseño que plantie desde un principio (lo dejo abajo) fijate RA0.RA1.RA2  en el primer diseño van a los 3 pìnes de control del LCD en el tuyo esto cambia notablemente ...  no quiero decir nada con esto ya que tu proyecto es totalmente superior al mio  solo que he montado el primer proyecto. Espero que ahora este todo lo que necesites. 
Nota: una aclaración en mi circuito esquemático el sensor hall es remplazo por una barrera infrarroja pero se mantiene en los mismos pines de coneccion y RA4 que va a todo el circuito de abajo  nose usa a lo sumo un buzzer  o un led nada mas que eso. Muchas gracias 

PD: //RA3 conecto la salida para el motor. En un principi funciona como salida de enable esto lo encontre en las aclaraciones al principio del programa.


----------



## D@rkbytes

Finskey dijo:


> Quiero usar tu programa pero tu programa y tu diseño no coincide con el diseño que plantee desde un principio (lo dejo abajo) fíjate RA0.RA1.RA2  en el primer diseño van a los 3 pìnes de control del LCD en el tuyo esto cambia notablemente ...  no quiero decir nada con esto ya que tu proyecto es totalmente superior al mio  solo que he montado el primer proyecto. Espero que ahora este todo lo que necesites.
> Nota: una aclaración en mi circuito esquemático el sensor hall es remplazo por una barrera infrarroja pero se mantiene en los mismos pines de conexión y RA4 que va a todo el circuito de abajo  no sé usa, a lo sumo un buzzer  o un led nada más que eso. Muchas gracias
> 
> PD: //RA3 conecto la salida para el motor. En un principio funciona como salida de enable esto lo encontré en las aclaraciones al principio del programa.



La librería LCD2.C que estás adjuntando no es la que requiere el programa que adjuntaste en el post #29
Esa librería es la que viene por defecto con el programa PCWHD Compiler de CCS, igualmente la librería KBD.C.

Si ya tienes el proyecto de simulación creado, también deberías adjuntarlo en vez de de poner el esquema.

Así que, deberías decidirte por un proyecto o que adjuntes bien lo que se requiere para el tuyo.

Saludos.


----------



## Finskey

Lo siento  no me di cuenta en pasarte la simulacion aunque esta falla menos que en la realidad , entonces  usare las que vienen por defecto en el programa para el post 29 , creo que habia cambiado la del LCD porque no me compilaba con la default del programa pero probare de vuelta , adjunto la simulacion. Gracias

Lo de la liberia lcd2.c lo habia hecho porque no me compilaba con el lcd.c me lo habia dicho una de las primeras personas que hizo el proyecto. repito que el proyecto funciona pero tiene algunos errores ya que no soy un experto como usted, aguardo su ayuda.


----------



## D@rkbytes

Finskey dijo:


> Lo siento  no me di cuenta en pasarte la simulación aunque esta falla menos que en la realidad , entonces  usare las que vienen por defecto en el programa para el post 29 , creo que había cambiado la del LCD porque no me compilaba con la default del programa pero probare de vuelta , adjunto la simulación. Gracias
> 
> Lo de la librería lcd2.c lo había hecho porque no me compilaba con el lcd.c me lo había dicho una de las primeras personas que hizo el proyecto. repito que el proyecto funciona pero tiene algunos errores ya que no soy un experto como usted, aguardo su ayuda.


A fin de cuentas decidí usar la librería que tengo yo para ese programa porque tampoco la adjuntaste.
No es indispensable porque se puede usar sin problemas la de CCS usando las funciones que tiene.

Prueba el programa modificado que adjunto, no lo probé físicamente pero debe funcionar.

Suerte.


----------



## Finskey

Las librerías las adjunte  en el post 31  , Ahora funciona mucho mejor  se mejoraron muchos bugs la unica pregunta que tengo es , ¿con la configuración mía es posible usar la EEPROM interna para que guarde el valor al desconectar la alimentación? Veo en tu proyecto los comandos para leer la memoria interna al iniciar y de guardar el dato , sera posible incorporarlo? Segun PCW el %75 de la memoria esta llena , entrara en la restante? reitero muchas gracias  y espero no molestarte demasiado


----------



## D@rkbytes

Finskey dijo:


> ¿Con la configuración mía es posible usar la EEPROM interna para que guarde el valor al desconectar la alimentación? Veo en tu proyecto los comandos para leer la memoria interna al iniciar y de guardar el dato , sera posible incorporarlo?
> Según PCW el %75 de la memoria está llena. ¿Entrará en la restante?


Con el PIC16F628A ya no es posible incorporar las rutinas de detección por corte eléctrico.
Sin embargo hace tiempo cambié el 16F628A por un 16F88 y modifiqué el programa para incluir las rutinas.

Aprovechando esta ocasión, adjunto el proyecto completo.
Puede tener algún bug ya que no lo he probado físicamente para verificar si la detección por corte funciona.

Para lograr que el circuito funcione correctamente se deben tomar algunas consideraciones.
1.- Separar la alimentación del PIC y colocar un capacitor de 4700uF en VDD para mantener constante por algún tiempo la alimentación del mismo y así poder ejecutar las tareas de detección.
También se puede colocar un sistema con batería recargable para mantener siempre alimentado al PIC.
2.- De preferencia tomar la muestra de tensión a través de un diodo antes del filtraje del voltaje.
3.- Espero que funcione. 

Notas adicionales:
Cuando se detecta un corte eléctrico el programa da un aviso en pantalla sobre el suceso.
El conteo actual es almacenado en la memoria y se realiza un cálculo para retomar nuevamente el conteo con las vueltas restantes.
Al iniciar el programa, si existió un corte eléctrico será notificado en pantalla.
Se podrá continuar con las vueltas restantes o cambiar el conteo por otro diferente.

Suerte.


----------



## Finskey

Sin embargo en el post 8 habías logrado integrar la función no ? Me gustaría poder agregarle esa función me parece muy buena es posible adaptar el post 8 a mi conexionado? estoy dispuesto a eliminar la opcion de mi programa de "iniciar conteo"  y cambiarlo por  la opcion de "ingresar conteo" el cual en tu programa modifica el ultimo conteo ingresado.  Asi no tendre que migrag de pic ni de proyecto. Muchas gracias 

PD: me parece buena idea  lo del  capacitor en la fuente  para darle un tiempo de descarga y la idea de la batería recargable 

PD2: Encontré un bug en el programa del post 34, a partir de un conteo de 66000 vueltas se bugea.


----------



## D@rkbytes

Finskey dijo:


> Sin embargo en el post 8 habías logrado integrar la función no ?


Nop, solo estaba incluida la función para para guardar los datos en memoria.


Finskey dijo:


> PD2: Encontré un bug en el programa del post 34, a partir de un conteo de 66000 vueltas se buguea.


Si, yo no lo había notado porque no había ingresado tantas vueltas.
Ese programa solo puede contar hasta 65535 que es el máximo permitido por las variables tipo int16 que usa.
Por lo tanto debes tener eso en cuenta, o migrar de proyecto, ya que realizar una modificación no es viable,
porque el que yo realicé puede contar hasta 99999 vueltas.

Suerte.


----------



## Finskey

Osea que tu  tiene que guardarlo antes de apagarlo no?  Esta perfecto necesito solo 10.000  Muchas Gracias  me gustaría agregarle la función de guardarla aunque sea manualmente  lo hare cuando hago el otro  gracias por todo!  

Una pregunta para que le display encienda bien hay que darle 5.5 v  si se le da 5v solo al display prende bien pero al conectarle el sensor cae la tensión y el display se apaga un poco , puede ser que el sensor consuma mucha corriente  y esto ocasione algún problema al pic? el sensor lo conecto a la pata
ra4 y consume 45 mA creo que esto es mucho para el pic no lo encuentro en el datasheet. Tratare de buscar alguna forma de bajar el consumo. La unica forma de que prenda bien es dandole 5.5 v y sin los sensores conectados ...  inclusive en este punto tengo algunos problemas con el programa como por ej : el 1 me lo muestra como un signo de Ohm o quizas ni me lo muestra. Pongo a contar 10000 tapas y empieza desde 23 . No entiendo como puedo tener tantos problemas si la simulacion y todo esta bien .. se pudo haber dañado por el sensor? o el display puede estar dañado? tiene fondo azul y es de carcaza negra con letras blancas.


----------



## D@rkbytes

En mi proyecto se puede guardar el conteo  manualmente, pero también lo hace automáticamente cuando ocurre un corte.
Entonces al volver la energía o provocar un reset se puede volver a retomar el conteo restante.

Sobre las otras preguntas, lo que necesitas es alimentar el circuito con más corriente.
Si lo estás alimentando usando un regulador 7805 (1A aprox.) y tienes problemas de caídas de tensión,
prueba con una fuente conmutada de 5V a 2 amperes, aunque lo mejor sería que revisaras bien las conexiones y el consumo de los componentes.

El inicio del conteo en 23 puede ser por rebotes.
Prueba si colocando algún capacitor en la entrada (P.E 0.047uF) se soluciona.

Suerte.


----------



## Finskey

No creo que  necesite mas corriente ... dejando solamente conectado el display sin los sensores con 5 voltios pasa lo mismo tengo que subirle a 5.5v con mi fuente con LM317 y cuando se sube el programa empieza a fallar.  el pic y el display estuvieron expuesto a una fuente vieja que daba 8.5 v pero al conectar caía la tension a 5.5 v quizás estén dañados? Comprare otro display y pic en ese caso ... me juego mas por el display ya que tiene el pote de 10k para el contraste pero no es suficiente y no creo que consuma mucho ... o quizás


----------



## D@rkbytes

Finskey dijo:


> *El pic y el display estuvieron expuestos a una fuente vieja que daba 8.5 v*, *pero al conectar caía la tensión a 5.5 v. ¿Quizás estén dañados?* Compraré otro display y pic en ese caso. Me juego mas por el display, ya que tiene el potenciómetro de 10k para el contraste pero no es suficiente y no creo que consuma mucho, o quizás.


Por seguridad cambia el PIC y la pantalla. 

Me sucedió una vez, que un PIC estaba recibiendo más de 5V en un pin de entrada,
cuando esto pasaba, el PIC bajaba su resistencia en el pin de VCC y subía el consumo de corriente del circuito calentando demasiado al regulador 7805. 

La solución fue colocar un diodo Zener de 5.1V en el pin que usé como entrada.

Suerte.


----------



## Finskey

Señor darkbytes, cansado de renegar con el programa que había planteado en un principio y con todas sus ayudas , me decidí armar su proyecto de una ves por todas(lo que debí hacer al principio) (usted sabe como somos los adolescentes). Me decidí por el primero que armo el cual nuestro amigo Carmant desarrollo. Descargue la carpeta descargue el 4.140, compilo bien, pienso hacerles cambios pero muy pequeños para no tener problemas. Pero no entiendo un par de cosas , el puerto a1 tiene un circuito con un rele, para que sirve? me imagino que es para conectar el motor a bobinar no? En mi caso no lo necesito no es una bobinadora, tengo que hacerle algún cambio? , 2do punto: El tipo de sensor que uso es una barrera infrarroja casera el cual tiene UN cable que antes iva a ra4 , ahora tengo que moverlo a ra3 o a ra2? uno de estos va a quedar libre? Lo demás lo mantendré igual. Le adjunto el esquemático del sensor un foto diodo y un foto transistor , al pasar entre medio el objeto se genera el pulso que me hace aumentar una unidad el display , las resistencias son de 330, Muchas gracias.


----------



## D@rkbytes

Finskey dijo:


> el puerto a1 tiene un circuito con un rele, ¿para qué sirve? me imagino que es para conectar el motor a bobinar ¿no? En mi caso no lo necesito no es una bobinadora, ¿tengo que hacerle algún cambio?


Así es, cuando se inicia el conteo se activa el relevador para hacer funcionar el motor de la bobinadora.
Puedes realizar los cambios que creas convenientes para el uso que le vas a dar.


Finskey dijo:


> El tipo  de sensor que uso es una barrera infrarroja casera el cual tiene un  cable que antes iba a ra4, ¿ahora tengo que moverlo a ra3 o a ra2? uno  de estos va a quedar libre?


Por el pin RA2 se ingresan los pulsos de conteo ascendente y por el pin RA3 los de conteo descendente.
Así que puedes omitir el pin RA3 y también la rutina de conteo descendente.

Esa opción la hice para poder descontar vueltas al girar el motor en sentido contrario.
Ahora he cambiado esas rutinas y modifiqué el código para usar un encoder de cuadratura.

Suerte.


----------



## nelsonr

Hola tengo una pregunta, como puedo hacer en ccs compiler para crear  un contador, por ejemplo.
quiero encender un led cada 10  segundo mas o menos no tiene que ser tan exacto, pero sin detener la ejecución del programa (no utilizando un delay_ms(10000).
 Se me ocurrió usar un contador normal VGF_Time_Luz = VGF_Time_Luz + 1; y cuando llega a un numero X que entre a un if. If( VGF_Time_Luz == X)  y que encienda el led.

pero cuando pongo a correo el programa  y monitoreo el incremento de los numero en una pantalla lcd, se nota que la duración es  10 a 12  seg .

y cuando quieto el monitor y corro el programa no dura el recorrido ni 3 segundo

pregunta: a que se deberá esto ? y como puedo hacer un contador que tenga un tiempo de duración  mas o menos contante.


----------



## D@rkbytes

nelsonr dijo:


> Hola tengo una pregunta, como puedo hacer en ccs compiler para crear  un contador, por ejemplo.
> quiero encender un led cada 10  segundo mas o menos no tiene que ser tan exacto, *pero sin detener la ejecución del programa* *(no utilizando un delay_ms(10000)*.


Mira por aquí:* Base de 1 segundo usando TMR1
*Analiza ese programa y verás que usando un contador puedes hacer lo que requieres sin afectar al programa principal.*
*


----------



## nelsonr

Mil gracias ingeniero de debo otra.


----------



## Finskey

Darkbytes le hago una preguntas, si declaramos el oscilador interno no es necesario ponerlo afuera con sus dos cap. cerámicos, hay alguna diferencia si usamos el interno o uno externo? usted que recomienda?.
 Otra cosa para el proyecto anterior habia usado 1 metro de cable plano para la conexion del lcd pero leí por ahí que era mucho, cuanto recomienda? Muchas gracias, ni bien termine subiré pcb...


----------



## D@rkbytes

Finskey dijo:


> D@rkbytes le hago una preguntas. ¿Si declaramos el oscilador interno, no es necesario ponerlo afuera con sus dos capacitores cerámicos?


Obviamente si se usa el interno no se requiere poner nada exteriormente y hasta tenemos la posibilidad de usar los pines del oscilador como entradas o salidas.


Finskey dijo:


> ¿Hay alguna diferencia si usamos el interno o uno externo? ¿Usted que recomienda?


En este proyecto no se necesita precisión, el conteo se realiza cada vez que el sensor manda un pulso.
Por lo tanto con usar el oscilador interno es suficiente.


Finskey dijo:


> Otra cosa, para el proyecto anterior había usado 1 metro de cable plano  para la conexión del lcd, pero leí por ahí que era mucho. ¿Cuanto  recomienda?


Siempre es mejor usar una conexión directa del LCD al PCB del circuito o con cables cortos.
No sé cual sea la distancia máxima de cable que se pueda usar, pues puede variar de una pantalla a otra.
En estos casos lo mejor es la experiencia propia porque los fabricantes tienen diferentes parámetros en la construcción de sus pantallas y es difícil dar una longitud de cable máxima recomendada.


Finskey dijo:


> Muchas gracias, ni bien termine subiré pcb.


Ok. Esperamos que pronto termines con tu proyecto y nos muestres como quedó.

Suerte.


----------



## Finskey

Darkbytes veo que en tu proyecto el sensor se conecta a una resistencia de 10k  , eso es creo para que no circule mucha corriente y dañe al pic, en mi caso tengo que conectar al ra2 el colector del transistor , se necesita alguna resistencia  limitadora para no dañar al pic? Gracias.


----------



## D@rkbytes

Finskey dijo:


> D@rkbytes veo que en tu proyecto el sensor se conecta a una resistencia de 10k  , eso es creo para que no circule mucha corriente y dañe al pic, en mi caso tengo que conectar al ra2 el colector del transistor , se necesita alguna resistencia  limitadora para no dañar al pic? Gracias.


Supongo que te refieres a R4 y R5.
Esas resistencias son pull-down y sirven para tener una referencia de voltaje negativa porque el conteo se realiza con pulsos positivos.
Dependiendo del tipo de sensor que uses, será el tipo de interfaz que debes usar.
Si el sensor trabaja con los 5V de alimentación del PIC, no es necesaria ninguna protección.
Pero si el sensor trabaja con fuente externa de más de 5V, y en su salida supera los 5V, si se puede dañar el PIC.
En ese caso si es necesario colocar una resistencia limitadora y un diodo Zener de 5V. para proteger la entrada.


----------



## Finskey

Monte el circuito sin sensores ni teclado , el lcd no me muestra el texto ... la primera fila se ilumina al maximo y al rato de queda prendida pero con mucho menos brillo, mande la pata Vo a tierra , y 30 ohms en la pata 15, (el anodo), Alguna sugerencia?

Edit: el programa es el 4.140 , compila lo mas bien, en proteus va todo bárbaro, me surgió una duda, usando el pickit2 hay una sección donde dice MCLR (y un cuadrado para tildar) debería tildarlo no? ya que el programa incluye el MCLR. Gracias.

Edit2: El pic y el lcd funcionan por separado.


----------



## D@rkbytes

Finskey dijo:


> Monté el circuito sin sensores ni teclado, el lcd no me muestra el texto.
> La primera fila se ilumina al máximo y al rato se queda prendida pero con mucho menos brillo.
> Mandé la pata Vo a tierra y 30 ohms en la pata 15, (el ánodo) *¿Alguna sugerencia?*


¿Cual es el pin Vo? ¿Te refieres al pin 3 (VEE)?
Si es el pin que te menciono, ese pin es para el contraste de la pantalla y si está  en 0V el contraste es máximo.
Coloca un preset de 5k entre VSS y el pin 3 de la pantalla
Si no consigues que funcione, sube fotos nítidas de la conexión de la pantalla con el PIC y *mira por aquí.*


Finskey dijo:


> me surgió una duda, usando el pickit2 hay una sección donde  dice MCLR (y un cuadrado para tildar) debería tildarlo no? ya que el  programa incluye el MCLR.


Coloca el pin 4 (MCLR) hacia VDD directamente o con una resistencia de 4.7k.
Esto es por si está habilitado el Master Clear, teniendo este pin hacia VDD no debes tener problemas por eso, se use o no.


----------



## Finskey

Ya he hecho la prueba de conectar con el pote de la siguiente forma:







He probado con programas en basic ya con la configuración de pines default que trae el Pic basic pro y tampoco me funciona .... debo decir que cuando conecte todo por primera ves , llegue a ver un fragmento del programa, decía ULTIMO CONTEO , luego se fue y no pude verlo mas ..., emprolijare la conexión y sacare fotos. 
Tengo conectada una r de 10k desde el pin4 a Vdd. Saludos y muchas gracias.

La pantalla prende los primeros cuadros nomas, es como si el lcd no tendría rutina de inicializacion, pues la pantalla ni se mueve. No creo que sean problemas las conexiones, cabe destacar que estoy haciendo esta conexión, por ahora no conecte ni teclado ni sensores.




 Subido en subir imagenes


----------



## Finskey

Porfin pude hacerlo andar, el display anda perfecto , también anda perfecto el teclado. El reset externo también funciona. Aviso a los que quieran hacerlo, que tienen que poner si o si el potenciometro y una resistencia de 10 a 30 ohms, en la pata 15.

Mi pregunta ahora es, el sensor de incr. , al presionar el pulsador, quizás cuente de 5 o 6, hay alguna forma de eliminar estos "rebotes"? quizás darle un delay mayor  luego de presionar el pulsador?


----------



## D@rkbytes

Finskey dijo:


> Mi pregunta ahora es, el sensor de incr. , al presionar el pulsador, *quizás cuente de 5 o 6*. ¿Hay alguna forma de eliminar estos "rebotes"? ¿Quizás darle un delay mayor  luego de presionar el pulsador?


Ese quizás suena como si no hubieras probado el circuito físicamente.
Si puedes poner un retardo para eliminar rebotes pero no tan alto para que no pasen vueltas sin contar.
También puedes poner algún capacitor en el sensor, ahí necesitas hacer pruebas para encontrar un valor correcto.


----------



## Finskey

Juro que lo probé , si colocas la resistencia y haces contacto con un "cable" , cuenta de 5 a 6 por cada ves que cierres el circuito con el cablesito. Obviamente no usaras un cable. Luego cambie el cable por el sensor que había pensado y todo funciona a la perfección. El buzzer también funciona. Ya emprolijo un poco el pcb y lo subo. 
Se agradece por TODA LA AYUDA que me dio usted Darkbytes.


----------



## Finskey

Aquí luego de tanto tiempo dejo el PCB modificado a mis necesidades el circuito funciona perfectamente.
Posee 3 borneras, 1 de alimentación y otras dos para los sensores exteriores. Saludos.


----------



## kitomar

Hola el programa del contador para 16f628 anda perfecto en cambio para el 16f88 cunado lo compilo con CCS v4.140 no me da ningun error pero cuando lo cargo al pic usando el PICKit2 me sale este error "Programming failed at Program Memory address 0x000000" alguien sabe por que puede suceder esto???
Saludos


----------



## ricbevi

kitomar dijo:


> Hola el programa del contador para 16f628 anda perfecto en cambio para el 16f88 cunado lo compilo con CCS v4.140 no me da ningun error pero cuando lo cargo al pic usando el PICKit2 me sale este error "Programming failed at Program Memory address 0x000000" alguien sabe por que puede suceder esto???
> Saludos



Hola...Seguramente tenes o mal conectado el PIC o esta mal. El aviso es que fallo la programación de la dirección de memoria 0x000000 o sea la primera.
Saludos.

Ric.


----------



## kitomar

Hola y gracias por responder y si efectivamente tenia algo raro en mi super programador Pickit2 y lo solucione ahora que  tengo funcionando el proyecto me encuentro con que apenas le doy al conteo me avisa en el LCD que "OCURRIO UN CORTE O PAUSA" cuando en realidad nada de eso paso. Estoy usando el mismo esquematico de la contadora para el 16f628. Habra que hacerle algunas correcciones para poder usar el nuevo soft y poder usar el 16f88???
Saludos



Ah algo que me olvide de aclarar es que estoy haciendo unos cambios en el harware ya que voy a usar el proyecto no como contadora de vueltas sino como contador de cospeles o fichas. Con el proyecto del 16f628 todo anda ok pero me interesa el del 16f88 ya que cuenta con otra funcion que seria la de guardar el ultimo conteo ante un corte de energia que suele suceder jajaja.
Y nuevamente gracias Ric.


----------



## D@rkbytes

Si aún no logras resolver el problema de detección de corte eléctrico, cerciórate que en el pin 17 (RA0) existan más de 4 V.
Ese es el voltaje establecido para detectar la caída de tensión y guardar los datos en la EEPROM interna, antes de que el microcontrolador ya no responda.


----------



## kitomar

Hola D@rkbytes mucho gusto en conocerle, hice lo que usted me dijo y debo darle toda la razon y efectivamente al poner mas de 4v al pin 17 osea RA0 me permite realizar el conteo normalmente.
Pero supongamos que el dispositivo esta seteado para una cuenta de 100 vueltas (cospeles en mi caso) y cuando va por la cuenta numero 50 se corta la energia, deberia guardar los datos en la EEPROM interna, ahora como recupero esos datos? Es en forma automatica? Yo hago la simulacion en mi protoboard y despues de cortar la energia y volver a energizar la palca me dice "RESTAURAR CUENTA POR CORTE, PAUSA" pero no me dice que numero me guardo de antes del corte.
Si no fuera mucha molestia le pido mas datos sobre este interesantisimo proyecto del cual creo que usted es el creador.
Desde ya muchas gracias.
Saludos Cordiales
Marcos


----------



## D@rkbytes

Después de un corte eléctrico, lo que muestra el programa es el resto que queda por concluír.
Ejemplo:
Si se requerían 350 vueltas y el corte se produce a las 75 vueltas, el programa después del corte indicará que faltan 275 vueltas.

No muestra el conteo inicial, porque es más lógico que el usuario recuerde cuantas vueltas se necesitan, que recordar o saber a las cuantas vueltas se produjo el corte.

Como quiera, la opción de mostrar la cantidad inicial se puede añadir al programa sin ningún problema.

Saludos.


----------



## kitomar

Gracias por responder D@rkbytes y perdon por tanta consulta.
Haber si entedi: supongamos que la cuenta inicial es 100 y al llegar a 50 se corta la energia al regresar me dice que faltan 50 para llegar a los 100 ¿verdad?.
Si yo quiero volver a repetir la cuenta me dice que de ahora en adelante cuenta 50 o 100 que eran los contaba antes de que se cortara la energia?? 
No se si se entiende mi consulta, pero mi duda es porque yo tengo que contar repetidas veces el mismo numero ya que tengo que poner en bolsitas 100 cospeles son aproximadamente unas 1500 bolsitas de 100 cospeles o fichas cada una, por eso es que me decidi a hacer algo que me haga el trabajo mas simple ya que hasta el momento tengo la maquina (tipo hopper con tolva de maquina tragaperras) que tiene un sensor infrarrojo. 
Tambien tengo un contador digital, que cada ves que llega a 100 paro la maquina manualmente.
Mi intencion es que la maquina pare sola al llegar a 100 por eso me intereso tu proyecto y mas me  intereso el que ademas de todo guarda la cuenta ante un fallo electrico.
Y una cosa mas que quiero saber el pin 17 RA0 a donde seria ideal ponerlo porque lei por ahi que lo conveniente era ponerlo antes del filtrado??? A que se refiere antes del filtrado?? Eso usted lo dice en el post #36.
Desde ya muchas gracias por su invaluable ayuda.
Cordiales Saludos
Marcos


----------



## D@rkbytes

kitomar dijo:


> A ver si entedí: Supongamos que la cuenta inicial es 100 y al llegar a 50 se corta la energía al regresar me dice que faltan 50 para llegar a los 100 ¿verdad?


Así es, eso es correcto.


kitomar dijo:


> ¿Si yo quiero volver a repetir la cuenta me dice que de ahora en adelante cuenta 50 o 100 que eran los contaba antes de que se cortara la energía?


Después del corte eléctrico el programa iniciará con el valor restante del conteo total.
Sin embargo, después del corte también ofrece la opción de poder cambiarlo nuevamente.


kitomar dijo:


> Y una cosa más que quiero saber.
> ¿El pin 17, RA0 a dónde sería ideal ponerlo?
> Porque leí por ahí que lo conveniente era ponerlo antes del filtrado?
> ¿A qué se refiere antes del filtrado? Eso usted lo dice en el post #36.


Se recomienda tomar la muestra de tensión antes del filtraje de la fuente de poder porque ahí la tensión es menos estable.
Esto es, antes de los capacitores o "filtros". (En algunos lugares les dicen así a los capacitores)

O sea que debes colocar otra toma con un diodo independiente en las terminales de salida del transformador.

Algo así:


----------



## kitomar

Hola D@rkbytes pero que buena idea !!!!! me rindo ante tamaña explicacion !!! muchas pero muchas gracias.
Lo pongo en practica y despues te comento los resultados.
Y de nuevo muchas gracias.
Cordiales saludos
Marcos


----------



## kitomar

Hola D@rkbytes estoy haciendo las primeras pruebas luego de armar la fuente y note que no me guarda el ultimo conteo. 
En cambio supongamos que estoy realizando un conteo y le saco la tension del pin 17 me dice que ocurrio un corte y corto la energia cuando restauro la energia ahora si me guarda la ultima cuenta.
Mi explicacion es que cuando le corto la energia directamente no hay suficiente tiempo para que el micro guarde el conteo.
La fuente esta tal cual el esquematico con todos los componentes salvo los dos diodos rectificadores que no pude encontrar los mismos del esquematico por ejem. en ves del 1N4001 puse el 1N4007 y en ves del 1N5821 encontre el 1N5822 despues lo demas esta todo igual.
En el post # 36 usted dice: "También se puede colocar un sistema con batería recargable para mantener siempre alimentado al PIC." 
Esa puede ser la solucion?
Saludos cordiales
Marcos


----------



## D@rkbytes

kitomar dijo:


> En el post # 36 usted dice: "También se puede colocar un sistema con batería recargable para mantener siempre alimentado al PIC."
> ¿Esa puede ser la solución?


Si, esa puede ser la solución porque seguramente la tensión para alimentar al PIC junto con la tensión de referencia y los periféricos, caiga al mismo tiempo.

Hace tiempo hice un circuito de detección por corte algo similar, pero usé una fuente para el PIC con un capacitor de 4700 uF y otra fuente para alimentar los circuitos periféricos.
Entonces de esta forma y por el bajo consumo del PIC, éste podía tener tensión el tiempo suficiente para guardar los datos.


----------



## callecuatro1976

hola, consulta me gusto el post y lo quiero implementar compilo el programa y me da este error:
 *** Error 18 "Bobinadora (main).c" Line 222(0,1): File can not be opened
     File: Bobinadora (main).c
      1 Errors,  0 Warnings.
que puede ser?


----------



## Fogonazo

callecuatro1976 dijo:


> hola, consulta me gusto el post y lo quiero implementar compilo el programa y me da este error:
> *** Error 18 "Bobinadora (main).c" Line 222(0,1): File can not be opened
> File: Bobinadora (main).c
> 1 Errors,  0 Warnings.
> que puede ser?



No encuentra el archivo declarado en la línea 222 o la ruta de acceso es incorrecta.


----------



## callecuatro1976

si no entiendo porque me da ese error .
 también me pone esto
 *** Error 18 "Bobinadora (main).c" Line 0(0,0): File can not be opened
     File: Bobinadora (main).c
*** Error 1 "Bobinadora (main).c" Line 0(0,0): Illegal C character in input file
      2 Errors,  0 Warnings.


----------



## D@rkbytes

Ejecuta el PIC C Compiler, selecciona el archivo "Bobinadora.C" y compila.
Si siguen apareciendo errores, elimina todos los archivos que genera el compilador, dejando únicamente "Bobinadora.C" y vuelve a compilar ese archivo.

De esa forma el compilador deberá generar los archivos del proyecto nuevamente, conforme a la versión que tengas.


----------



## kitomar

Yo hice andar la contadora de cospeles y la verdad es que funciona perfecto aconsejo usar el compilador CCS compiler v4.140 ya que con esta version no metira ningun erro en cambio con otras versiones si e tenido algunos problemitas.
Saludos
Marcos


----------



## D@rkbytes

kitomar dijo:


> Aconsejo usar el compilador CCS compiler v4.140 ya que con esta versión no me tira ningún error, en cambio con otras versiones si he tenido algunos problemitas.


Adjunto la nueva versión 3.0 del programa con algunas mejoras.
Aparte ha sido reescrito para usar las nuevas versiones de PIC C Compiler.

Versión usada para este programa: v5.048


----------



## torres.electronico

aca comparto otra version experimental ...



el funcionamiento es basico; La llave selectora tiene que estar en posicion OFF para programar, si no programamos cantidad de vueltas y la encendemos, marca error...
los botones sumadores pueden sacarse por que deje que los botones de resta queden la vuelta (0 a 9 y luego salta a 0)... cuando este a 25 vueltas de finalizar trabajo, cada 5 espiras tira un tono por el buzzer...
El potenciomentro controla el duty de salida al motor; Tengan en cuenta que la frecuencia que le programe es fija (600Hz)... Saludos


----------



## callecuatro1976

hay algún hilo para programar un pic para controlar un motor paso a paso para hacer una bobinadora cnc, usando el contador  que esta aqui posteado y agregarle el control de un motor para devanar el alambre, cantidad de capas y vueltas , saludos


----------



## torres.electronico

callecuatro1976 dijo:


> hay algún hilo para programar un pic para controlar un motor paso a paso para hacer una bobinadora cnc, usando el contador  que esta aqui posteado y agregarle el control de un motor para devanar el alambre, cantidad de capas y vueltas , saludos



 no se si entendi realment tu consult, pero el diseño que subi es sin PAP e implmenta un simple motor dc y tendrias que anexar un sensor para el conteo... la velocidad del motor es regulable, pero dudo que la frecuencia que le puse funcine en todos los motores... nada del otro mundo, se puede modificar...  Un amigo de cordoba monto mi circuito en su maquiabelica machine... creoq ue solo le faltaba ver el tema como sensar la vuelta y la ponia en marcha...


----------



## callecuatro1976

yo consultaba porque vi una maquina pequeña cnc , aparentemente muy sencilla eran 2 motores y una placa , se programaba y el motor devana el alambre sobre el carrete y me preguntaba será muy difícil hacer una ???


----------



## torres.electronico

y  ... tiene su complejidad, pero no lo veo imposible... basicmente hayq ue arrancar desde ero cualquiera de estos proyectos para hacer el PAP que mueva el eje X y en paralelo, el motor DC gire el carrete del bobinado...


----------



## richard alonso

tiempo sin publicar nada,aqui les dejo este contador comun que arme hace mucho,el programa lo hise en pbp,hasta 11000 vueltas logre contar para probarlo,espero le sirva a alguien y si lo arma alguien que suba fotos


----------



## richard alonso

bueno aqui les dejo este video,espero que el moderador no lo elimine,si les parese buenoy quieren tenerlo,subo los archivos


----------



## Fogonazo

richard alonso dijo:


> bueno aqui les dejo este video,_espero que el moderador no lo elimine_,si les parese buenoy quieren tenerlo,subo los archivos       https://www.youtube.com/watch?v=oqSTYwKG9vA



¿ Por que sería eso ?


----------



## felipe_micro

Saludos comunidad de Foros de electroncia. Les comparto un proyecto el cual esta enfocado a una maquina de rebobinaje para transformadores (motores o cosas similares) . Lo realice en un pic18f2550 usando un lcd 16x2 y haciendo uso de interrupciones del pin Rb0. Además modifique la libreria lcd.c para trabajar con puerto A y C. He aprendido tanto en esta comunidad y ahora comparto a un estudiante o alguien que le resulte util. En si es poder saber cuantas vueltas se van dando al momento de rebobinar.


----------



## D@rkbytes

Gracias por el aporte pero estuve viendo el código, el cual tiene errores y algunos detalles.
El error más grave es declarar una variable de 8 bits (int) y usarla como una variable de 16 bits.


		C:
	

int vueltas, aux;

La declaración* int *en PIC C Compiler es igual a *int8* y es de 8 bits.


El segundo error no tan grave es incluir una ruta de archivo que únicamente se encuentra en tu PC:
#include "D:\Proyectos\Contador Vueltas\Programa v1.1-Economica\Contador_Vueltas_v1.1.h"
Si el archivo "Contador_Vueltas_v1.1.h" se encuentra en la carpeta del proyecto, basta con incluirlo sin ruta:
#include "Contador_Vueltas_v1.1.h"

El tercer error es algo grave y está en la palabra de configuración.
Siempre les he dicho que un PIC de este tipo tiene una configuración especial, que si no se establece bien, el microcontrolador no funcionará correctamente.
Todo lo que se encuentra en el archivo "Contador_Vueltas_v1.1.h" no sirve para usar una frecuencia de reloj con cristal de 20 MHz.
Tampoco sirve configurar el ADC a 8 bits porque ese es el valor por defecto, aparte de que no se está usando el conversor AD.
También tiene declarado el uso de RS-232 por software que tampoco se está usando.

Si declaras lo siguiente en la cabecera del programa, te evitas todo el código inservible en ella:


		C:
	

#include <18F2550.h>
#fuses NOFCMEN, NOIESO, NOVREGEN
#use delay(CRYSTAL = 20 MHz)


Los varios detalles en el programa:
*#use fast_io(B)* No tiene sentido su uso en tu programa.
*ext_isr() *debe precederse con *void*
Así: *void ext_isr* (*void*) y el segundo void es opcional porque en este caso es un servicio de interrupción y no tiene parámetros.

*vueltas=vueltas+1;* Es del lenguaje Basic y en C es más cómodo así: *vueltas += 1;

set_tris_B(0x01);* Resulta irrelevante porque por defecto todos los pines son entradas.

*port_b_pullups(TRUE);* No tiene sentido usarlo porque únicamente tienes a RB0 como entrada y RB6 y RB7 como salidas.
Aparte, ya estás colocando una resistencia pull-up en RB0 que está en el colector del transistor.

Esta parte de código para hacer parpadear un LED, la puedes hacer con uno de los timers del microcontrolador:


		C:
	

      if(aux==1000)
      {
         output_toggle(pin_B6);
         aux=0;
      }
      else aux++;

Aquí es precisamente donde comparas 1000 con una variable de 8 bits que nada más sirve hasta 255.
Y si también usas la variable "vueltas" para el conteo, se tendrá un límite de 255 vueltas.


felipe_micro dijo:


> Además modifiqué la librería lcd.c para trabajar con los puertos A y C


No es necesario modificar la librería lcd.c nativa porque con unos cuantos agregados antes de incluirla, se logra que funcione con los pines que uno quiera.
En el caso de tu programa y que *no incluiste la librería* *que modificaste*, quedaría así:


		C:
	

#define LCD_ENABLE_PIN  PIN_A0
#define LCD_RS_PIN      PIN_A1
#define LCD_RW_PIN      PIN_A2
#define LCD_DATA4       PIN_A3
#define LCD_DATA5       PIN_A4
#define LCD_DATA6       PIN_A5
#define LCD_DATA7       PIN_C0
#include <lcd.c>

Con el agregado de esas definiciones ya no es necesario modificar la librería.

Podría ser que en tu caso la tengas que modificar porque estás usando una versión muy antigua de PIC C Compiler (v4.104) y no recuerdo si en esa versión aún no se realizan mejoras en la librería lcd.c

Bueno, como dijo Cortana: Como introducción, creo que ya es suficiente.
Saludos y a seguir estudiando.


----------



## 3tristesPIC

Hola otra vez. Aquì les proongo un Cuenta Vueltas de cuatro dìgitos realizado con  PIC 16F628 (ver archivo adjunto) en lenguaje PBPRO con el MCS y grabado con PK2, que està probado y funcionando. Es un ejemplo sencillo del uso de las sentencias ON INTERRUPT, LOOKUP, DIG y del MULTIPLEXADO, necesarios para el manejo de un display. Espero que les sea de utilidad, cualquier duda me consultan. Bye


----------



## ricbevi

Hola...Gracias por el aporte, creo haber visto en el foro un tema al respecto(cuenta vueltas para bobinadora) e incluso haber participado activamente en alguno.

Lo que noto en la gran mayoría de diseños es que no contemplan en caso de que se pueda descontar vueltas según el sentido en que se gire.

Es común cuando se bobina que una vuelta no este en su lugar y se deba dar marcha a tras y los esquemas que he visto, siempre cuentan hacia adelante sumando una vuelta sea en el sentido que sea.

Saludos.


----------



## D@rkbytes

3tristesPIC dijo:


> Aquí les propongo un Cuenta Vueltas de cuatro dígitos realizado con PIC16F628


Post unificado al ya existente. (Normas del Foro 04)


ricbevi dijo:


> Lo que noto en la gran mayoría de diseños es que no contemplan en caso de que se pueda descontar vueltas según el sentido en que se gire.


Los diseños que he subido sí lo tienen contemplado y con detección de corte eléctrico.
Llegué a escribir un programa usando un encoder incremental que creo ya no publiqué.


----------



## ricbevi

D@rkbytes dijo:


> Post unificado al ya existente. (Normas del Foro 04)
> 
> Los diseños que he subido sí lo tienen contemplado y con detección de corte eléctrico.
> Llegué a escribir un programa usando un encoder incremental que creo ya no publiqué.


Por eso aclare lo de la "gran mayoría"(siendo este el caso que no lo contempla), no es difícil inclusive colocando un opto ranurado que sea doble y trabajar como si fuera un encoder incremental y actuar en consecuencia según el sentido que se le va a dar al giro(10 o 01) e incrementar o decrementar según corresponda.

Es algo que muy útil cuando uno bobina a mano o con pequeños motores ya que indefectiblemente será usado salvo teniendo mucha suerte y que no pase ningún "percance"; nunca me paso hasta ahora.

Saludos.


----------

