Stap 3: De Code
Deze code is geschreven voor de 16F887 van een Microchip PIC, maar hopelijk kunt u het algemene idee. Ik gebruikte de ingebouwde potentiometer op mijn ontwikkeling boord te variëren van het kleurenspectrum van de RGB LED (en het gaat niet door middel van het hele spectrum, omdat ik niet heb 3 PWM-modules, maar het is goed genoeg)Opmerkingen opgenomen.
#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 waarde = 128;
int p1 = 0;
int p2 = 0;
VOID my_setup_ccp1(int8 value)
{
output_low(PIN_C2);
CCP1CON = waarde;
PWM1CON = 0;
}
VOID my_setup_ccp2(int8 value)
{
output_low(PIN_C1);
CCP2CON = waarde;
}
//===================================
void main()
{
A4 = krachtbron voor fotodiode
output_high(PIN_A4);
output_high(PIN_B1);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
setup_adc_ports(sAN0);
Timer/onderbreken setup
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 voorkomen uit te gaan om te slapen.
TAAKCYCLUS VAN SET PWM
output_high(PIN_A5);
PIN A3 is de verbinding fotodiode
if(input(PIN_A3) == 1)
output_high(PIN_A4);
anders
output_low(PIN_A4);
Lezen van de waarde van de potmeter om te veranderen van kleur van de LED
waarde = read_adc();
schakelaar (waarde) {}
Case 0:
P1 = waarde;
output_low(PIN_C0);
P2 = waarde;
breken;
Case 50:
P1 = waarde;
output_high(PIN_C0);
P2 = waarde;
breken;
Case 100:
P1 = waarde;
output_high(PIN_C0);
P2 = waarde;
breken;
Case 150:
output_high(PIN_C0);
P1 = 50;
P2 = waarde;
breken;
Case 200:
output_low(PIN_C0);
P1 = 0;
P2 = waarde;
breken;
Case 250:
P1 = 0;
P2 = waarde;
output_low(PIN_C0);
breken;
}
P1 = waarde;
P2 = 128 - p1;
set_pwm1_duty(P1);
set_pwm2_duty(P2);
}
}