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

Temas similares

31/07/2012 #1


Dimmer con PIC
bueno gente espero me puedan ayudar ya se que esto es un tema muy repetido y e buscado hasta donde no mas estoy realizando mi proyecto de grado y para esto necesito un dimmer digital, lo estoy desarrollando con un pic 16f877a, e visto muchos vídeos y códigos pero no logre que ninguno me funcionara así que te tome la iniciativa de hacer mi propio código.

el problema es que no logro sincronizar el micro para poder generar el pwm estoy manejando el timer0 para generar el pulso pero se me estan generando dos pulsos, no se que formula usar para poder setear el timer0 coloco mi código espero me puedan ayudar

Código:
#include <16F877.h> 
//#device adc=10

#fuses XT,NOPROTECT
#fuses NOWDT//permite trabajar el micro a menos de 4v
#fuses NOPUT//permite trabajar el micro a menos de 4v
#fuses NOBROWNOUT
#fuses NOLVP
#use delay (clock = 4000000)     // a trabajar con 4MHz
//#use standard_io(B)
#use standard_io(A)
#use standard_io(C)
#use standard_io(D)
#use rs232(baud=9600,xmit=PIN_C6,RCV=PIN_C7,bits=8,parity=N)

//#include <lcd.c>

int cambio=0;
unsigned int fase = 255;

#INT_EXT       //Interrupción externa.
void ext_isr()
{ 

 if(cambio==0){
 cambio=1;
 ext_int_edge(H_TO_L);
 }
 else{
 cambio=0;
 ext_int_edge(L_TO_H);
 }
 
 enable_interrupts(INT_TIMER0); //Cambia para que la proxima la interrupción sea en flanco de bajada
 set_timer0(fase);

 output_low(PIN_C4);


}


#int_timer0
void timer0_isr()
{
   disable_interrupts(INT_TIMER0);
   output_high(PIN_C4);
}

void main(){
 //restart_wdt(); 
 //lcd_init();        
 
 
 enable_interrupts(INT_EXT);
 ext_int_edge(L_TO_H);
 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128);
 disable_interrupts(INT_TIMER0);
 enable_interrupts(GLOBAL);      
 
 delay_ms(100);
while(True){
}
}
si le doy un valor menor a 255 al timer0 no se genera el pulso adjunto imagen del la simulación en proteus

gracias
31/07/2012 #2

Avatar de ByAxel

Hola, Raro el còdigo jeje para que usas la #INT_EXT?
Intenta no usar dos interrupciones para esto, con el Timer bàsta para generar PWM...

Una idea es que genères la frecuencia por còdigo y que establescas el DutyCycle del PWM por medio de la interrupciòn del Timer.

(1) Inicias el Pin en "1" -> Inicias la interrupcion del Timer -> Inicias un delay que establece la frecuencia.
(2) Cuando el timer proboca la interrupciòn, pones el pin en "0" y detienes la interrupciòn.
(3) Cuando el delay por còdigo termina pasa al punto (1), asi para siempre.

Ten en cuenta que el tiempo que demore el Timer en provocar la interrupciòn debe de ser menor al delay por còdigo...

Es una idea.

Saludos
31/07/2012 #3

Avatar de dinoelectro

yo programe un dimmer, lo postee y espero que te ayude.. te recomiendo el segundo aporte ya que utilizo lenguage C y es mucho mas eficiente..
Saludos

SUPER DIMMER, dimerizar hasta 16 lampara con un solo PIC
01/08/2012 #4


ByAxel dijo: Ver Mensaje
Hola, Raro el còdigo jeje para que usas la #INT_EXT?
Intenta no usar dos interrupciones para esto, con el Timer bàsta para generar PWM...

Una idea es que genères la frecuencia por còdigo y que establescas el DutyCycle del PWM por medio de la interrupciòn del Timer.

(1) Inicias el Pin en "1" -> Inicias la interrupcion del Timer -> Inicias un delay que establece la frecuencia.
(2) Cuando el timer proboca la interrupciòn, pones el pin en "0" y detienes la interrupciòn.
(3) Cuando el delay por còdigo termina pasa al punto (1), asi para siempre.

Ten en cuenta que el tiempo que demore el Timer en provocar la interrupciòn debe de ser menor al delay por còdigo...

Es una idea.

Saludos
te agradezco la idea la voy a tener en cuenta y en respuesta a tu pregunta en mi código utilizo la interrupciones externas #INT_EXT para tratar de sincronizar el pic con el cruce por cero
07/08/2012 #5


dinoelectro dijo: Ver Mensaje
yo programe un dimmer, lo postee y espero que te ayude.. te recomiendo el segundo aporte ya que utilizo lenguage C y es mucho mas eficiente..
Saludos

SUPER DIMMER, dimerizar hasta 16 lampara con un solo PIC
hombre muchas gracias por el aporte fue de gran ayuda, ya tengo mi dimmer funcionando
Respuesta
¿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.