Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

31/01/2011 #1

Avatar de wilfretronic

Dimmer digital --> PIC 12F675
Bueno, hace dos fines de semana atrás, invité a una señorita a mi departamento y no tenia un sistema para poner el ambiente mas romántico (luces bajas) y se me ocurrió un dimmer, pero ya todos conocerán el dimmer con perilla (potenciómetro) pero ese es muy simple, así que se me ocurrió utilizar un PIC y hacerlo digital y que sea controlado vía control remoto, también con pulsadores, así que me puse a buscar en internet a ver si alguien lo tenia desarrollado y encontré uno muy interesante pero sólo mostraba la teoría diciendo que no pondrá el código fuente porque hay muchas personas que lo venden y no quiere perjudicarlos, pero yo digo que la educación no debe ser guardada para algunos si no mostrada a todos que quieran avanzar en su desarrollo, bueno dejándonos de mucho floro les dejo el código fuente de un DIMMER digital con el PIC 12F675, claro es algo muy básico y creo que funciona porque realmente no lo e probado en físico pero si lo e simulado en PROTEUS 7.2 y esta de locos, en esta primera versión lo e hecho con pulsadores para variar la intensidad de la luz, bueno no es necesario explicar el código ya que en él esta bien detallada.

Código:
#include <12F675.h>
#fuses   INTRC_IO,NOWDT,PUT,NOPROTECT,NOCPD,NOMCLR,BROWNOUT
#use     delay(clock=4000000)
#define  GP0 PIN_A0   // TRIAC
#define  GP1 PIN_A1   // CONTROL REMOTO IR
#define  GP2 PIN_A2   // DETECTOR CRUCE POR CERO
#define  GP3 PIN_A3   // RESET
#define  GP4 PIN_A4   // UP
#define  GP5 PIN_A5   // DOWN

unsigned int16 fase=57536;
int1 cambio=1;

#int_TIMER1                      //Interrupción del TIMER1
void time()
{
 output_high(GP0);                //Se desbordó el TIMER1 y pongo en "0" el gate del triac
}

#INT_EXT                         //Interrupción externa.
void cero()                      //Función de la interrupción externa
{
 output_low(GP0);               //Pongo en "1" el gate del triac
 set_timer1(fase);               //Cargo el TIMER1 con el valor determinado por las teclas y espera que desborde
 enable_interrupts(INT_TIMER1);  //Habilito la interrupción del TIMER1 y salta a su respectiva interrupción

 if(cambio==0)                   //Para ver con que flanco de interrumpirá ahora
 {
  ext_int_edge(H_TO_L);          //Interrupción con flanco de bajada
  cambio=1;                      //Cambia para que la proxima la interrupción sea en flanco de subida
 }
 else
 {
  ext_int_edge(L_TO_H);          //Interrupción con flanco de subida
  cambio=0;                      //Cambia para que la proxima la interrupción sea en flanco de bajada
 }
}

void main()                      //Función principal
{
 ext_int_edge(L_TO_H);           //Primera interrupción se dará en flanco de subida
 setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);  //Configuración de TIMER1
 enable_interrupts(INT_EXT);     //Habilito interrupciones externas
 enable_interrupts(GLOBAL);      //Habilito las interrupciones generales
 
while(1){
  restart_wdt();                 //Apago el watch dog timer
  if(input(GP4)==0)              //Si el pulsador se a apretado
  {if(fase<=64536&&fase>57536){delay_ms(10); fase=fase-5;}} //Aumenta la luminicidad
  if(input(GP5)==0)              //Si el pulsador se a apretado
  {if(fase>=57536&&fase<64536){delay_ms(10); fase=fase+5;}} //Disminiye la luminicidad
 }
}
Ahora solo copiar el código y compilarlo en el CCS, ya dejan sus comentarios para ver como les fue o tal vez también para aportar mejoras, como punto final si alguien quiere armarlo le sugiero que lo alimente con una fuente capacitiva (sin transformador) lo pueden encontrar en muchas páginas y para el detector cruce por cero le de la misma red de 220vac colocar dos resistencias en serie de 5M y por lo menos de 5Wa la entrada de INT del PIC ya que esta patilla tiene una protección contra sobre voltaje y pas resistencias están para reducir la corriente y no hay problema en conectarlo de frente, bueno lo demas ya les dejo a criterio propio.

Les dejo enlaces:

Sobre el cruce por cero --> http://www.domoticachile.org/index.p...oria&Itemid=61
sobre el circuito (recomendable en archivos adj.) --> http://tech-freaks.net/?p=170

Bueno colegas mano a la obra, espero comentarios, próximamente voy a hacer que funcione con control remoto con el protocolo de PHILIPS RC5, bueno ya tengo el decodificador de estas señales pero aun me falta la fusión, la intención es hacer varios de estos dimmers y colocarlos en cada habitación y con el control remoto de philips activar cada dimmer con los números del control y subir o bajar la intensidad de luz con el volumen, pero eso lo tendré listo para la próxima semana y que publicare por este mismo canal :) suerte a todos.
30/03/2011 #2


esta muy interesante eso

yo estoy trabajando en algo muy parecido

la idea es mover unas cortinas, que seria como la intensidad luminica con el dimmer, lo estoy haciendo por pulsadores

vamos a ver como nos va... suerte
04/04/2011 #3

Avatar de wilfretronic

Pudiera ser para una cortina, pero no creo que te sirva de mucho, lo mas facil y barato seria simplemente un motor DC conectado al cordón de la cortina y y con un LM555 y un puente H lo pudieras controlar incluso hasta la velocidad.
04/04/2011 #4

Avatar de rascueso

que tal amigos. yo justamente estoy montando algo similar también con el 12F675 puedo grabarle en la memoria 4 botones del mando ir que quiera luego las funciones son 1 on / aumentar intensidad - 2 off 3 modo dormir 4- bajar intensidad. hasta ahi esta perfecto lo que no logro es que la lampara prenda un 100%. ni bien lo solucione lo subo. saludos
06/04/2011 #5

Avatar de wilfretronic

Me parece vacan, pero seria bueno que lo subieras parte de tu código para poder ayudar en algo, ya sera en la recepción de la señal IR o en activación del triac, bueno como dije sube parte de tu código y ya veremos.
05/05/2011 #6


Hola, me pudieras ayudar, nesecito controlar la velocidad de 2 motores de ac, me servira este codigo pienso usar el pic 16f877a
19/05/2011 #7


Que tal , me pareció muy interestante tu post, y me gustaria probarlo en fisico con un pic16f887 pero tengo algunas dudas, como que pones
output_high(GP0); //Se desbordó el TIMER1 y pongo en "0" el gate del triac
yo siento que eso lo pondria en alto osea en "1" aunque no se como tengas el diagrama, asi como unas variables que nunk usas como el del control remoto y el reset, o por ejemplo el detector de cruce por cero lo pones en el pin A2 pero en el codigo no veo donde lo usas, me imagino que es la interrupcion del RB0, por eso me gustaria si pudieras compartirme tu diagrama de proteus, espero no sea mucha molestia, gracias,
20/05/2011 #8

Avatar de wilfretronic

Si colega tengo que admitirlo que fue un error de tipeo, se pon en "uno" y lo del control remoto lo puse porque ese es mi siguiente paso, aún no lo e implementado, con respecto al diagrama no se que es lo que pasa con mi compu que no me permite subir imagenes, en cuanto arregle el problema lo haré .
16/06/2011 #9


Hola
Alguien ya probo el codigo y podria decirme que tal funciona por favor. O no se si pueden poner algunas modificaciones que le hicieron al mismo para que quedara mejorado...
20/06/2011 #10


Dimmer con adc pic 16f877 para foco



Vicbrother vicvicvicvicvic..

Código:
            #include "16f877a.h"
            #device ADC=8 
            #fuses XT,NOWDT,NOPROTECT,NOLVP,NODEBUG 
            #use delay(clock=4000000) 
            #define Pulse PIN_C0             //aquí manda pulso disparo al triac 
            
            int flag=0;                      //#include 
               
            #int_ext 
            void ext_isr()
            { flag=1; } 
            
            void main() 
            { 
            BYTE i, j, address, value;
            int16 q, q1; 
            int16 retardo=0,data=200; 
            float p; q1=0; 
            
            output_low(Pulse);
            setup_adc_ports(AN0); 
            setup_adc(ADC_CLOCK_INTERNAL); 
            set_adc_channel(0); 
            ext_int_edge(0,L_TO_H); 
            enable_interrupts(INT_EXT); 
            enable_interrupts(GLOBAL); 
            
            do
            {
            if(flag)
            { 
            data=read_adc();
            retardo=(int16)(255-data)*32; 
            delay_us(retardo); 
            output_high(Pulse); 
            delay_us(40); 
            output_low(Pulse); 
            flag=0; 
            } 
            }while (TRUE); 
            }

Aqui esta el diagrama..
Imágenes Adjuntas
Tipo de Archivo: png Dimmer.png (151,8 KB (Kilobytes), 1367 visitas)
26/06/2011 #11

Avatar de wilfretronic

Me parece interesante amiguita, lo isiste super, lo probe en software y si me simula OK pero yo creo que el PIC que utilizas es mucho oara esta aplicaciòn, y seria mejor no usar un POT ya que un POT, un diac, un triac, etc seria una soluciòn mas facil. pero de todas maneras bien con el aporte. Besos.
30/06/2011 #12


Oye, realizaste algunas modificaciones al dimmer que tienes publicado aqui, lo que pasa es que no logro hacer que encienda al 100% ni que baje al 0%, hablo del programa que tines al inicio de este post. gracias..
13/10/2011 #13


yo tengo uno igual con el pic12675 pero no logro que funcione el led parpadea y el foco queda prendido aveces pienso que podria ser el receptor de IR o el Triac pero aun no se que puede ser de verdad y uds alguno le ha pasado esto? y lo solucionaron?
13/10/2011 #14


12F683 dimmer


Mira pues yo te podria pasar el .Hex ya que el codigo ccs lo tengo en venta. Es un dimmer manejado con el control IR de tv que es ademas on-off y se puede programar para que se desactive una hora despues de presionar el pulsador off.

O en otro caso pon tu codigo y te puedo ayudar a solucionar tu problema.

Algo mas, lo de mariacontenis es por el nobre de la banda de rock. Aclaro por que alguien ya me hecho flores.
13/10/2011 #15


panxulitho dijo: Ver Mensaje
yo tengo uno igual con el pic12675 pero no logro que funcione el led parpadea y el foco queda prendido aveces pienso que podria ser el receptor de IR o el Triac pero aun no se que puede ser de verdad y uds alguno le ha pasado esto? y lo solucionaron?
Puede ser que la fuente capacitiva no le entregue suficiente corriente al circuito, a mi me habia pasado.
14/10/2011 #16


biker2k3 dijo: Ver Mensaje
Puede ser que la fuente capacitiva no le entregue suficiente corriente al circuito, a mi me habia pasado.
pero este pasa directamente a los 220v pasa por una resistencia de 1M y diodo zener que estabilizan la corriente para el pic pero como podria solucionar ese problema? el foco queda prendido y el led tbn
15/10/2011 #17


panxulitho dijo: Ver Mensaje
pero este pasa directamente a los 220v pasa por una resistencia de 1M y diodo zener que estabilizan la corriente para el pic pero como podria solucionar ese problema? el foco queda prendido y el led tbn
Proba publicando el circuito a ver si vemos algo mal
15/10/2011 #18


Dimmer
Tienes que publicar tu diagrama ara poder ayudarte, el cruce por cero si resulta bien con una resistencia de 1M pero es necesario saber como configuras tu salida de potencia con el triac, o el tipo de optoacopldor que usas, ahi puede estar la clave si no es que quien realiza mal la funcion del cruce por cero es tu software.
16/10/2011 #19



ahy unos componentes que cambie como el TSOP y el triac
16/10/2011 #20

Avatar de rascueso

yo lo tengo andando perfecto a ese panxulitho
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.