Escrito originalmente por antoniof
Supongo que has puesto un condensador a la entrada de la reactancia de los tubos para compensar el factor de potencia.
Prueba a alimentar el PIC con una pila de 9V para descartar que sea del programa.
Si todo va bien con la pila, el problema estará en la fuente de alimentacion del PIC. Prueba a colocar un condensador de 1uF y 600V y otro de 10nF 600V a la entrada del transformador del cargador del movil. Esto absorberá parte de las interferencias de los tubos.
A ver si hay suerte.
Escrito originalmente por antoniof
Supongo que has puesto un condensador a la entrada de la reactancia de los tubos para compensar el factor de potencia.
Prueba a alimentar el PIC con una pila de 9V para descartar que sea del programa.
Si todo va bien con la pila, el problema estará en la fuente de alimentacion del PIC. Prueba a colocar un condensador de 1uF y 600V y otro de 10nF 600V a la entrada del transformador del cargador del movil. Esto absorberá parte de las interferencias de los tubos.
A ver si hay suerte.
Escrito originalmente por piriots
Yo tembien estoy microcontrolando mi insoladora, he probado en las placas entrenadoras y funciona bien. Pero la verdad es que los ruidos me dan un poco de miedo. Yo he optado por controlar los tubos con un optotriac que ataca a un triac. Si pongo el triac y los 220v cerca del pic puedo tener los mismos problemas que tu??
Salu2
Escrito originalmente por antoniof
Buenas de nuevo. Perdon por no responder antes.
El condensador de la reactancia es muy necesario para evitar ruido electromagnético. Estos condensadores suelen montarlos en las fuentes de alimentación de TVs, Vídeos, etc. También he encontrado condensadores de estos en secadores de pelo, taladros y todo aquello que lleve un motor de CA.
Con respecto al condensador del transformador, me refería a la entrada de tu fuente de alimentación. Por lo que cuentas, es de tipo conmutada, por lo que debes tener mucho cuidado de que no entre en modo discontínuo. Este tipo de fuentes, están ajustadas para entregar una tensión y una corriente determinada y fuera de ese rango de trabajo, suelen funcionar bastante mal. Si por ejemplo está pensada para entregar 500mA y tu sólo le pides 10mA, entrará en modo discontínuo y la tensión de salida tendrá demasiado rizado y será inestable.
Prueba a utilizar un transformador convencional como te han dicho más arriba. Quizás se solucionen todos tus problemas.
Resumiendo: condensador de 4,7nF y 310V Muy recomendado en la reactancia.
Si sigue sin funcionar, cambia fuente de alimentación por una convencional.
P.D. No lo he dicho antes, pero supongo que has desactivado los fusibles BROWN OUT RESET y el LOW VOLTAJE PROGRAMMING del PIC. A mi me han dado más de un dolor de cabeza.




















Escrito originalmente por piriots
Tienes alguna forma de conseguir un osciloscopio??? Si pudieramos ver exactamente de donde proviene el ruido no seria dificil solucionarlo. Podrias intentar poner un conversor DC/DC entre la fuente de alimentacion y el pic, de esta forma es muy probable que se solucione si es que es problema de ruidos.
Salu2
Escrito originalmente por piriots
Ahi tienes un esquema de insoladora ucontrolada que usa este donversor dc/dc. A ver si consigues solucionar tus problemas con esto.
http://rapidshare.de/files/6609302/esquematicos.pdf.html
Salu2
Escrito originalmente por doraimontv
la page de conket esta offline, asi k mo puedes ver esos datos, yo te puedo decir ahora que las bobinas son de 1uH y los condensadores, lo puedo mirar cuando llege a mi casa, ahora no estoy en ella.
As pensado lo que te dije de usar reactancias electronicas, asi te ahorras los cebadores y no creo que te queden problemas de ruido.
Saludos.
Escrito originalmente por doraimontv
Las reactancias electronicass las puedes sacar de dentro de las bombillas de bajo consumo, estas salen por unos 2,50€ las de 8w, k son las k yo uso.
O las compras o las cojes de algun portal como uno que yo conozco, jejeje
Van muy bien, no usan cebadores y no parpadean al encender.
Mejor imposible, por no decir k son redondas y son de unos 4cm de diametro.
Escrito originalmente por doraimontv
hombre, lo de los watios, es lo de menos, con pillar bombillas de 18w, vas sobrao, pero bueno. Tambien tienes razon con lo de repararlo a cojones!!
Si haces mas pruebas, comentalo.
uN SALUDO.
Y me tiene tan quemado porque es un error intermitente que de pronto parece haber desaparecido como de pronto te encadena 4,5,6 cuelgues consecutivos... Codigo:
/*********insoladora uControlada******************
Insoladora uControlada
----------------------
José Antonio Migens Gómez.
Octubre 2005
vital***********************elmasvital@yahoo.es***/
#include <16f628.h> //pic a utilizar
#fuses intrc_io,NOWDT,NOBROWNOUT,NOPROTECT,PUT,NOLVP,NOMCLR //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
#define use_portb_lcd TRUE //definir portb lcd
#include<lcdmin.c> //libreria manejo lcd
#include<tones.c>
#use fast_io(a)
#rom 0x2100={3,15, 2,10, 0,0, 0,0, 1,20}
#define INTS_PER_SECOND 25 // preescaler del timer2 para 4 mhz
///DECLARACIONES DE FUNCIONES
int manejo_menu(int num_menu, int opc_min, int opc_max);
char mostrar_mensaje ( byte n_numero, byte n_submenu);
int pedir_tiempo (min_minutos, min_segundos);
void espera_ok();
void ver_estadisticas();
//DECLRACION DE CONSTANTE
char const mensajes[13][19] ={"{ Insolar Placa }",
"{Config. Insolado}",
"{Ver Estadisticas}",
"Tiempo manual",
"Tiempo programado",
"Tiempo 1",
"Tiempo 2",
"Tiempo 3",
"Config tiempo 1",
"Config tiempo 2",
"Config tiempo 3",
"Seguir insol. NO",
"Seguir insol. SI"};
byte const add_time[5] ={0,2,4,6,8}; // 0-2 tiempos programados 1,2,3; 3 tiempo de insolado 4 ultimo insolado.
/*
byte const add_time1 = 0; //constantes de los bancos de memoria donde se guardan los datos
byte const add_time2 = 2;
byte const add_time3 = 4;
byte const add_time = 6; //tiempo de la cuenta atrás... para detectar si se apagó insoladora sin terminar
//insolado
byte const add_last_time = 8; //tiempo del último insolado.
*/
//DECLARACIONES DE VARIABLES
int8 int_count; // contador de interrupciones hasta llegar al desbordamiento
int8 segundos, minutos;
/*********************************
INTERRUPCION TIMER2
**********************************/
#INT_TIMER2 // Interrupción del timer2
void clock_isr()
{ // Desbordamiento del timer 2 ~= 25 por segundo
if(--int_count==0)
{
if(segundos > 0) --segundos;
int_count = INTS_PER_SECOND;
}
}
/*********************************
CUENTA ATRÁS
Se le pasa un valor de minutos y segundos
activa el timer2 y lo para cuando haya terminado
la cuenta atrás.
El timer2 se encargará de ir decrementando los segundos
y cuenta_atras a controlar el paso de los minutos y de
activar y desactivar el reloj, también de imprimir
en el lcd la cuenta atrás.
**********************************/
void cuenta_atras ()//int8 segundos, int8 minutos)
{
boolean salir=0;
int8 contador=0;
//activamos reloj
setup_timer_2(T2_DIV_BY_16, 250, 10);
set_timer2(0);
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
int_count = INTS_PER_SECOND;
//activamos insoladora (bit del triac)
output_high(PIN_A2);
//lcd_putc ("CUENTA ATRAS"
while (!salir)
{
if (contador!=segundos)
{
if (segundos == 0)
{
if(minutos > 0)
{
segundos = 60;
minutos--;
output_toggle(PIN_A5);
}
}
if (segundos== 0 && minutos ==0) salir=true;
contador=segundos;
//guardamos el tiempo de insolado por si se apaga la insoladora sin terminar
write_eeprom(add_time[3],minutos);
write_eeprom(add_time[3]+1,segundos);
printf(lcd_putc, "fInsolando %u:%02d" ,minutos,segundos-1);
}
}
//desactivamos el reloj
disable_interrupts(INT_TIMER2);
//deactivamos insoladora (bit del triac)
output_low(PIN_A2);
lcd_putc("fInsolado completado"
for (contador=3;contador>0;contador--)
{
generate_tone(C_note[0],350);
delay_ms(100);
}
espera_ok();
}
void espera_ok()
{
while (!input(PIN_a6)); //Espera q pulsemos OK
delay_ms(200);
}
void main(void)
{
int opcion, tiempo;
int num_periods=30;
boolean salir=false;
set_tris_a(0b11000001);
lcd_init(); //inicializa lcd
while (true)
{
// set_tris_a(0b11110111);
output_high(PIN_A5);
lcd_putc("fInsoladora (c) ViTAL"
delay_ms(1000);
//comprobamos que no existe un insolado abortado
minutos=read_eeprom(add_time[3]);
segundos=read_eeprom(add_time[3]+1);
if (minutos >0 || segundos >0)
{
generate_tone(C_note[0],850);
lcd_putc("fError insolando"
espera_ok();
if (manejo_menu(11,11,12)==12)
{
pedir_tiempo(0,10);
cuenta_atras();
}
//borramos el error
write_eeprom(add_time[3],0);
write_eeprom(add_time[3]+1,0);
}
opcion = manejo_menu(0,0,1);
salir=false;
while (salir==false) //repetimos hasta que salgamos
{
switch (opcion)
{
case 0: //Insolar placa
opcion=manejo_menu (3,3,4);
break;
// case 2:
// ver_estadisticas();
// break;
case 3: //Tiempo manual
minutos=0;
segundos=10;
tiempo=pedir_tiempo(0,10);
//insolando...
cuenta_atras();
salir=true;
break;
case 4: //Tiempo programado
opcion=manejo_menu(5,5,7);
break;
case 6:
case 7:
case 5:
//insolando...
cuenta_atras();
salir=true;
break;
case 1:
opcion=manejo_menu(8,8,10);
break;
case 8:
case 9:
case 10:
minutos=read_eeprom(add_time[opcion-8]);
segundos=read_eeprom(add_time[opcion-8]+1);
pedir_tiempo(0,10);
write_eeprom(add_time[opcion-8],minutos);
write_eeprom(add_time[opcion-8]+1,segundos);
salir=true;
break;
}
}
}
}
int manejo_menu(int num_menu, int opc_min, int opc_max)
{
//esta function tiene como objetivo controlar los botones de la insoladora
//para poder navegar por los diferentes menús y funciones.
boolean salir=0;
byte refrescar;
byte opcion_num;
opcion_num=opc_min;
//forzamos la impresión de los menús
refrescar=true;
// printf(lcd_putc,"f%S", mensajes[opcion_num]);
//esperamos que se pulse algun boton
while (true)
{
if (input(PIN_a0)) //Boton -
{
if (opc_min !=opcion_num) opcion_num--;
delay_ms(200);
refrescar=true;
}
else
{
if (input(PIN_a7)) //Boton +
{
if (opc_max !=opcion_num) opcion_num++; //solo aumentamos si no estamos fuera de los límites
delay_ms(200);
refrescar=true;
}
else
{
if (input(PIN_a6)) //Boton OK
{
if (opcion_num >4 && opcion_num <8)
{
minutos=read_eeprom(add_time[opcion_num-5]);
segundos=read_eeprom(add_time[opcion_num-5]+1);
}
delay_ms(200);
return (opcion_num);
}
}
if (refrescar)
{
printf(lcd_putc,"f%S", mensajes[opcion_num]);
if (opcion_num >4 && opcion_num <8)
{
printf (lcd_putc," %02d:%02d }", read_eeprom(add_time[opcion_num-5]), read_eeprom(add_time[opcion_num-5]+1));
}
refrescar=false;
}
}
// mostrar_mensaje(num_menu, opcion_num); //Mostramos el mensaje correspondiente al menú seleccionado
}//while
}
int pedir_tiempo (min_minutos, min_segundos)
{
boolean refresca_lcd;
//minutos=min_minutos;
//segundos=min_segundos;
printf(lcd_putc, "fTiempo %02d:%02d",minutos, segundos);
while (true) // bucle infinito... se sale por el return del boto ok
{
refresca_lcd=false;
if (input(PIN_a0)) //Boton -
{
refresca_lcd=true;
if (segundos == 0)
{
if (minutos!=min_minutos)
{
segundos=59;
minutos--;
}
}
else
if (segundos!=min_segundos)segundos--;
delay_ms(151);
}
else
{
if (input(PIN_a7)) //Boton +
{
refresca_lcd=true;
if (minutos<99) //maximo 99 minutos
{
if (segundos==59) //transformamos segundos en minutos
{
segundos=0;
minutos++;
}
else segundos++;
}
delay_ms(151); //evitamos rebote
}
else
{
if (input(PIN_a6)) //Boton OK
{
delay_ms(151);
return;
}
}
}
if (refresca_lcd) printf(lcd_putc, "fTiempo %02d:%02d",minutos,segundos);
}
}
/*void ver_estadisticas ()
{
lcd_putc("Tiempo in. hhh:mm:ss"
lcd_putc("Isolado error. xxx"
lcd_putc("Numero insolados xxx"
espera_ok();
}*/

Escrito originalmente por jhohannf
Hola a todos.
Yo tambien he tenido y sufrido el problema del ruido en la fuente de alimentacion, como han sido.
1. reset al encender cargas inductivas.
2. Congelamiento de los PIC o enloquesidad.
3. Borrado no intensional de los datos de la eeprom interna para los que tienen eeprom interna de datos.
No me gusta mucho estos problemas pero se han ido lidiando de la siguiente forma.
La fuente mas sencilla y menos costosa que a mi me parade es la del LM7805, el cual pongo a la entrada un condensador de 1000uf/25V en paralelo con uno ceramico de 0.1uf y despues del regulador (LM7805) pongo otro de 1000uf/16V en paralelo con otro de 0.1uf ceramico y finalmente entre la patas de alimentacion del micro un condensador de 100uf/16V, si puedo poner un varistor a la entrada no esta de mas, Tambien adiciono condendadores ceramicos en paralelo con la salida donde se controlan la cargas inductivas.
Estos problemas me han sido frecuentes cuando manejo cargas como relevos, motores y cualquir carga que genera alguna chispa.
Este problema esta descrito en la documentacion que posee microchip en su pagina web el tema se basa en el siguiente titulo "Understanding and Using Supervisory Circuits", aqui explican de forma detallada el por quee pasan estos problemas, y todo apunta a problemas de fuente de alimentacion. Es un articulo muy bueno, pero no dan soluciones solo explican por que pasa. Solo nos queda a nosotros encontrar la solucion y publicarla en foros para poder solucionar eestas situaciones tan incomodas. Si alguien tiene una solucion efectiva y generica, seria interesante quee la publicara para bien de todos.
El articulo detallado por microchip, habla de los problemas por reset , cuando el voltaje cae a un nivel bajo por el cual el micro no trabaja como deberia y sus registros y su memoria se corrompen haciendo saltar su contador de programa a la PM, o quien sabe donde, lo cual finalmentee termina con el bloqueo o enloquecidad del micro. Esto ocurre con los trascientes o altibajos que la fuente no es capas de asimilar, los circuitos de BrowOutReset, del micro ayudan a que cuando eel voltaje caiga por debajo del valor de trabajo nominal el micro se resetee y espere un tiempo prudente hasta que retorne a su valor estable, lo cual vita que see corrompan los datos del programa y se pierda el control del programa, el Pwr o retardo por encentido tiene una funcion similar, solo que es al inicio encendido del micro para que espere hasta que se restablesca a un valor estable la alimentacion.
La microchip recomienda circuitos adicionales que ayuden a garantizar un reset seguro para evitar que el programa se salga de curso, ejm un boton de reset manual o circuito especializado para esto, pero yo considero que aveces nesecitamos que nuestro equipo trabaje constantemente y no se resetee tan facilmente.
Yo pienso de que los micros PIC son muy suceptibles a ruido y tal vez no tan buenos para aplicaciones serias, espero estar equivocado y que alguien nos muestre como de usan de forma seria estos micros o unas especificaciones de diseño serias y no como las publicadas por la mayoria de personas o hasta la misma microchip (Ejm aplicaicones sin transformador, Donde trabaja ni el diablo es capas de poner a trabajar seriamente un micro).
Espero que adicionando los capacitores mejor la insoladora, y si te funciona nos cuentes, a mi hasta ahora 1 de nov del 2005 me ha funcionado pero han sido todos datos empiricos calculaado a traves de prueba y error. espero hallar soluciones mas exacta.
Att. jhohannf .
Escrito originalmente por osqui_llar
Hola, creo que estas matando moscas a cañonazos, usando un triac.
La mejor manera de aislar tu circuito electronico de la fuente reactiva es a través de un relé de toda la vida. Eso si, has de colocar el condensador y la resistencia en paralelo con la reactancia para el corte del fluorescente.
Yo tengo en mi acuario un sistema con un Z86E40 y no tengo problema para apagary encender los fluorescentes (100W). Mi consejo es que uses un 2803 para activar un relé. y te olvidas de problemas.
Un saludo y suerte