PCA9685 (pca9685 v1.1.0)
Driver for PCA9685 based 16 channel, 12 bit PWM driver connected over I2C.
Usage
# Start a device
{:ok, pid} = PCA9685.acquire(bus: "i2c-1", address: 0x40)
# With optional PWM frequency and output enable pin
{:ok, pid} = PCA9685.acquire(bus: "i2c-1", address: 0x40, pwm_freq: 100, oe_pin: 17)
# With a name for supervision
{:ok, pid} = PCA9685.acquire(bus: "i2c-1", address: 0x40, name: MyPWM)
# Control channels
PCA9685.Device.channel(pid, 0, 0, 2048)
PCA9685.Device.all(pid, 0, 4095)
# Release when done
PCA9685.release(pid)Supervision
Add the device to your supervision tree:
children = [
{PCA9685.Device, bus: "i2c-1", address: 0x40, name: MyPWM}
]Then use the registered name:
PCA9685.Device.channel(MyPWM, 0, 0, 2048)
Summary
Functions
@spec acquire(keyword()) :: GenServer.on_start()
Acquire a connection to a PCA9685 device.
Options
:bus- (required) the I2C bus name, e.g."i2c-1":address- (required) the I2C address, e.g.0x40:pwm_freq- PWM frequency in Hz (default: 50, range: 24-1526):oe_pin- GPIO pin for output enable (optional):name- GenServer name for registration (optional)
Examples
{:ok, pid} = PCA9685.acquire(bus: "i2c-1", address: 0x40)
{:ok, pid} = PCA9685.acquire(bus: "i2c-1", address: 0x40, name: MyPWM)
@spec release(GenServer.server()) :: :ok
Release a PCA9685 device connection.
Examples
:ok = PCA9685.release(pid)
:ok = PCA9685.release(MyPWM)