Library for NXP MCU I2C RGB LED DEMO board (6 x PCA9635)

Dependents:   RGB2

PCA9635 board - schematic

Warning

When the original NXP demo board is connected to another mcu board : Disable the on-board 8051 mcu.

Committer:
frankvnk
Date:
Tue Apr 01 20:03:30 2014 +0000
Revision:
1:b89b54759940
Parent:
0:1258ad754d9c
Added global intensity function

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frankvnk 0:1258ad754d9c 1 /**************************************************************************************************
frankvnk 0:1258ad754d9c 2 ***** *****
frankvnk 0:1258ad754d9c 3 ***** Name: PCA9635_6.h *****
frankvnk 0:1258ad754d9c 4 ***** Date: 09/03/2014 *****
frankvnk 0:1258ad754d9c 5 ***** Auth: Frank Vannieuwkerke *****
frankvnk 0:1258ad754d9c 6 ***** Func: library for I2C RGB LED Demo board (6 x PCA9635) *****
frankvnk 0:1258ad754d9c 7 ***** Ported from http://mbed.org/users/JimCarver/code/RGB2/ *****
frankvnk 0:1258ad754d9c 8 **************************************************************************************************/
frankvnk 0:1258ad754d9c 9
frankvnk 0:1258ad754d9c 10 #ifndef PCA9635_6_H
frankvnk 0:1258ad754d9c 11 #define PCA9635_6_H
frankvnk 0:1258ad754d9c 12
frankvnk 0:1258ad754d9c 13 #include "mbed.h"
frankvnk 0:1258ad754d9c 14
frankvnk 0:1258ad754d9c 15 typedef struct
frankvnk 0:1258ad754d9c 16 {
frankvnk 0:1258ad754d9c 17 uint8_t address; /* slave address to sent/receive message */
frankvnk 0:1258ad754d9c 18 uint8_t *buf; /* pointer to application message buffer */
frankvnk 0:1258ad754d9c 19 } I2C_MESSAGE;
frankvnk 0:1258ad754d9c 20
frankvnk 0:1258ad754d9c 21 /** Class for I2C RGB LED Demo board (6 x PCA9635).
frankvnk 0:1258ad754d9c 22 *
frankvnk 0:1258ad754d9c 23 * 'en' pin can be any digital pin.
frankvnk 0:1258ad754d9c 24 * Uses I2C bus.
frankvnk 0:1258ad754d9c 25 */
frankvnk 0:1258ad754d9c 26
frankvnk 0:1258ad754d9c 27 class PCA9635_6 {
frankvnk 0:1258ad754d9c 28 public:
frankvnk 0:1258ad754d9c 29 /** Create a PCA9635_6 object connected to enable pin and I2C bus.
frankvnk 0:1258ad754d9c 30 *
frankvnk 0:1258ad754d9c 31 * @param sda = SDA pin.
frankvnk 0:1258ad754d9c 32 * @param scl = SCL pin.
frankvnk 0:1258ad754d9c 33 * @param en = Board enable pin.
frankvnk 0:1258ad754d9c 34 * @return none
frankvnk 0:1258ad754d9c 35 */
frankvnk 0:1258ad754d9c 36 PCA9635_6(PinName sda, PinName scl, PinName en);
frankvnk 0:1258ad754d9c 37
frankvnk 0:1258ad754d9c 38 /** Send RGB color to a LED.
frankvnk 0:1258ad754d9c 39 *
frankvnk 0:1258ad754d9c 40 * @param LEDn = LED number.
frankvnk 0:1258ad754d9c 41 * @param R = Red.
frankvnk 0:1258ad754d9c 42 * @param G = Green.
frankvnk 0:1258ad754d9c 43 * @param B = Blue.
frankvnk 0:1258ad754d9c 44 * @return none.
frankvnk 0:1258ad754d9c 45 *
frankvnk 0:1258ad754d9c 46 * Lookup the buffer and index to set the desired values
frankvnk 0:1258ad754d9c 47 * in the appropriate locations within the I2C message buffers
frankvnk 0:1258ad754d9c 48 * update_LED() actually sends the buffers through I2C to the drivers
frankvnk 0:1258ad754d9c 49 */
frankvnk 0:1258ad754d9c 50 void set_LED(int LEDn, uint8_t R, uint8_t G, uint8_t B);
frankvnk 0:1258ad754d9c 51
frankvnk 0:1258ad754d9c 52 /** Initalization of the buffers.
frankvnk 0:1258ad754d9c 53 *
frankvnk 0:1258ad754d9c 54 * @param none.
frankvnk 0:1258ad754d9c 55 * @return none.
frankvnk 0:1258ad754d9c 56 */
frankvnk 0:1258ad754d9c 57 void Init_Buffers(void);
frankvnk 0:1258ad754d9c 58
frankvnk 0:1258ad754d9c 59 /** Fill all the PWM register of a device with a RGB setting.
frankvnk 0:1258ad754d9c 60 *
frankvnk 0:1258ad754d9c 61 * @param A,B,C --> Primary colors.
frankvnk 0:1258ad754d9c 62 * @return none.
frankvnk 0:1258ad754d9c 63 */
frankvnk 0:1258ad754d9c 64 void Set_Same_Color_Single_Device(uint8_t A, uint8_t B, uint8_t C);
frankvnk 0:1258ad754d9c 65
frankvnk 0:1258ad754d9c 66 /** Set the I2C address to the ALL CALL Address and send the I2C_Write command.
frankvnk 0:1258ad754d9c 67 *
frankvnk 0:1258ad754d9c 68 * @param none.
frankvnk 0:1258ad754d9c 69 * @return none.
frankvnk 0:1258ad754d9c 70 */
frankvnk 0:1258ad754d9c 71 void Write_All_Devices(void);
frankvnk 0:1258ad754d9c 72
frankvnk 0:1258ad754d9c 73 /** Set the I2C address to the required address and send the I2C_Write command.
frankvnk 0:1258ad754d9c 74 *
frankvnk 0:1258ad754d9c 75 * @param I2C Address of the targetted device (LSB = 0).
frankvnk 0:1258ad754d9c 76 * @return none.
frankvnk 0:1258ad754d9c 77 */
frankvnk 0:1258ad754d9c 78 void Write_To_Device(uint8_t I2C_Address);
frankvnk 0:1258ad754d9c 79
frankvnk 0:1258ad754d9c 80 /** Set the I2C address to the required address and send the I2C_Write command.
frankvnk 0:1258ad754d9c 81 * Wait (delay) before moving to the next step.
frankvnk 0:1258ad754d9c 82 *
frankvnk 0:1258ad754d9c 83 * @param I2C Address of the targetted device (LSB = 0).
frankvnk 0:1258ad754d9c 84 * @param Delay = delay in ms.
frankvnk 0:1258ad754d9c 85 * @return none.
frankvnk 0:1258ad754d9c 86 */
frankvnk 0:1258ad754d9c 87 void Write_To_Device_And_Wait(uint8_t I2C_Address, uint8_t Delay_Value);
frankvnk 0:1258ad754d9c 88
frankvnk 0:1258ad754d9c 89 /** Swtich of ALL the LEDs using the ALL CALL address.
frankvnk 0:1258ad754d9c 90 *
frankvnk 0:1258ad754d9c 91 * @param none.
frankvnk 0:1258ad754d9c 92 * @return none.
frankvnk 0:1258ad754d9c 93 */
frankvnk 0:1258ad754d9c 94 void ALL_LED_OFF(void);
frankvnk 0:1258ad754d9c 95
frankvnk 0:1258ad754d9c 96 /** Write new values to PCA9635.
frankvnk 0:1258ad754d9c 97 *
frankvnk 0:1258ad754d9c 98 * @param none.
frankvnk 0:1258ad754d9c 99 * @return none.
frankvnk 0:1258ad754d9c 100 */
frankvnk 0:1258ad754d9c 101 void update_LED(void);
frankvnk 0:1258ad754d9c 102
frankvnk 0:1258ad754d9c 103 /** Read current RGB LED values.
frankvnk 0:1258ad754d9c 104 *
frankvnk 0:1258ad754d9c 105 * @param LEDn = LED number.
frankvnk 0:1258ad754d9c 106 * @param *R = Pointer to Red return value.
frankvnk 0:1258ad754d9c 107 * @param *G = Pointer to Green return value.
frankvnk 0:1258ad754d9c 108 * @param *B = Pointer to Blue return value.
frankvnk 0:1258ad754d9c 109 */
frankvnk 0:1258ad754d9c 110 void read_LED( int LEDn, uint8_t *R, uint8_t *G, uint8_t *B);
frankvnk 0:1258ad754d9c 111
frankvnk 1:b89b54759940 112 /** Send GLOBAL_INTENSITY to LED board.
frankvnk 1:b89b54759940 113 *
frankvnk 1:b89b54759940 114 * @param none.
frankvnk 1:b89b54759940 115 * @return none.
frankvnk 1:b89b54759940 116 */
frankvnk 1:b89b54759940 117 void LED_INTENSITY(void);
frankvnk 1:b89b54759940 118
frankvnk 1:b89b54759940 119 /** Change GLOBAL_INTENSITY.
frankvnk 1:b89b54759940 120 *
frankvnk 1:b89b54759940 121 * @param intensity value.
frankvnk 1:b89b54759940 122 * @return none.
frankvnk 1:b89b54759940 123 */
frankvnk 1:b89b54759940 124 void set_global_intensity(uint8_t globi);
frankvnk 1:b89b54759940 125
frankvnk 0:1258ad754d9c 126 private:
frankvnk 0:1258ad754d9c 127 void i2cfail(void);
frankvnk 0:1258ad754d9c 128 void I2C_Write(I2C_MESSAGE *mp);
frankvnk 0:1258ad754d9c 129 I2C _i2c;
frankvnk 0:1258ad754d9c 130 DigitalOut _en;
frankvnk 0:1258ad754d9c 131 };
frankvnk 0:1258ad754d9c 132
frankvnk 0:1258ad754d9c 133 #endif