Class module for NCP5623B I2C LED driver

Dependents:   mDotEVBM2X MTDOT-EVB-LinkCheck-AL MTDOT-EVBDemo-DRH MTDOT_BOX_EVB_Blinky ... more

Committer:
Evan Hosseini
Date:
Wed Jan 31 10:15:23 2018 -0600
Revision:
5:c8b00cf49c70
Parent:
0:b28a2dfe05fd
Remove explicit i2c frequency configuration, should be done by object owner

Who changed what in which revision?

UserRevisionLine numberNew contents of line
falingtrea 0:b28a2dfe05fd 1 /**
falingtrea 0:b28a2dfe05fd 2 * @file NCP5623B.h
falingtrea 0:b28a2dfe05fd 3 * @brief Device driver - NCP5623B Triple LED Driver IC w/RTOS support
falingtrea 0:b28a2dfe05fd 4 * @author Tim Barr
falingtrea 0:b28a2dfe05fd 5 * @version 1.0
falingtrea 0:b28a2dfe05fd 6 * @see http://www.onsemi.com/pub/Collateral/NCP5623B-D.PDF
falingtrea 0:b28a2dfe05fd 7 *
falingtrea 0:b28a2dfe05fd 8 * Copyright (c) 2015
falingtrea 0:b28a2dfe05fd 9 *
falingtrea 0:b28a2dfe05fd 10 * Licensed under the Apache License, Version 2.0 (the "License");
falingtrea 0:b28a2dfe05fd 11 * you may not use this file except in compliance with the License.
falingtrea 0:b28a2dfe05fd 12 * You may obtain a copy of the License at
falingtrea 0:b28a2dfe05fd 13 *
falingtrea 0:b28a2dfe05fd 14 * http://www.apache.org/licenses/LICENSE-2.0
falingtrea 0:b28a2dfe05fd 15 *
falingtrea 0:b28a2dfe05fd 16 * Unless required by applicable law or agreed to in writing, software
falingtrea 0:b28a2dfe05fd 17 * distributed under the License is distributed on an "AS IS" BASIS,
falingtrea 0:b28a2dfe05fd 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
falingtrea 0:b28a2dfe05fd 19 * See the License for the specific language governing permissions and
falingtrea 0:b28a2dfe05fd 20 * limitations under the License.
falingtrea 0:b28a2dfe05fd 21 *
falingtrea 0:b28a2dfe05fd 22 */
falingtrea 0:b28a2dfe05fd 23
falingtrea 0:b28a2dfe05fd 24 #ifndef NCP5623B_H
falingtrea 0:b28a2dfe05fd 25 #define NCP5623B_H
falingtrea 0:b28a2dfe05fd 26
falingtrea 0:b28a2dfe05fd 27 #include "mbed.h"
falingtrea 0:b28a2dfe05fd 28
falingtrea 0:b28a2dfe05fd 29 /** Using the Multitech MTDOT-EVB
falingtrea 0:b28a2dfe05fd 30 *
falingtrea 0:b28a2dfe05fd 31 * Example:
falingtrea 0:b28a2dfe05fd 32 * @code
falingtrea 0:b28a2dfe05fd 33 * #include "mbed.h"
falingtrea 0:b28a2dfe05fd 34 * #include "NCP5623B.h"
falingtrea 0:b28a2dfe05fd 35 *
falingtrea 0:b28a2dfe05fd 36
falingtrea 0:b28a2dfe05fd 37 *
falingtrea 0:b28a2dfe05fd 38 * int main()
falingtrea 0:b28a2dfe05fd 39 * {
falingtrea 0:b28a2dfe05fd 40
falingtrea 0:b28a2dfe05fd 41 * }
falingtrea 0:b28a2dfe05fd 42 * @endcode
falingtrea 0:b28a2dfe05fd 43 */
falingtrea 0:b28a2dfe05fd 44
falingtrea 0:b28a2dfe05fd 45 /**
falingtrea 0:b28a2dfe05fd 46 * @class NCP5623B
falingtrea 0:b28a2dfe05fd 47 * @brief API abstraction for the NCP5623B Triple LED Driver IC
falingtrea 0:b28a2dfe05fd 48 * initial version will be polling only. Interrupt service and rtos support will
falingtrea 0:b28a2dfe05fd 49 * be added at a later point
falingtrea 0:b28a2dfe05fd 50 */
falingtrea 0:b28a2dfe05fd 51 class NCP5623B
falingtrea 0:b28a2dfe05fd 52 {
falingtrea 0:b28a2dfe05fd 53 public:
falingtrea 0:b28a2dfe05fd 54
falingtrea 0:b28a2dfe05fd 55 /**
falingtrea 0:b28a2dfe05fd 56 * @static DATAMASK
falingtrea 0:b28a2dfe05fd 57 * @brief Data mask
falingtrea 0:b28a2dfe05fd 58 */
falingtrea 0:b28a2dfe05fd 59 uint8_t static const DATAMASK = 0x1F;
falingtrea 0:b28a2dfe05fd 60
falingtrea 0:b28a2dfe05fd 61 /**
falingtrea 0:b28a2dfe05fd 62 * @enum LEDNUM
falingtrea 0:b28a2dfe05fd 63 * @brief LED number for indexing
falingtrea 0:b28a2dfe05fd 64 */
falingtrea 0:b28a2dfe05fd 65 enum LEDNUM
falingtrea 0:b28a2dfe05fd 66 {
falingtrea 0:b28a2dfe05fd 67 LED_1 = 0x00, /* LED 1 device pin 5 */
falingtrea 0:b28a2dfe05fd 68 LED_2, /* LED 2 device pin 4 */
falingtrea 0:b28a2dfe05fd 69 LED_3 /* LED 3 device pin 3 */
falingtrea 0:b28a2dfe05fd 70 };
falingtrea 0:b28a2dfe05fd 71
falingtrea 0:b28a2dfe05fd 72 /**
falingtrea 0:b28a2dfe05fd 73 * @enum DIMDIRECTIO
falingtrea 0:b28a2dfe05fd 74 * @brief Setting Dim direction for Dimming function
falingtrea 0:b28a2dfe05fd 75 */
falingtrea 0:b28a2dfe05fd 76 enum DIMDIRECTION
falingtrea 0:b28a2dfe05fd 77 {
falingtrea 0:b28a2dfe05fd 78 DIMDWN = 0x00, /* Set dimmer direction to down */
falingtrea 0:b28a2dfe05fd 79 DIMUP /* Set dimmer direction to up*/
falingtrea 0:b28a2dfe05fd 80 };
falingtrea 0:b28a2dfe05fd 81
falingtrea 0:b28a2dfe05fd 82 /**
falingtrea 0:b28a2dfe05fd 83 * @enum REGISTER
falingtrea 0:b28a2dfe05fd 84 * @brief The device register map using upper 3 bits
falingtrea 0:b28a2dfe05fd 85 */
falingtrea 0:b28a2dfe05fd 86 enum REGISTER
falingtrea 0:b28a2dfe05fd 87 {
falingtrea 0:b28a2dfe05fd 88 SHUTDWN = 0x00,
falingtrea 0:b28a2dfe05fd 89 LEDCURR = 0x20,
falingtrea 0:b28a2dfe05fd 90 PWMLED1 = 0x40,
falingtrea 0:b28a2dfe05fd 91 PWMLED2 = 0x60,
falingtrea 0:b28a2dfe05fd 92 PWMLED3 = 0x80,
falingtrea 0:b28a2dfe05fd 93 DIMUPSET = 0xA0,
falingtrea 0:b28a2dfe05fd 94 DIMDWNSET = 0xC0,
falingtrea 0:b28a2dfe05fd 95 DIMTIME = 0xE0
falingtrea 0:b28a2dfe05fd 96 };
falingtrea 0:b28a2dfe05fd 97
falingtrea 0:b28a2dfe05fd 98 /** Create the NCP5623B object
falingtrea 0:b28a2dfe05fd 99 * @param i2c - A defined I2C object
falingtrea 0:b28a2dfe05fd 100 */
falingtrea 0:b28a2dfe05fd 101 NCP5623B(I2C &i2c);
falingtrea 0:b28a2dfe05fd 102
falingtrea 0:b28a2dfe05fd 103 /** Shutdown LEDS
falingtrea 0:b28a2dfe05fd 104 * @return status of command
falingtrea 0:b28a2dfe05fd 105 */
falingtrea 0:b28a2dfe05fd 106 uint8_t shutdown(void) const;
falingtrea 0:b28a2dfe05fd 107
falingtrea 0:b28a2dfe05fd 108 /** Set static LED Current
falingtrea 0:b28a2dfe05fd 109 * @data - value of current draw for all LEDs range 0-31
falingtrea 0:b28a2dfe05fd 110 * @return status of command
falingtrea 0:b28a2dfe05fd 111 */
falingtrea 0:b28a2dfe05fd 112 uint8_t setLEDCurrent(uint8_t data) const;
falingtrea 0:b28a2dfe05fd 113
falingtrea 0:b28a2dfe05fd 114 /** Set PWM mode for specific LED
falingtrea 0:b28a2dfe05fd 115 * @lednum - selects LED
falingtrea 0:b28a2dfe05fd 116 * @data - PWM value to set range 0-31 0-100% Pulse width
falingtrea 0:b28a2dfe05fd 117 * @return status of command
falingtrea 0:b28a2dfe05fd 118 */
falingtrea 0:b28a2dfe05fd 119 uint8_t setPWM(LEDNUM lednum, int8_t data ) const;
falingtrea 0:b28a2dfe05fd 120
falingtrea 0:b28a2dfe05fd 121 /** Set Dimming mode for all LEDs
falingtrea 0:b28a2dfe05fd 122 * @dimdir - direction of dimming
falingtrea 0:b28a2dfe05fd 123 * @endstep - ending step of ramp up or ramp down range 0-31
falingtrea 0:b28a2dfe05fd 124 * @steptime - time per step range 0-31 in 8 msec multiples
falingtrea 0:b28a2dfe05fd 125 * @return status of command
falingtrea 0:b28a2dfe05fd 126 */
falingtrea 0:b28a2dfe05fd 127 uint8_t setDimming(DIMDIRECTION dimdir, uint8_t endstep, uint8_t time) const;
falingtrea 0:b28a2dfe05fd 128
Evan Hosseini 5:c8b00cf49c70 129 private:
Evan Hosseini 5:c8b00cf49c70 130 I2C* _i2c;
Evan Hosseini 5:c8b00cf49c70 131 uint8_t static const _i2c_addr = (0x38 << 1);
falingtrea 0:b28a2dfe05fd 132
falingtrea 0:b28a2dfe05fd 133 uint8_t init(void);
falingtrea 0:b28a2dfe05fd 134
falingtrea 0:b28a2dfe05fd 135 /** Write to a register (exposed for debugging reasons)
falingtrea 0:b28a2dfe05fd 136 * @param reg - The register to be written
falingtrea 0:b28a2dfe05fd 137 * @param data - The data to be written
falingtrea 0:b28a2dfe05fd 138 */
falingtrea 0:b28a2dfe05fd 139 uint8_t writeRegister(REGISTER const reg, uint8_t const data) const;
falingtrea 0:b28a2dfe05fd 140 };
falingtrea 0:b28a2dfe05fd 141
falingtrea 0:b28a2dfe05fd 142 #endif