Hola!
Tengo un proyecto en el que tengo que usar un PWM para controlar la intensidad de brillo de un LED. He encontrado el siguiente ejemplo, pero me gustaría que alguien me explicara su funcionamiento, porque tengo ciertas dudas al respecto del código. El código es el siguiente:
Mis dudas son las siguientes: Dentro de los ciclos de incremento y decremento del brillo del led, nada más veo que asignan PORTD = 0x00 o PORTD = 0x01, pero ¿cómo es que varía la intensidad con esto? (Perdónenme si suena una pregunta demasiado tonta, pero la verdad tiene muy poco tiempo que empecé a usar los PICs).
Lo que pretendo hacer es mediante un ADC modificar el valor con un potenciómetro, esta parte ya esta lista y la tengo codificada para que el valor lo almacene en una variable que se llama potADC, pero quisiera saber cómo es que cambia el valor en este código para poder cambiarlo y poner el valor que obtengo del potenciómetro. Aparte que pretendo hacerlo con interrupciones y no dentro del ciclo infinito en el main.
El PIC que estoy utilizando no tiene CCP, así que hay que construir el PWM a manita.
Saludos,
Tengo un proyecto en el que tengo que usar un PWM para controlar la intensidad de brillo de un LED. He encontrado el siguiente ejemplo, pero me gustaría que alguien me explicara su funcionamiento, porque tengo ciertas dudas al respecto del código. El código es el siguiente:
Código:
#include <p18F4520.h>
#include <timers.h>
long int count;
long int i;
int signal_high;
int signal_low;
void main()
{
TRISD = 0x00;
while(1)
{ //following loop increases the pwm duty cycle from 0% to 100% on portD
for(signal_high=1; signal_high<100; signal_high++)
{
for(count=0; count<signal_high; count++)
{
PORTD = 0x01;
}
signal_low=100-signal_high;
for(count=0; count<signal_low; count++)
{
PORTD = 0x00;
}
}
//following loop decreases the pwm duty cycle from 100% to 0% on portD
for(signal_high=1; signal_high<100; signal_high++)
{
for(count=0; count<signal_high; count++)
{
PORTD = 0x00;
}
signal_low=100-signal_high;
for(count=0; count<signal_low; count++)
{
PORTD = 0x01;
}
}
}
}
Mis dudas son las siguientes: Dentro de los ciclos de incremento y decremento del brillo del led, nada más veo que asignan PORTD = 0x00 o PORTD = 0x01, pero ¿cómo es que varía la intensidad con esto? (Perdónenme si suena una pregunta demasiado tonta, pero la verdad tiene muy poco tiempo que empecé a usar los PICs).
Lo que pretendo hacer es mediante un ADC modificar el valor con un potenciómetro, esta parte ya esta lista y la tengo codificada para que el valor lo almacene en una variable que se llama potADC, pero quisiera saber cómo es que cambia el valor en este código para poder cambiarlo y poner el valor que obtengo del potenciómetro. Aparte que pretendo hacerlo con interrupciones y no dentro del ciclo infinito en el main.
El PIC que estoy utilizando no tiene CCP, así que hay que construir el PWM a manita.
Saludos,