2021-01-29 06:31:58 -05:00
|
|
|
|
|
|
|
[![Arduino CI](https://github.com/RobTillaart/PCA9635/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
|
|
|
|
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/PCA9635/blob/master/LICENSE)
|
|
|
|
[![GitHub release](https://img.shields.io/github/release/RobTillaart/PCA9635.svg?maxAge=3600)](https://github.com/RobTillaart/PCA9635/releases)
|
|
|
|
|
|
|
|
|
2020-11-27 05:28:57 -05:00
|
|
|
# PCA9635
|
|
|
|
|
|
|
|
Arduino library for PCA9635 I2C 8 bit PWM LED driver
|
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
|
2020-11-27 05:28:57 -05:00
|
|
|
# Description
|
|
|
|
|
|
|
|
This library is to control the I2C PCA9635 PWM extender.
|
|
|
|
The 16 channels are independently configurable is steps of 1/256.
|
|
|
|
this allows for better than 1% finetuning of the duty-cycle
|
|
|
|
of the PWM signal.
|
|
|
|
|
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
## Interface
|
|
|
|
|
|
|
|
### Constructor
|
2020-11-27 05:28:57 -05:00
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
- **PCA9635(deviceAddress, TwoWire \*wire = &Wire)** Constructor with I2C device address, and optional the Wire interface as parameter.
|
|
|
|
- **begin()** initializes the library after startup. Mandatory.
|
|
|
|
- **begin(sda, scl)** idem, ESP32 ESP8266 only. Library does not support
|
2020-11-27 05:28:57 -05:00
|
|
|
multiple Wire instances (yet).
|
2021-01-29 06:31:58 -05:00
|
|
|
- **reset()** resets the library to start up conditions.
|
|
|
|
- **isConnected()** checks if address is available on I2C bus.
|
|
|
|
|
2020-11-27 05:28:57 -05:00
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
### LedDriverMode
|
2020-11-27 05:28:57 -05:00
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
- **setLedDriverMode(channel, mode)** mode is 0..3 See datasheet for full details.
|
|
|
|
- **getLedDriverMode(channel)** returns the current mode of the channel.
|
2020-11-27 05:28:57 -05:00
|
|
|
|
|
|
|
| LED mode | Value | Description |
|
|
|
|
|:----|:----:|:----|
|
|
|
|
| PCA9635_LEDOFF | 0x00 | led is 100% off, default @startup
|
|
|
|
| PCA9635_LEDON | 0x01 | led is 100% on.
|
|
|
|
| PCA9635_LEDPWM | 0x02 | set LED in PWM mode, 0..255
|
|
|
|
| PCA9635_LEDGRPPWM | 0x03 | add LED to the GRPPWM*
|
|
|
|
|
|
|
|
\* all leds in the group GRPPWM can be set to the same PWM value in one set.
|
|
|
|
This is ideal to trigger e.g. multiple LEDS (servo's) at same time.
|
|
|
|
|
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
### Read and write
|
2020-11-27 05:28:57 -05:00
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
- **write1(channel, value)** writes a single 8 bit PWM value.
|
|
|
|
- **write3(channel, R, G, B)** writes three consecutive PWM registers.
|
|
|
|
- **writeN(channel, array, count)** write count consecutive PWM registers.
|
2020-11-27 05:28:57 -05:00
|
|
|
May return **PCA9635_ERR_WRITE** if array has too many elements
|
|
|
|
(including channel as offset)
|
2021-01-29 06:31:58 -05:00
|
|
|
- **writeMode(reg, mode)** configuration of one of the two configuration registers.
|
2020-11-27 05:28:57 -05:00
|
|
|
check datasheet for details.
|
2021-01-29 06:31:58 -05:00
|
|
|
- **readMode(reg)** reads back the configured mode, useful to add or remove a
|
2020-11-27 05:28:57 -05:00
|
|
|
single flag (bit masking)
|
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
### Group PWM and frequency
|
2020-11-27 05:28:57 -05:00
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
- **setGroupPWM(uint8_t value)** sets all channels that are part of the PWM group to value.
|
|
|
|
- **getGroupPWM()** get the current PWM setting of the group.
|
|
|
|
- **setGroupFREQ(value)** see datasheet for details.
|
|
|
|
- **getGroupFREQ()** returns the freq of the PWM group.
|
2020-11-27 05:28:57 -05:00
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
### Misc
|
2020-11-27 05:28:57 -05:00
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
- **lastError()** returns **PCA9635_OK** if all is OK, and other error codes otherwise.
|
2020-11-27 05:28:57 -05:00
|
|
|
|
|
|
|
| Error code | Value | Description |
|
|
|
|
|:----|:----:|:----|
|
|
|
|
| PCA9635_OK | 0x00 | Everything went well
|
|
|
|
| PCA9635_ERROR | 0xFF | Generic error
|
|
|
|
| PCA9635_ERR_WRITE | 0xFE | Tries to write more elements than PWM channels
|
|
|
|
| PCA9635_ERR_CHAN | 0xFD | Channel out of range
|
|
|
|
| PCA9635_ERR_MODE | 0xFC | Invalid mode
|
|
|
|
| PCA9635_ERR_REG | 0xFB | Invalid register
|
|
|
|
| PCA9635_ERR_I2C | 0xFA | PCA9635 I2C communication error
|
|
|
|
|
|
|
|
|
|
|
|
# Operation
|
|
|
|
|
|
|
|
See examples
|