Paso 3: El código
Este código fue escrito para un Microchip PIC 16F887, pero que puede obtener la idea general. Usé el potenciómetro incorporado en mi tablero del desarrollo de variar el espectro de color del RGB LED (y no va a través de todo el espectro porque no tengo 3 módulos PWM, pero es bastante bueno)Comentarios incluidos.
#include < 16F887.h >
#include < delay.h >
#include "delay.c"
#include < stdlib.h >
#include < STRING.h >
#use delay(clock = 4000000)
#FUSES INTRC, NOWDT, NOPUT, NOMCLR, NOPROTECT, NOCPD, NOBROWNOUT, NOIESO, NOFCMEN, NOLVP
#byte CCP1CON = 0x17
#byte CCP2CON = 0x1D
#byte PWM1CON = 0x9B
int valor = 128;
int p1 = 0;
int p2 = 0;
void my_setup_ccp1(int8 value)
{
output_low(PIN_C2);
CCP1CON = valor;
PWM1CON = 0;
}
void my_setup_ccp2(int8 value)
{
output_low(PIN_C1);
CCP2CON = valor;
}
//===================================
void main()
{
A4 = fuente de energía para fotodiodo
output_high(PIN_A4);
output_high(PIN_B1);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
setup_adc_ports(sAN0);
Configuración de interrupción de Timer
enable_interrupts(INT_TIMER2);
my_setup_ccp1(CCP_PWM);
my_setup_ccp2(CCP_PWM);
setup_timer_2 (T2_DIV_BY_1, 128, 1);
setup_compare (2, COMPARE_PWM| COMPARE_TIMER2);
while(1) {/ / PIC evitar de ir a dormir.
SET PWM DUTY CYCLE
output_high(PIN_A5);
PIN A3 es la conexión del fotodiodo
if(INPUT(PIN_A3) == 1)
output_high(PIN_A4);
otra cosa
output_low(PIN_A4);
Leer valor de potenciómetro para cambiar color de LED
valor = read_adc();
Switch (valor) {}
caso 0:
P1 = valor;
output_low(PIN_C0);
P2 = valor;
rotura;
caso 50:
P1 = valor;
output_high(PIN_C0);
P2 = valor;
rotura;
caso 100:
P1 = valor;
output_high(PIN_C0);
P2 = valor;
rotura;
caso 150:
output_high(PIN_C0);
P1 = 50;
P2 = valor;
rotura;
caso 200:
output_low(PIN_C0);
P1 = 0;
P2 = valor;
rotura;
caso 250:
P1 = 0;
P2 = valor;
output_low(PIN_C0);
rotura;
}
P1 = valor;
P2 = 128 - p1;
set_pwm1_duty(P1);
set_pwm2_duty(P2);
}
}