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
si le doy un valor menor a 255 al timer0 no se genera el pulso adjunto imagen del la simulación en proteus
gracias
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
Adjuntos
Última edición por un moderador: