Instead of just setting a flag, keep a copy of the last thing written to the PCA and only call the sub if it's different from CH1_PWM
Code:If Counter1 => CH1_on_Time and counter1 < CH1_off_time then ' check to see if the time in minutes since midnight matches the Channel on time CH1_PWM = fadeset1 ' and of so set the PWM value (0 to 4095) to match the fadeset value (also 0 - 4095) endif If Counter1 => CH1_off_Time or Counter1 < CH1_on_time then ' check to see if the time in minutes since midnight matches the channel off time CH1_PWM =0 ' and if it does, then set the PWM value to 0, this turning the channel off endif ... ' check to see if CH1_PWM is different from last programmed value if (CH1_PWM <> PCA_PWM) then gosub SetPCA endif SetPCA: PCA_PWM = CH1_PWM pcaChannel = 0 i2cControl = $6 + 4*pcaChannel I2CWRITE SDApin,SCLpin,i2cWriteAddress,i2cControl,[0,0,PCA_PWM.lowbyte,PCA_PWM.highbyte] return




Bookmarks