NAME
Device::Chip::PCA9685
- A Device::Chip
implementation for the PCA9685 chip
DESCRIPTION
This class implements a Device::Chip interface for the PCA9685 chip, a 12-bit 16 channel PWM driver.
SYNOPSIS
use Device::Chip::PCA9685;
use Device::Chip::Adapter;
my $adapter = Device::Chip::Adapter->new_from_description("LinuxKernel");
my $chip = Device::Chip::PCA9685->new();
# This is the i2c bus on an RPI 2 B+
$chip->mount($adapter, bus => '/dev/i2c-1')->get;
$chip->enable()->get;
$chip->set_frequency(400)->get; # 400 Hz
$chip->set_channel_value(10, 1024)->get; # Set channel 10 to 25% (1024/4096)
$chip->set_channel_full_value(10, 1024, 3192)->get; # Set channel 10 to ON at COUNTER=1024, and OFF at COUNTER=3192 (50% duty cycle, with 25% phase difference)
METHODS
set_channel_value
$chip->set_channel_value($channel, $time_on, $offset = 0)->get
Sets a channel PWM time based on a single value from 0-4095. Starts the channel to turn on at COUNTER = 0, and off at $time_on. $offset
lets you stagger the time that the channel comes on and off. This lets you vary the times that channels go on and off to reduce noise effects and power supply issues from large loads all coming on at once.
$on_time
:= 0; $off_time
:= $time_on;
set_channel_full_value
$chip->set_channel_full_value($channel, $on_time, $off_time)->get
Set a channel value, on and off time. Lets you control the full on and off time based on the 12 bit counter on the device.
set_channel_on
$chip->set_channel_on($channel)->get
Set a channel to full on. No off time at all.
set_channel_off
$chip->set_channel_off($channel)->get
Set a channel to full off. No on time at all.
set_default_mode
$chip->set_default_mode()->get
Reset the default mode back to the PCA9685.
set_frequency
$chip->set_frequency()
Set the prescaler to the desired frequency for PWM. Returns the real frequency due to rounding.
enable
$chip->enable()->get
Enable the device. Must be the first thing done with the device.
AUTHOR
Ryan Voots, <simcop2387@simcop2387.info> Paul 'LeoNerd' Evans <leonerd@leonerd.org.uk>