TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ceneca en 23 de Noviembre de 2010, 16:16:34

Título: dimmer de dos canales con pic
Publicado por: ceneca en 23 de Noviembre de 2010, 16:16:34
hola, a todos.
 los molesto por lo siguiente  estoy en el armado de un regulador de intensidad de 2 canales para lograr efecto día noche, he leído mucho y he extraído info del foro para tratar de lograrlo ya que recién estoy empezando a entender el mundo pic, mis conocimientos son casi cero y he empezado por algo difícil, de igual modo ya estoy con varios puntos mas claros.
En un hilo (http://www.todopic.com.ar/foros/index.php?topic=19120.120) bastante antiguo hay un programa en C que mas o menos se ajusta a lo que busco, este es

Código: [Seleccionar]
/********************************************************/
/* Proyecto regulaDOr de luces dia noche               */
/********************************************************/
#include <12F683.h>
#FUSES NOWDT, HS, NOCPD, NOPROTECT, MCLR, PUT, BROWNOUT, IESO, NOFCMEN
#use delay(clock=20000000)
#use fast_io(A)

#define MaximoLuz 12
#define MinimoLuz 93 // Absoluto

#byte port_a = 5
#bit  TRIAC1 = port_a.0
#bit  TRIAC2 = port_a.1

/******************************************************/
/* Declaración de variables                           */
/******************************************************/
// Variable auxiliar
int cuenta;
int disparo = 1;
// Va contando nivel de disparo
int nivel = 0;

int periodoDia = MinimoLuz; //Empieza apagado
int periodoNoche = MaximoLuz; // Empieza encendido
// Diferencia de periodo entre cada paso
int paso = 2;
// Cuenta los segundos que pasan
int segundos = 0;

// Segundos entre cambio de ciclo
int cambio = 35;

// Variable para contar el tiempo transcurrido - Se incrementa en cada INTerrupción externa: 1/100 segundos
int16 tiempo = 0;

#INT_TIMER0
void disparo() // El timer cuenta 1 cada 51.2 us. Con 2 tics saltará cada 102.4us
{
set_timer0 (254); // Salta cada 102.4us

if(nivel == periodoDia)
output_low(PIN_A0);
if(nivel == periodoDia+5)
output_high(PIN_A0);

if(nivel == periodoNoche)
output_low(PIN_A1);
if(nivel == periodoNoche+5)
output_high(PIN_A1);

nivel++;
}

#INT_EXT
void EXT_isr()
{
set_timer0 (255);

nivel = 0;

if (cuenta == 0)
{
ext_int_edge (H_TO_L); // La próxima interrupción será de bajada
}
  else
{
ext_int_edge (L_TO_H); // La próxima interrupción será de subida
  }
cuenta = !cuenta;

tiempo++; // Cuenta 1 / 100 segundos más.

if(tiempo == 100) // 1 segundo
     {
      tiempo = 0;
     /* if(periodoDia > MaximoLuz)
      periodoDia -= paso;
else if(periodoDia < MaximoLuz)
periodoDia = Maximoluz;*/

segundos++;

if(segundos > 0 && segundos <= cambio)
{
//periodoDia = MinimoLuz+((30-segundos)*paso);
  periodoDia = periodoDia-paso;
periodoNoche = periodoNoche+paso;
}
if(segundos == cambio+1)// && segundos <= 60)
{
periodoDia = MaximoLuz;
periodoNoche = MinimoLuz;
}
if(segundos > 2*cambio && segundos <= 3*cambio)
{
periodoDia = periodoDia+paso;
periodoNoche = periodoNoche-paso;
  }
if(segundos == 3*cambio+1)// && segundos < 120)
{
               periodoDia = MinimoLuz;
               periodoNoche = MaximoLuz;
  }

      if(segundos == 4*cambio)
          segundos = 0;
}
}

void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
  enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
  enable_interrupts(INT_TIMER0);

     set_tris_A(0b111100);

// Desactivamos las salidas
  output_high(PIN_A0);
output_high(PIN_A1);

// periodoDia = MaximoLuz;

  for(;;)
{
}
}

De este mas o menos he deducido como es el oscilador, las salidas, y tengo dudas del cto detector de cruce por cero, no se si poner una resistencia directa, desde el trafo , o usar un opto. igualmente posteare el cto en breve, no se que opinan al respecto, que usarían?
esa es una de las dudas y la otra es saber si me orientan como poder compilar para obtener el .hex o si alguien me haría el favor de compilarlo y postearlo, así queda para alguien mas, ya que del hilo de donde esta el código, han sacado toda la info publicada, (o yo no puedo acceder  :() asi que quisiera resolver mi problema y ver si comparto esto para quien lo quiera.

ojala puedan ayudarme
Título: Re: dimmer de dos canales con pic
Publicado por: bmb en 23 de Noviembre de 2010, 20:01:05
Hola ceneca, hay varias maneras de detectar el cruce por cero.  En esta página (http://sound.westhost.com/appnotes/an005.htm) encuentras un circuito sencillo de uno, o en la AN236 (http://ww1.microchip.com/downloads/en/AppNotes/00236a.pdf) de Microchip también puedes ver algunos circuitos que te pueden servir.  Te adjunto el archivo compilado de tu programa.

Saludos!

Edito: esta AN958 (http://ww1.microchip.com/downloads/en/AppNotes/00958A.pdf) de Microchip también te puede dar ideas.
Título: Re: dimmer de dos canales con pic
Publicado por: ceneca en 23 de Noviembre de 2010, 20:25:55
mil, gracias bmb,  :-/ :-/ :-/ :-/
ya teniendo ahora el .hex debo terminar el cto , lo posteare en base a lo que deduzco del programa , lo haré en eagle y lo iré mostrando , a ti y todos los foreros, ahora echare un vistazo a tus datos y tratare de ensamblar todo.

tratare de tenerlo para mañana, y gracias por tu ayuda !!!!!!!!
Título: Re: dimmer de dos canales con pic
Publicado por: ceneca en 24 de Noviembre de 2010, 11:49:53
Bueno, tras la ayuda de bmb, he intentado armar el cto, pero me surgen dudas, aver si me ayudan ya que estoy metido en un tremendo lio , (para mi), hasta ahora creo tener lo siguiente

PIN1: VCC +5volt
PIN2: osc
PIN3: osc
PIN4: aqui, entra el detector?
PIN5: ?
PIN6: salida triac
PIN7:salida triac
PIN8: gnd

estos son los pines del pic, y no se como esta, hasta aqui (bien o mal), ya que mi experiencia es cero total, pero creo que es asi, les adjunto el cto para ver si me dan una mano.
con respecto al detector no se si funcione , pero estoy leyendo las aplicaciones que me paso bmb y la an 521, para comprender un poco mas. y algo de c ya que consegui un tutorial.

espero su ayuda si es posible y gracias . :mrgreen: :mrgreen:

Título: Re: dimmer de dos canales con pic
Publicado por: bmb en 24 de Noviembre de 2010, 14:57:06
Hola, estuve viendo el diagrama y yo lo veo bien por ahora.  Te falta conectar el negativo del puente. Si el componente que está conectado al pin 1 del transformador es un varistor, no va conectado asi. Que función cumple OK1?.

Bueno, yo pondría la señal del detector de cruce por cero en el pin 5 (GP2) para aprovechar la interrupción.  Por lo demás se ve bien el circuito.

Saludos!
Título: Re: dimmer de dos canales con pic
Publicado por: Suky en 24 de Noviembre de 2010, 14:59:11
cto = circuito?  :?:
Título: Re: dimmer de dos canales con pic
Publicado por: ceneca en 24 de Noviembre de 2010, 18:20:45
hola bmb, esta así en la librería de eagle es un protector térmico, no es que lo busque a propósito, solo lo elegí por elegir dentro de la librería (trafo) y lo coloque pero es un fusible o protector térmico y va en serie si no me equivoco.
  te pregunto ya que aun no lo comprendo y me gustaría hacerlo ¿dentro del programa hay algo que te indique que va en el pin5 ?    desde ya agradezco tu ayuda y predispocision.
 ahora voy a armar el circuito.
Al pin no usado le pongo una R  a vcc ?,  voy a corregir el esquemático y  a preparar todo para hacer las pruebas, así cuando funcione posteo el cto y el esquemático para quien lo quiera hacer.  :mrgreen:

hola suky , pido disculpas si no se entiende, pero toda la vida he abreviado circuito como cto, pero la escribo y listo para evitar confusiones, gracias por tu aporte. pero dime también cual es tu opinión acerca del circuito por favor.

Armo y veo los resultados veremos si lo tengo para mañana

saludos


Título: Re: dimmer de dos canales con pic
Publicado por: bmb en 24 de Noviembre de 2010, 19:10:36
Hola ceneca, eso depende de la forma en que quieras programar tu aplicación.  Una de las formas de hacerlo, es estar interrogando al pin de entrada (polling) de cruce por cero hasta que esté activo y proceder con el algoritmo de control de fase.  Otra forma es que la señal de cruce por cero active la interrupción externa (GP2) en el pin 5 y allí proceder con el algoritmo de control de fase.  No se con que compilador vas a trabajar, pero léete con cuidado la nota aplicativa de Microchip AN958 en el link que posteé antes.  Allí utilizan el método 'polling' para detectar el cruce por cero, sin embargo al hacerlo por interrupciones, tienes la ventaja de que otras tareas que tenga el PIC no te van a 'desajustar' los tiempos precisos que necesitas para el control de fase.

Saludos!
Título: Re: dimmer de dos canales con pic
Publicado por: ceneca en 24 de Noviembre de 2010, 19:19:48
De nuevo gracias!!!!!! bmb.
 haré caso de tu recomendación y ya mismo me pondré a leer la hoja de datos, con detenimiento ya que le he dado una mirada, muy por arriba , aunque para mi es chino básico, pero igual le voy a poner todo mi esfuerzo. de igual forma comenzare a armar el circuito para ir haciendo las pruebas, espero tener suerte y tu ayuda ya que estoy muy perdido, pero avanzando!!

saludos!!
Título: Re: dimmer de dos canales con pic
Publicado por: bmb en 24 de Noviembre de 2010, 19:41:38
Hola, en este link (http://www.ubasics.com/adam/electronics/doc/phasecon.shtml) hay algo de información que te puede aclarar el concepto de control de fase con una aplicación básica en assembler.  También le puedes dar una mirada a este otro que está escrito en C y tiene también otro circuito de detección de cruce por cero: PIC16F84 Based Triac (http://www.microchipc.com/sourcecode/#triac)

Saludos!
Título: Re: dimmer de dos canales con pic
Publicado por: Suky en 24 de Noviembre de 2010, 20:39:09
hola suky , pido disculpas si no se entiende, pero toda la vida he abreviado circuito como cto, pero la escribo y listo para evitar confusiones, gracias por tu aporte. pero dime también cual es tu opinión acerca del circuito por favor.

Armo y veo los resultados veremos si lo tengo para mañana

saludos


Es cuestion de respetar las reglas del foro y que los demás entiendan de que estas hablando  ;-)

Yo utilizo un esquema similar, y por ejemplo en la salida del OK1 obtengo la señal de cruce por cero y la coloco a un pin de interrupción por flanco. Solo que uso dos resistencias de 18k para 220 Vef.


Saludos!


Saludos!
Título: Re: dimmer de dos canales con pic
Publicado por: ceneca en 24 de Noviembre de 2010, 23:09:24
gracias por responder, estoy de acuerdo con las resistencias, lo había pensado cuando leí una de las respuestas de bmb , en una de la aplicaciones,que me dejo para revisar  y ahora con tu comentario veré de modificarlas.

de acuerdo, si hay normas hay que cumplirlas. y te felicito por la web, estoy alli viendo el tutorial de mplab  c18.

saludos!!  ;-)
Título: Re: dimmer de dos canales con pic
Publicado por: ceneca en 25 de Noviembre de 2010, 16:18:37
  :( he armado y puesto en marcha el circuito, con mal resultado, tenia la esperanza de que el código estuviera mas o menos bien , pero por lo visto no es así, las lamparas tienen el siguiente comportamiento:
una de ellas se enciende, se apaga como parpadeando y luego se enciende de la misma manera, y allí queda , la otra permanece siempre encendida.creo que es el código, ya que estoy convencido de que el pcb es correcto, lo he revisado mil veces de igual modo ya estoy empezando una cuidadosa revisión, ojala sea aquí el problema, ya que el código para mis conocimientos esta lejos de poder resolverlo :oops:. veremos como sigo, lo que pido si es posible que alguien vea el código y me de una mano,  acudo al foro por ayuda o al menos alguna orientación, como para que pueda resolverlo.

gracias, saludos!!
Título: Re: dimmer de dos canales con pic
Publicado por: bmb en 25 de Noviembre de 2010, 21:20:35
Hola ceneca, postea el circuito final que estás usando y apenas tenga un tiempo libre lo monto en Proteus para ver que pasa.

Saludos!
Título: Re: dimmer de dos canales con pic
Publicado por: ceneca en 26 de Noviembre de 2010, 13:48:29
bueno gracias bmb!!!!!  :-/

yo estoy en plena lectura  de tutoriales, instrucciones, hilos , post , tratando de empaparme en el tema, así que tratare de ayudar, y te agradezco la colaboración, aquí adjunto el circuito que monte, te cuento que he hecho , un poco de pruebas cambiando el detector , por una resistencia como lo indica la AN521, he probado ademas un detector con transistor, y el resultado fue siempre el mismo se enciende una, se apaga parpadeando, se vuelve a encender y asi queda y la otra siempre esta encendida.

He visto que en el encabezado del programa define un clock de 20MHZ y que en esta lineas

include <12F683.h>
#FUSES NOWDT, HS, NOCPD, NOPROTECT, MCLR, PUT, BROWNOUT, IESO, NOFCMEN

HS es un oscilador externo a cristal, o sea que lo que yo puse en el circuito estaría bien, en principio.
Ademas he visto en otra nota de aplicación que la forma de conexión de los triac y los opto esta correcta, por eso revisando el pcb y no encontrando errores de montaje considero que el problema esta en el código, (eso creo)  :lol:

ni bien este en casa en un par de horas seguiré  PELEÁNDOME CON ESTO.

p/d, en el esquema figura el moc 3010, no lo cambie al corregir ...... se me paso , pero uso los moc3021, lo otro esta ok


GRACIAS POR TU AYUDA!!!!!!!!

saludos!!!
Título: Re: dimmer de dos canales con pic
Publicado por: groundman en 27 de Noviembre de 2010, 13:47:14
yo no me entere bien hasta que utilice un osciloscopio.pero si no tienes.seria una gran ayuda para ti el usar el proteus.
conjuntamente con el mplab.puede que te cueste un poco aprender el funcionamiento del simulador.pero al final vas a avanzar mucho.
para mi ya es imprescindible simular el circuito antes de montar el circuito.
antes era reacio.pero avanzas como 10 o 20 veces mas rapido. :)

por el foro hay diferentes imagenes del tipo de onda que tienes que obtener.

y ten muy encuenta que hace falta un minimo de tiempo excitando el gate del tiristor.en caso contrario puedes sufrir intermitencias.
Título: Re: dimmer de dos canales con pic
Publicado por: ceneca en 27 de Noviembre de 2010, 15:13:04
Hola groundman, gracias por tu comentario!!!, ademas el amigo bmb, también  utiliza proteus, así que tendré que ver de implementarlo, comenzare a ver algo de informacion a cerca del mismo, y lo del osciloscopio, en eso estoy metido, hay por allí un hitachi de un amigo que desea venderlo así que tendré que tener una seria charla con el.jajajaj.

Lo que ocurre es que no se como voy a meter tanta data en mi cabeza, el lenguaje c, tutotiales de mplab y c18, ccs, un curso de pic, y ahora proteus!!! :shock: :shock:, creo que seria mejor volver a la escuela , o comprarlo hecho!!!jejej  pero no me dejare vencer, algo va a salir, ademas es cierto y lo que me comentas acerca de la prueba del circuito antes de la implementación del mismo también lo veo sumamente necesaria.

Agradezco tus consejos y los tendré en cuenta

saludos!!!!!
Título: Re: dimmer de dos canales con pic
Publicado por: Suky en 27 de Noviembre de 2010, 15:37:24
Podrías comenzar con un firmware más sencillo, donde controlas de forma adecuada cada triac. Y después comenzar a jugar con eso. Te va a ser muy útil proteus, y realiza una búsqueda en el foro que ya se ha tratado el tema.


Saludos!
Título: Re: dimmer de dos canales con pic
Publicado por: ceneca en 28 de Noviembre de 2010, 10:38:32
Hola!!!, he estado leyendo a cerca de c y he metido un poco de mano en el programa, al menos estoy empezando a comprender las instrucciones, y ver como funciona. el circuito, en principio estaría funcionando bien, al menos desde las patillas de salidas del pin levantando este del circuito si doy 5v, las lamparas encienden y apagan según les de la orden, sigo teniendo dudas y no logro darme cuenta, cual es la patilla de sincronizacion, he ahora visto  y descargado un dimmer cuyo fimware también esta en c para compararlo y ver que y cuales son las diferencias. Asi que ni bien tenga alguna novedad la colgare aquí. De momento me meteré de lleno a el fimware y luego veré de implementar proteus , ire de a poco.

Gracias y saludos !!
Título: Re: dimmer de dos canales con pic
Publicado por: bmb en 28 de Noviembre de 2010, 11:13:07
...enciende una, se apaga parpadeando, se vuelve a encender y asi queda y la otra siempre esta encendida.

Hola ceneca, finalmente tuve algo de tiempo y al montar el circuito en Proteus, no se por que razón no logro que me funcione con los triacs, pero si los desconecto y veo los oscilogramas de las dos salidas con respecto al de AC, pasa exactamente lo que dices.
Lo que sugiere Suky me parece lo más práctico ahora; de hecho es asi como inicio algún proyecto con el que no he tenido experiencia. Si quieres vamos empezando un programa pequeño que, por ejemplo lea un potenciómetro por una entrada análoga y con ese valor hacemos que varíe el retardo del disparo para un triac.

Entonces lo primero sería tener claro los tiempos que se manejan:

Son 120 semi ciclos en una forma de onda de 60Hz ó
Son 100 semi ciclos en una forma de onda de 50Hz
Cada semi ciclo dura  8.333 mS (60Hz) ó
Cada semi ciclo dura 10.0 mS (50Hz)

Según el retardo con respecto al cruce por cero que se le de al disparo de cada semiciclo, tendremos un control por fase del triac.  Una vez encendido el triac, por un pulso en el gate, este no se apagará hasta que no deje de fluir corriente a través de él, o sea en el cruce por cero.

Entonces lo primero sería intentar hacer el encabezado de configuración del PIC iniciando apropiadamente el Timer0 para que pueda cubrir el rango de tiempo para los retardos que necesitamos, además configurarlo también para que tenga una entrada análoga y configurar las dos interrupciones: int_EXT e int_RTCC.
Yo suguiero usar la siguiente configuración en los pines y fuses:

Código: [Seleccionar]
// Conexiones:
// PIN    Conexión
// ---    --------------------
//  1     Vdd
//  2     Cristal
//  3     Cristal
//  4     MCLR
//  5     INT EXT (Zero Cross)
//  6     Optoacoplador
//  7     Potenciómetro
//  8     Vss
//

#include <12F683.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOCPD                    //No EE protection
#FUSES NOPROTECT                //Code not protected from reading
#FUSES MCLR                     //Master Clear pin enabled
#FUSES PUT                      //Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOIESO                   //Internal External Switch Over mode disabled
#FUSES NOFCMEN                  //Fail-safe clock monitor disabled

#use delay(clock=4000000)

Bueno, me cuentas que opinas y si te animas vamos armando el programita aquí, con la ayuda de todos hasta que lo hagamos funcionar.

Saludos!
Título: Re: dimmer de dos canales con pic
Publicado por: ceneca en 28 de Noviembre de 2010, 11:25:08
Citar
Bueno, me cuentas que opinas y si te animas vamos armando el programita aquí, con la ayuda de todos hasta que lo hagamos funcionar.

Me parece bárbaro, estoy dispuesto, solo les pido paciencia, voy de cero!!! :(

aprovechare antes de empezar  a leer algo mas para poder comprender mejor , y ya postear las primeras lineas.

gracias!!!
Título: Re: dimmer de dos canales con pic
Publicado por: bmb en 28 de Noviembre de 2010, 12:10:43
Bueno para que tengas una idea de como configurar el Timer0 y el ADC, te adelanto algo del código (que ya hice), y la forma de configurarlos:

Código: C
  1. // dimmer.c
  2. // Noviembre 28 de 2010
  3. // bmb
  4. //
  5. // En general:
  6. // clock = 4000000 Hz
  7. // Tosc = (1 / clock)
  8. // Tiempo = 4 x Tosc x Valor a contar en Timer + 1 x Rango del Divisor
  9. // Tiempo = 4 x 0.00000025 x 256 x 32 = 8.192mS        // Timer 8 bits a 4MHz
  10. //
  11. // Tiempos:
  12. // Son 120 medios ciclos en una forma de onda de 60Hz o
  13. // Son 100 medios ciclos en una forma de onda de 50Hz
  14. // Cada medio ciclo dura  8.333 mS (60Hz) o
  15. // Cada medio ciclo dura 10.0   mS (50Hz)
  16. // En este ejemplo los valores estan calculados para 60Hz
  17. // Ton para el gate del optoacoplador = 100uS
  18. //
  19. //
  20. // Conexiones:
  21. // PIN    Conexion
  22. // ---    --------------------
  23. //  1     Vdd
  24. //  2     Cristal
  25. //  3     Cristal
  26. //  4     MCLR
  27. //  5     INT EXT (Zero Cross)
  28. //  6     Optoacoplador
  29. //  7     Potenciometro
  30. //  8     Vss
  31. //
  32.  
  33. #include <12F683.h>
  34. #device adc=8
  35.  
  36. #FUSES NOWDT                    //No Watch Dog Timer
  37. #FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
  38. #FUSES NOCPD                    //No EE protection
  39. #FUSES NOPROTECT                //Code not protected from reading
  40. #FUSES MCLR                     //Master Clear pin enabled
  41. #FUSES PUT                      //Power Up Timer
  42. #FUSES NOBROWNOUT               //No brownout reset
  43. #FUSES NOIESO                   //Internal External Switch Over mode disabled
  44. #FUSES NOFCMEN                  //Fail-safe clock monitor disabled
  45.  
  46. #use delay(clock=4000000)
  47.  
  48. unsigned int valor_adc = 0;
  49.  
  50. #int_RTCC
  51. void  RTCC_isr(void)
  52. {
  53.    
  54. }
  55.  
  56. #int_EXT
  57. void  EXT_isr(void)
  58. {
  59.    
  60. }
  61.  
  62. void main()
  63. {
  64.    setup_adc_ports(sAN0|VSS_VDD);
  65.    setup_adc(ADC_CLOCK_INTERNAL);
  66.    setup_timer_0(RTCC_INTERNAL | RTCC_DIV_32);
  67.    setup_timer_1(T1_DISABLED);
  68.    setup_timer_2(T2_DISABLED,0,1);
  69.    setup_ccp1(CCP_OFF);
  70.    setup_comparator(NC_NC);
  71.    setup_vref(FALSE);
  72.    ext_int_edge(H_TO_L);
  73.    enable_interrupts(INT_RTCC);
  74.    enable_interrupts(INT_EXT);
  75.    enable_interrupts(GLOBAL);
  76.  
  77.    set_adc_channel(0);
  78.    
  79.    while(true)
  80.    {
  81.       valor_adc = read_adc();
  82.    }
  83. }

Bueno, nos vas contando de tus avances,

Saludos!

EDITO:  cambia este fuse:
Código: [Seleccionar]
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)por este:
Código: [Seleccionar]
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
Título: Re: dimmer de dos canales con pic
Publicado por: ceneca en 28 de Noviembre de 2010, 13:01:21
ok !!!, bien quiero detenerme en el cuerpo principal y estudiarlo un poco , ya te consultare mis dudas , quiero ir paso a paso y comprendiendo bien lo que vamos haciendo, perdón por las demoras pero si no no puedo seguirte  :oops:.

hasta aquí estoy bien pero quiero ver un par de instrucciones, que no entiendo .y aqui no tengo el machete, !!!
ya te preguntare, ... y mucho!!, l
saludos!!
Título: Re: dimmer de dos canales con pic
Publicado por: Suky en 28 de Noviembre de 2010, 13:06:37
Por acá está el proyecto en proteus de como Akenafab lo ha hecho funcionar. http://www.todopic.com.ar/foros/index.php?topic=32680.msg274038#msg274038


Por ahí para que se entienda un poco más fácil pueden hacer los siguiente. Pensando en 50Hz, tenemos periodos de 20ms, pero debemos controlar el triac cada medio ciclo, o sea 10ms. Entonces si disparamos el triac a los 5ms de detectado el cruce por cero estaremos entregando 50% de la onda. Para cargar el timer podemos hacer una regla de tres simple:

Configurando timer setup_timer_0(RTCC_INTERNAL | RTCC_DIV_64), con eso pre-cargando el timer con 100 obtenemos 10ms.-

write_timer0((Porcentaje/100.0)*155.0 + 100.0);

Entonces, cada vez que detectamos el cruce por cero cargamos el timer con el valor deseado y lo habilitamos, y en la interrupción del timer activamos el Gate del triac por unos us y desactivamos el timer. La variable Porcentaje puede controlarse externamente a gusto generando los efectos que se deseen.


Saludos!
Título: Re: dimmer de dos canales con pic
Publicado por: bmb en 28 de Noviembre de 2010, 16:38:58
Hola Suky, no había podido hacer que me trabajara el triac con el optoacoplador en proteus; muchas gracias por el dato.  Te cuento que yo ya había hecho el programa y funciona bien.  La idea es ir posteando por partes el programa para que los que estén interesados como ceneca,  lo vayan entendiendo bien.  Por ejemplo la idea de configurar el Timer0 lo más ajustado posible a (en mi caso 60Hz) los 8.333 mS que dura el semiciclo es la de tener la mayor cantidad de pasos discretos posibles de atenuación.  Si configuro el timer asi: setup_timer_0(RTCC_INTERNAL | RTCC_DIV_64), me tocaría empezar a contar desde 128 para los 8,333 mS, por lo que tendría solo la mitad de pasos discretos para la atenuación.  Si configuro el timer como lo estoy haciendo, setup_timer_0(RTCC_INTERNAL | RTCC_DIV_32), voy a disponer de casi los 256 pasos discretos para la atenuación.  Digo casi, porque en la práctica solo puedo llegar desde 0 hasta 240, en donde casi llega al siguiente cruce por cero; si pongo valores mayores a 240, me paso del siguiente cruce por cero con las consecuencias que ya te imaginarás.  Le voy a dar una mirada al aporte de Akenafab y luego te comento.


Saludos! 
Título: Re: dimmer de dos canales con pic
Publicado por: Suky en 28 de Noviembre de 2010, 17:20:25
Dependerá entonces de la frecuencia, aquí se trabaja a 50 Hz  ;-)


Saludos!
Título: Re: dimmer de dos canales con pic
Publicado por: ceneca en 29 de Noviembre de 2010, 09:38:35
GRACIAS, SUKY Y BMB, ayer estuve como dije intentando comprender un poco mas , yo intentare ir modificando las lineas para los 50 hz, hoy al llegar del laboral, si el tiempo me da lo posteare para que lo corrijan, (eso seguro), ya que estoy entendiendo pero muyyyy de apoco, ahora viendo el proyecto e akenafab , el amigo groundman colgo esta imagen que me aclara un poco (eso creo) lo que hablan del timer
(http://img269.imageshack.us/img269/9796/alterna.png)

o sea pasando en limpio, el detector de cruce por cero sincroniza la onda con el disparo del triac,de esta forma, cada vez que la tensión pase por 0V,. Lo que voy a hacer es activar un TIMER, para retrasar la conmutación al momento deseado que va dentro de los 10ms del semiperiodo. o sea

 la corriente de red va a 50 Hz, o sea como explica suky 20 ms de periodo. Pero como trabajamos con semiperiodo, serian 10 milisegundos.

Es decir, desde que detectamos el paso por 0V, tenemos un margen de 0 a 10milisegundos para activar el Triac.
Si activamos en 0 seg el triac permanecera encendido 10 ms  entonces la luz lucirá el maximo
Si activamos en10ms : La luz estará apagada, a los 9ms casi apagada etc, etc,

lo que no entiendo y pido me disculpen por la ignorancia es porque suky dice de activar el timer unos microseg y luego desactivarlo, no se desactiva al proximo cruce por cero? eso no lo entiendo,

esto me aclaro bien el tema del disparo del triac pero no entiendo como es que funciona lo del timer  :oops:, tal vez esta delante de mis ojos pero no lo entiendo, lo desactivo yo o se desactiva al cruce por cero?, y el control externo se haría a través de un pot o un pulsador ? a travez de la patailla 7 como lo definio bmb, y para eso se haria una tabla? y de alli daria un valor al pic para saber en que parte de la onda hago el disparo? seria algo asi o estoy muy errado?

al menos tengo bastante mas en claro como es el principio de funcionamiento, pero en el código aun me mareo y mucho, el programa y las instrucciones me confunden un poco, tengo que aprender mas su funcionamiento.

De igual manera les ruego me tengan paciencia, voy  lento pero quiero comprender. y mil gracias!!!

saludos!



Título: Re: dimmer de dos canales con pic
Publicado por: Suky en 29 de Noviembre de 2010, 10:35:01
No, yo hablo del Gate del triac. Cuando salta la interrupción del timer hay que trabajar sobre el Triac, y lo que se hace es enviar un pulso a su pin Gate para engancharlo. Yo envío un pulso de 200 us. Es lo que se puede ver en la imagen que adjunte.
El Triac al cruce por cero se desactiva solo. (Guarda con ello, hay Triac que tienen detector de cruce por cero, esos no sirven para este propósito)

Luego hablas de una tabla, pero no se a cual te refieres.

Saludos!
Título: Re: dimmer de dos canales con pic
Publicado por: bmb en 29 de Noviembre de 2010, 13:23:14
Hola ceneca, veo que ya tienes claro la mayoria de la idea.  Lo que dices con el timer en relidad es con el gate del Triac como te explica Suky.
La secuencia es más o menos asi:

- Se ha detectado un cruce por cero (interrupción externa bien sea por flanco ascendente o descentente)
- Se setea el timer0 con el valor de inicio deseado (el tiempo que queremos que el triac este apagado a partir del cruce por cero)
- Una vez se dispara la interrupción de timer0 por desbordamiento, encendemos la salida para el triac por unos 200uS y apagamos la salida.
- El triac permanece encendido hasta el siguiente cruce por cero.
- Esperamos la siguiente interrupción de cruce por cero y empezamos de nuevo.

Como ustedes en Argentina tienen una red eléctrica funcionando a 50Hz, el timer lo debes configurar como te dice Suky, porque como yo te había dicho no te alcanzaría el tiempo para un control total del semiciclo.  Cualquier otra cosa no dudes en preguntar.

Saludos!
Título: Re: dimmer de dos canales con pic
Publicado por: ceneca en 01 de Diciembre de 2010, 14:18:59
hola, de nuevo, he estado leyendo y comprendiendo un poco de c y de proteus y familiarizandome un poco mas con este mundo de los pic con el que no me llevo para nada, pero de a poco lo ire venciendo .
Pasa que en mi caso no tengo experiencia con pic y este proyecto pretendí que sea armar y listo, pero ahora se me ha transformado en un desafío, y ya que estoy en el baile voy a bailar , así que me detuve un poco a escuchar y ver las sugerencias de mis compañeros del foro, y he comenzado por leer muchos proyectos del foro , hojas de datos y manuales por eso estuve un poco ausente estos dias ya que estoy estudiando, les pido me tengan paciencia y me sigan ayudando. :lol:

Hay mucha info en el foro, y ademas encontré un pdf que estoy hojeando  a cerca del compilador de c y proteus, es u poco viejo pero creo que esta interesante, se los dejo tal vez les sirva de algo.
 bmb, ya he hecho en eagle el cto , con el programa estoy trabajando para pasarlo a 50 hz,( usando la idea de suky) y comenzando a hacer algunas pruebas a ver si aprendo algo,  :rolleyes:
Estoy dándole duro, voy lento por los tiempos que tengo pero seguro, asi que pronto hare mas preguntas!!

saludos
Título: Re: dimmer de dos canales con pic
Publicado por: stk500 en 01 de Diciembre de 2010, 14:50:48
Hola Ceneca, tengo la impresion que no ha leido bien la Regla del Foro, y te pido que la lea a fondo, esta prohibido poner programa ,tutorial o cualquier cosas con derechos de autor.
asi es que el  link que pusiste se borraras.

Título: Re: dimmer de dos canales con pic
Publicado por: ceneca en 01 de Diciembre de 2010, 15:47:23
Citar
asi es que el  link que pusiste se borraras.


Hola Rafael,  ya lo quite, TIENES TODA LA RAZÓN!!.Me disculpo.