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

Acquire a connection to a PCA9685 device.

Release a PCA9685 device connection.

Functions

acquire(opts)

@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)

release(server)

@spec release(GenServer.server()) :: :ok

Release a PCA9685 device connection.

Examples

:ok = PCA9685.release(pid)
:ok = PCA9685.release(MyPWM)