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

Temas similares

11/04/2011 #1

Avatar de wlopez

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.
11/04/2011 #2


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.
11/04/2011 #3


Has probado el PWM independientemente de la lectura del ADC? funciona correctamente?

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

kuropatula dijo: Ver Mensaje
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:

12/04/2011 #4

Avatar de wlopez

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
12/04/2011 #5


Pero el hardware lo hiciste con el LDR en paralelo o en serie??
12/04/2011 #6

Avatar de wlopez

lo hice en serie...
13/04/2011 #7


deberias poner el circuito
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 - 2016, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.