Hi Derrel,

Thanks for the code, Unfortunately I was hoping for something that would allow me to set different values to the duty cycle of each channel. The way I have it configured I use CH# as the var name:

Code:
DEFINE SPWM_FREQ  100               ; SPWM Frequency
DEFINE SPWM_RES   101               ; SPWM Resolution

DutyVars   VAR BYTE[16]             ; DutyCycle Variables
  CH1 VAR DutyVars[0]          ; group them in an array for easy access
  CH2 VAR DutyVars[1]          ; with FOR loops etc.
  CH3 VAR DutyVars[2]
  CH4 VAR DutyVars[3]
  CH5 VAR DutyVars[4]
  CH6 VAR DutyVars[5]
  CH7 VAR DutyVars[6]
  CH8 VAR DutyVars[7]
  CH9 VAR DutyVars[8]          
  CH10 VAR DutyVars[9]         
  CH11 VAR DutyVars[10]
  CH12 VAR DutyVars[11]
  CH13 VAR DutyVars[12]
  CH14 VAR DutyVars[13]
  CH15 VAR DutyVars[14]
  CH16 VAR DutyVars[15]
and change the duty in this manor:

Code:
Main: 
gosub CKINPUT
                             
CH1 = 100
CH2 = 0
CH3 = 0
CH4 = 0
CH5 = 0
CH6 = 0
CH7 = 0
CH8 = 0
CH9 = 0
CH10 = 0
CH11 = 0
CH12 = 0
CH13 = 0
CH14 = 0
CH15 = 0
CH16 = 0
gosub CKINPUT
PAUSE T5
CH1 = 100
CH2 = 100
CH3 = 0
CH4 = 0
CH5 = 0
CH6 = 0
CH7 = 0
CH8 = 0
CH9 = 0
CH10 = 0
CH11 = 0
CH12 = 0
CH13 = 0
CH14 = 0
CH15 = 0
CH16 = 0
gosub CKINPUT
PAUSE T5
and so on... If anyone can suggest a better method I would be very interested in learning better ways to program.