I'm working on a project that uses the PCA9685 chip. The chip is set up using the following code, which I confess was provided for me by a friend, but I get the gist of things in that it resets the chip and sets a pre-scaler or something !
Using word variables (CH1_PWM, CH2_PWN etc) for the 0 to 4095 PWM levels the following code performs the setting of channel brightness, (the value for pcaChannel runs through from 0 to 15 for the 16 channels with each increment of CHx_PWM variable if that makes sense ?)Code:'Initialize the PCA9685 i2cControl var BYTE 'Used for PCA chip control i2cReadAddress var BYTE i2cWriteAddress var BYTE pcaAddress var BYTE oldMode var BYTE newMode var BYTE pcaChannel var BYTE i2cReadAddress = pcaAddress << 1 i2cWriteAddress = i2cReadAddress | 1 i2cControl = $0 ;Reset I2CWRITE SDApin,SCLpin,i2cWriteAddress,i2cControl,[$0] ;PCA9685_MODE1 $0 i2cControl = $0 'PCA9685_MODE1 $0 I2CREAD SDApin,SCLpin,i2cReadAddress,i2cControl,[oldMode] ;Get old mode newMode = (oldMode & $7F) | $10 ;MODE1 Sleep i2cControl = $0 I2CWRITE SDApin,SCLpin,i2cWriteAddress,i2cControl,[newMode] ;PCA9685_MODE1 $0 i2cControl = $FE ;PCA9685_PRESCALE $FE I2CWRITE SDApin,SCLpin,i2cWriteAddress,i2cControl,[6] ;Prescaler is now 6 was 11 i2cControl = $0 ;PCA9685_MODE1 $0 I2CWRITE SDApin,SCLpin,i2cWriteAddress,i2cControl,[oldMode] ;Set old mode i2cControl = $0 ;PCA9685_MODE1 $0 I2CWRITE SDApin,SCLpin,i2cWriteAddress,i2cControl,[oldMode | $A1 ] ;Set MODE1 AutoIncrementOn | $A1
Code:pcaChannel = 0 i2cControl = $6 + 4*pcaChannel I2CWRITE SDApin,SCLpin,i2cWriteAddress,i2cControl,[0,0,CH1_PWM.lowbyte,CH1_PWM.highbyte]
The above code is called when a time condition is matched, so each channel is has its own on/off time in a 24 hour period. But I want to have a manual over-ride so that if a button is pressed it jumps to a gosub routine which makes all the outputs of the PCA chip turn on. Looking at the datasheet https://cdn-shop.adafruit.com/datasheets/PCA9685.pdf there is register setting to turn all the LEDs on or off (FA, FB, FC and FD) but I don't know how to implement this in the code, so wondered if anyone has some suggestions ?




Bookmarks