InetrfaceProducts NXP / PCA995xA

Dependencies:   CompLedDvrCC

Dependents:   PCA9956A_Hello pca9956b_two_demoboards PCA9955A_Gradation_control PCA9955A_Gradation_control ... more

Embed: (wiki syntax)

« Back to documentation index

PCA9956A Class Reference

PCA9956A Class Reference

PCA9956A class. More...

#include <PCA9956A.h>

Inherits PCA995xA.

Public Types

enum  LedPinName {
  L0, L1, L2, L3,
  L4, L5, L6, L7,
  L8, L9, L10, L11,
  L12, L13, L14, L15,
  L16, L17, L18, L19,
  L20, L21, L22, L23,
  L_NC = ~0x0L
}
 

PCA9956A pin names high-level API i.e.

More...
enum  command_reg {
  MODE1, MODE2, LEDOUT0, LEDOUT1,
  LEDOUT2, LEDOUT3, LEDOUT4, LEDOUT5,
  GRPPWM, GRPFREQ, PWM0, PWM1,
  PWM2, PWM3, PWM4, PWM5,
  PWM6, PWM7, PWM8, PWM9,
  PWM10, PWM11, PWM12, PWM13,
  PWM14, PWM15, PWM16, PWM17,
  PWM18, PWM19, PWM20, PWM21,
  PWM22, PWM23, IREF0, IREF1,
  IREF2, IREF3, IREF4, IREF5,
  IREF6, IREF7, IREF8, IREF9,
  IREF10, IREF11, IREF12, IREF13,
  IREF14, IREF15, IREF16, IREF17,
  IREF18, IREF19, IREF20, IREF21,
  IREF22, IREF23, OFFSET = 0x3A, SUBADR1,
  SUBADR2, SUBADR3, ALLCALLADR, PWMALL,
  IREFALL, EFLAG0, EFLAG1, EFLAG2,
  EFLAG3, EFLAG4, EFLAG5
}
 

Name of the PCA9956A registers (for direct register access)

More...

Public Member Functions

 PCA9956A (PinName i2c_sda, PinName i2c_scl, char i2c_address=PCA995xA::DEFAULT_I2C_ADDR)
 Create a PCA9956A instance connected to specified I2C pins with specified address.
 PCA9956A (I2C &i2c_obj, char i2c_address=PCA995xA::DEFAULT_I2C_ADDR)
 Create a PCA9956A instance connected to specified I2C pins with specified address.
virtual ~PCA9956A ()
 Destractor.
virtual int number_of_ports (void)
 Returns the number of output ports.
void pwm (int port, float v)
 Set the output duty-cycle, specified as a percentage (float)
void pwm (float *vp)
 Set all output port duty-cycle, specified as a percentage (array of float)
void current (int port, float vp)
 Set the output current, specified as a percentage (float)
void current (float *vP)
 Set all output port curent, specified as a percentage (array of float)
void write (char reg_addr, char data)
 Register write (single byte) : Low level access to device register.
void write (char *data, int length)
 Register write (multiple bytes) : Low level access to device register.
char read (char reg_addr)
 Register read (single byte) : Low level access to device register.
void read (char reg_addr, char *data, int length)
 Register write (multiple bytes) : Low level access to device register.

Detailed Description

PCA9956A class.

PCA9956A constant current LED driver.

PCA995xA constant current LED driver family.

This is a driver code for the PCA9956A 24-channel Fm+ I2C-bus 57mA/20V constant current LED driver. This class provides interface for PCA9956A operation and accessing its registers. Detail information is available on next URL. http://www.nxp.com/products/interface_and_connectivity/i2c/i2c_led_display_control/PCA9956ATW.html

Next sample code shows operation based on low-level-API (operated by just device instane)

Example:

  //  PCA9956A operation sample using its device instance
  
  #include "mbed.h"
  #include "PCA9956A.h"
  
  PCA9956A    led_cntlr( p28, p27, 0x02 );    //  SDA, SCL, Slave_address(option)
  
  int main()
  {
      led_cntlr.current( ALLPORTS, 1.0 ); //  Set all ports output current 100%
      
      while(1) {
          for ( int port = 0; port < led_cntlr.number_of_ports(); port++ ) {
              for ( int i = 1; i <= 100; i++ ) {
                  led_cntlr.pwm(  port, (float)i / 100.0 );
                  wait( 0.01 );
              }
          }
          led_cntlr.pwm( ALLPORTS, 0.0 );
      }
  }

The high-level-API:LedPwmOutCC is also available. It can be used like next sample code.

  //  PCA9956A operation sample using high-level-API
  
  #include "mbed.h"
  #include "PCA9956A.h"
  
  PCA9956A    led_cntlr( p28, p27, 0x02 );    //  SDA, SCL, Slave_address(option)
  LedPwmOutCC led0( led_cntlr, L0  );         //  Instance for LED0 pin
  LedPwmOutCC led1( led_cntlr, L1  );         //  Instance for LED1 pin
  LedPwmOutCC led2( led_cntlr, L2  );         //  Instance for LED2 pin
  
  int main()
  {
      led0.current( 0.5 );    //  LED0 pin current output setting to 50%
      led1.current( 0.5 );    //  LED1 pin current output setting to 50%
      led2.current( 0.5 );    //  LED2 pin current output setting to 50%
  
      while(1) {
          
          for ( float p = 1.0; p >= 0.0; p -= 0.01 ) {
              led0    = p;    //  Set LED0 output PWM dutycycle as 'p'
              wait( 0.01 );
          }
          
          for ( float p = 1.0; p >= 0.0; p -= 0.01 ) {
              led1    = p;    //  Set LED1 output PWM dutycycle as 'p'
              wait( 0.01 );
          }
          
          for ( float p = 1.0; p >= 0.0; p -= 0.01 ) {
              led2    = p;    //  Set LED2 output PWM dutycycle as 'p'
              wait( 0.01 );
          }
      }
  }

Abstract class for PCA995xA family No instance can be made from this class

Author:
Akifumi (Tedd) OKANO, NXP Semiconductors
Version:
0.5
Date:
25-Feb-2015 (minor fix on 17-Jun-2022)

Released under the Apache 2 license

An operation sample of PCA9956A 24-channel Fm+ I2C-bus 57mA/20V constant current LED driver. mbed accesses the PCA9956A registers through I2C.

Author:
Akifumi (Tedd) OKANO, NXP Semiconductors
Version:
0.6
Date:
19-Mar-2015 (minor fix on 17-Jun-2022)

Released under the Apache 2 license

About PCA9956A: http://www.nxp.com/products/interface_and_connectivity/i2c/i2c_led_display_control/PCA9956ATW.html

Definition at line 98 of file PCA9956A.h.


Member Enumeration Documentation

Name of the PCA9956A registers (for direct register access)

Enumerator:
MODE1 

MODE1 register.

MODE2 

MODE2 register.

LEDOUT0 

LEDOUT0 register.

LEDOUT1 

LEDOUT1 register.

LEDOUT2 

LEDOUT2 register.

LEDOUT3 

LEDOUT3 register.

LEDOUT4 

LEDOUT4 register.

LEDOUT5 

LEDOUT5 register.

GRPPWM 

GRPPWM register.

GRPFREQ 

GRPFREQ register.

PWM0 

PWM0 register.

PWM1 

PWM1 register.

PWM2 

PWM2 register.

PWM3 

PWM3 register.

PWM4 

PWM4 register.

PWM5 

PWM5 register.

PWM6 

PWM6 register.

PWM7 

PWM7 register.

PWM8 

PWM8 register.

PWM9 

PWM9 register.

PWM10 

PWM10 register.

PWM11 

PWM11 register.

PWM12 

PWM12 register.

PWM13 

PWM13 register.

PWM14 

PWM14 register.

PWM15 

PWM15 register.

PWM16 

PWM16 register.

PWM17 

PWM17 register.

PWM18 

PWM18 register.

PWM19 

PWM19 register.

PWM20 

PWM20 register.

PWM21 

PWM21 register.

PWM22 

PWM22 register.

PWM23 

PWM23 register.

IREF0 

IREF0 register.

IREF1 

IREF1 register.

IREF2 

IREF2 register.

IREF3 

IREF3 register.

IREF4 

IREF4 register.

IREF5 

IREF5 register.

IREF6 

IREF6 register.

IREF7 

IREF7 register.

IREF8 

IREF8 register.

IREF9 

IREF9 register.

IREF10 

IREF10 register.

IREF11 

IREF11 register.

IREF12 

IREF12 register.

IREF13 

IREF13 register.

IREF14 

IREF14 register.

IREF15 

IREF15 register.

IREF16 

IREF16 register.

IREF17 

IREF17 register.

IREF18 

IREF18 register.

IREF19 

IREF19 register.

IREF20 

IREF20 register.

IREF21 

IREF21 register.

IREF22 

IREF22 register.

IREF23 

IREF23 register.

OFFSET 

OFFSET register.

SUBADR1 

SUBADR1 register.

SUBADR2 

SUBADR2 register.

SUBADR3 

SUBADR3 register.

ALLCALLADR 

ALLCALLADR register.

PWMALL 

PWMALL register.

IREFALL 

IREFALL register.

EFLAG0 

EFLAG0 register.

EFLAG1 

EFLAG1 register.

EFLAG2 

EFLAG2 register.

EFLAG3 

EFLAG3 register.

EFLAG4 

EFLAG4 register.

EFLAG5 

EFLAG5 register.

Definition at line 134 of file PCA9956A.h.

enum LedPinName

PCA9956A pin names high-level API i.e.

LedPwmOutCC

Enumerator:
L0 

LED0 pin.

L1 

LED1 pin.

L2 

LED2 pin.

L3 

LED3 pin.

L4 

LED4 pin.

L5 

LED5 pin.

L6 

LED6 pin.

L7 

LED7 pin.

L8 

LED8 pin.

L9 

LED9 pin.

L10 

LED10 pin.

L11 

LED11 pin.

L12 

LED12 pin.

L13 

LED13 pin.

L14 

LED14 pin.

L15 

LED15 pin.

L16 

LED16 pin.

L17 

LED17 pin.

L18 

LED18 pin.

L19 

LED19 pin.

L20 

LED20 pin.

L21 

LED21 pin.

L22 

LED22 pin.

L23 

LED23 pin.

L_NC 

for when the pin is left no-connection

Definition at line 104 of file PCA9956A.h.


Constructor & Destructor Documentation

PCA9956A ( PinName  i2c_sda,
PinName  i2c_scl,
char  i2c_address = PCA995xA::DEFAULT_I2C_ADDR 
)

Create a PCA9956A instance connected to specified I2C pins with specified address.

Parameters:
i2c_sdaI2C-bus SDA pin
i2c_sdaI2C-bus SCL pin
i2c_addressI2C-bus address (default: 0xC0)

Definition at line 4 of file PCA9956A.cpp.

PCA9956A ( I2C &  i2c_obj,
char  i2c_address = PCA995xA::DEFAULT_I2C_ADDR 
)

Create a PCA9956A instance connected to specified I2C pins with specified address.

Parameters:
i2c_objI2C object (instance)
i2c_addressI2C-bus address (default: 0xC0)

Definition at line 10 of file PCA9956A.cpp.

~PCA9956A (  ) [virtual]

Destractor.

Definition at line 16 of file PCA9956A.cpp.


Member Function Documentation

void current ( int  port,
float  vp 
) [virtual]

Set the output current, specified as a percentage (float)

Parameters:
portSelecting output port 'ALLPORTS' can be used to set all port current same value.
vA floating-point value representing the output current, specified as a percentage. The value should lie between 0.0f (representing on 0%) and 1.0f (representing on 100%). Values outside this range will have undefined behavior.

Reimplemented from PCA995xA.

void current ( float *  vP )

Set all output port curent, specified as a percentage (array of float)

Parameters:
vpAray to floating-point values representing the output current, specified as a percentage. The value should lie between 0.0f (representing on 0%) and 1.0f (representing on 100%).
Note:
The aray should have length of 24

Reimplemented from PCA995xA.

int number_of_ports ( void   ) [virtual]

Returns the number of output ports.

Returns:
The number of output ports

Implements PCA995xA.

Definition at line 51 of file PCA9956A.cpp.

void pwm ( int  port,
float  v 
) [virtual]

Set the output duty-cycle, specified as a percentage (float)

Parameters:
portSelecting output port 'ALLPORTS' can be used to set all port duty-cycle same value.
vA floating-point value representing the output duty-cycle, specified as a percentage. The value should lie between 0.0f (representing on 0%) and 1.0f (representing on 99.6%). Values outside this range will have undefined behavior.

Reimplemented from PCA995xA.

void pwm ( float *  vp )

Set all output port duty-cycle, specified as a percentage (array of float)

Parameters:
vpAray to floating-point values representing the output duty-cycle, specified as a percentage. The value should lie between 0.0f (representing on 0%) and 1.0f (representing on 99.6%).
Note:
The aray should have length of 24

Reimplemented from PCA995xA.

char read ( char  reg_addr )

Register read (single byte) : Low level access to device register.

Parameters:
reg_addrRegister address
Returns:
Read value from register

Reimplemented from PCA995xA.

void read ( char  reg_addr,
char *  data,
int  length 
)

Register write (multiple bytes) : Low level access to device register.

Parameters:
reg_addrRegister address
dataPointer to an array. The values are stored in this array.
lengthLength of data

Reimplemented from PCA995xA.

void write ( char *  data,
int  length 
)

Register write (multiple bytes) : Low level access to device register.

Parameters:
dataPointer to an array. First 1 byte should be the writing start register address
lengthLength of data

Reimplemented from PCA995xA.

void write ( char  reg_addr,
char  data 
)

Register write (single byte) : Low level access to device register.

Parameters:
reg_addrRegister address
dataValue for setting into the register

Reimplemented from PCA995xA.