LDR, PIC16F877A y PWM

Por favor compañeros necesito su ayuda... estoy armando un circuito.. que hace lo siguiente...
leer en el puerto RA1 el voltaje de una LDR en paralelo con una resistencia de 10 k.
y a partir de este voltaje (utilizando el ADC_read) entonces controlar la intensidad de un led, obviamente un pwm... al inicio crei que estaria facil.. pero me estoy complicando la cabeza.. o no me sale.. por que no se que hacer... si alguien me puede ayudar...se los agradeceria..

perdon por escribir por separado el mismo problema... cuando hecho a andar el circuito... con el 16f877a, simplemente enciende... pero como que sobrepasa el limite del pwm varias veces por que enciende y apaga.... enciende y apaga.. a que se debe.
 
Última edición:
Sería bueno que pongas el circuito. Creo que la resistencia no debe de estar en paralelo sino en serie. La resistencia en Vcc, de ahi al LDR y a RA1 y la otra pata del LDR a GND... espero explicarme.
 
Has probado el PWM independientemente de la lectura del ADC? funciona correctamente?

Con el código sería más fácil ayudarte ;)

Sería bueno que pongas el circuito. Creo que la resistencia no debe de estar en paralelo sino en serie. La resistencia en Vcc, de ahi al LDR y a RA1 y la otra pata del LDR a GND... espero explicarme.

Aqui se ve bien:

ldr_voltage_divider1.gif
 
este es el codigo....unsigned short duty, a;

void InitMain()
{

ADCON1 = 0x86;//1000 0110
TRISA = 0xff;

PORTC = 0; // set PORTC to 0
TRISC = 0; // designate PORTC pins as output

PORTB = 1;
TRISB = 0;
a=0;

PWM1_Init(4000); // Inicializa PWM con 5 khz
}

void main()
{
PR2 = 0b01111100;
T2CON = 0b00000101; // prescaler + turn on TMR2;
CCP1CON = 0b00001100;
CCP2CON = 0b00111100;


initMain(); //llama a la funcion para configurar puertos e iniciar PWM
PWM1_Start(); // Inicia PWM1

while (1)
{ // inicia clico de programa
duty = adc_read(1);
delay_ms(1);
PWM1_Change_Duty(duty);


/*
if (duty > 1000)
{
PWM1_Change_Duty(255);
}
if (duty < 255)
{
PWM1_Change_Duty(1);
a=1;
}
if (a == 1 || PORTB.F5 == 0)
{
PORTC.F0 = 1;
}
if (PORTB.F5 == 1)
{
PORTC.F0 = 0;
a=0;
} */
}
}


......
Una pregunta.... cual es la diferencia entre utilizar el pwm_init, pwm_star y CCPR1L, CCPR2L...gracias
 
Atrás
Arriba