Yes, but you have to create the individual ON/OFF periods.The question now becomes: is there a way to set the on/off periods individually for each of the 5 LEDs?
That code only has 1 period, for a 50% dutycycle.
So many things you can do.
So little time to explain.
Twinkle Twinkle little tree ...
Code:DEFINE OSC 4 DEFINE BLINKYFREQ 100 ; 10mS periods ' *************************************************************** ' Device Fuses ' *************************************************************** #CONFIG __config _CONFIG1, _FOSC_INTOSC & _WDTE_ON & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF __config _CONFIG2, _PLLEN_OFF & _STVREN_ON & _BORV_LO & _LVP_OFF #ENDCONFIG OSCCON = %01101000 ' 4MHz internal osc ;---------------------------------------------------------------- LEDcount CON 5 ; Number of LEDs on the PORT OnTimes DATA 50,22,38,75, 5 ; default periods for each Output OffTimes DATA 150,45,38,95,34 ;---------------------------------------------------------------- #DEFINE USE_RANDOM_SEQUENCE ; comment for contiuous Sequence #IFDEF USE_RANDOM_SEQUENCE RND VAR WORD : RND = 13864 MIN_ON CON 10 ; Minimum random ON time MAX_ON CON 100 ; Maximum random ON time MIN_OFF CON 10 ; Minimum random OFF time MAX_OFF CON 100 ; Maximum random OFF time RandPeriod VAR WORD[LEDcount] RandPeriods DATA WORD 1000, WORD 1250, WORD 1500, WORD 1750, WORD 2000 #ENDIF ;---------------------------------------------------------------- CCPR1val CON EXT : @CCPR1val = (OSC*1000000/4)/ BLINKYFREQ CCPR1 VAR WORD EXT : @CCPR1 = CCPR1L Timer1 VAR WORD EXT : @Timer1 = TMR1L CCPIF VAR PIR1.2 LoopLED VAR BYTE[LEDcount] OnTime VAR BYTE[LEDcount] OffTime VAR BYTE[LEDcount] x VAR BYTE ;----[Initialize]------------------------------------------------ FOR x = 0 to LEDcount - 1 ; load the periods from EEPROM READ OnTimes+x, OnTime(x) READ OffTimes+x, OffTime(x) #IFDEF USE_RANDOM_SEQUENCE READ RandPeriods+(x<<1), WORD RandPeriod(x) #ENDIF NEXT X ;-- setup CCP1 and Start Timer1 -- CCPR1 = CCPR1val ; set compare value CCP1CON = %00001011 ; compare mode, special event Timer1 = 0 ; clear Timer1 T1CON.0 = 1 ; start Timer1 ANSELC = 0 TRISC = 0 ; PORTC all OUTPUT ;----[Main Program Loop]---------------------------------------- Main: x = (x + 1) // LEDcount PORTC.0(x) = !!(LoopLED(x) < OnTime(x)) LoopLED(x) = (LoopLED(x) + 1) // (OnTime(x) + OffTime(x)) #IFDEF USE_RANDOM_SEQUENCE RandPeriod(x) = RandPeriod(x) - 1 IF RandPeriod(x) = 0 THEN READ RandPeriods+(x<<1), WORD RandPeriod(x) RANDOM RND OnTime(x) = (MAX_ON - MIN_ON)* RND.HighByte / 255 + MIN_ON OffTime(x)= (MAX_OFF - MIN_OFF)* RND.LowByte / 255 + MIN_OFF ENDIF #ENDIF IF x != (LEDcount - 1) THEN Main Waiting: IF !CCPIF THEN Waiting CCPIF = 0 GOTO Main




Bookmarks