MAX14661 Serial Controlled 16:2 Multiplexer

Dependents:   MBD2PMD_WebServer ARD2PMD_WebServer MAX14661_DEMO MAX3232_DEMO

Committer:
gsteiert
Date:
Sat Apr 19 22:59:45 2014 +0000
Revision:
2:c3525ee2d636
Parent:
1:4b0d22958890
Shortened comment header;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gsteiert 0:6bd0b1a28e10 1 /* MAX14661 Driver Library
gsteiert 0:6bd0b1a28e10 2 *
gsteiert 0:6bd0b1a28e10 3 */
gsteiert 0:6bd0b1a28e10 4
gsteiert 0:6bd0b1a28e10 5 #ifndef MAX14661_H
gsteiert 0:6bd0b1a28e10 6 #define MAX14661_H
gsteiert 0:6bd0b1a28e10 7
gsteiert 0:6bd0b1a28e10 8 #include "mbed.h"
gsteiert 0:6bd0b1a28e10 9
gsteiert 0:6bd0b1a28e10 10 /** MAX14661 Library, Provides utilities for configuring the MAX14661 over I2C
gsteiert 0:6bd0b1a28e10 11 *
gsteiert 0:6bd0b1a28e10 12 * Example:
gsteiert 0:6bd0b1a28e10 13 * @code
gsteiert 0:6bd0b1a28e10 14 * // Enable only switch B3 and read back switch state.
gsteiert 0:6bd0b1a28e10 15 *
gsteiert 0:6bd0b1a28e10 16 * #include "MAX14661.h"
gsteiert 0:6bd0b1a28e10 17 *
gsteiert 0:6bd0b1a28e10 18 * MAX14661 mux(p28, p27);
gsteiert 0:6bd0b1a28e10 19 *
gsteiert 0:6bd0b1a28e10 20 * int main() {
gsteiert 0:6bd0b1a28e10 21 * mux.setAB(0x0000, MAX14661::SW03);
gsteiert 0:6bd0b1a28e10 22 * printf("mux = 0x%08X\n", mux.read());
gsteiert 0:6bd0b1a28e10 23 * mux.clearAll();
gsteiert 0:6bd0b1a28e10 24 * printf("mux = 0x%08X\n", mux.read());
gsteiert 0:6bd0b1a28e10 25 * }
gsteiert 0:6bd0b1a28e10 26 * @endcode
gsteiert 0:6bd0b1a28e10 27 */
gsteiert 0:6bd0b1a28e10 28 class MAX14661
gsteiert 0:6bd0b1a28e10 29 {
gsteiert 0:6bd0b1a28e10 30 public:
gsteiert 0:6bd0b1a28e10 31
gsteiert 0:6bd0b1a28e10 32 /** Create a MAX14661 interface
gsteiert 0:6bd0b1a28e10 33 *
gsteiert 0:6bd0b1a28e10 34 * @param sda I2C data line pin
gsteiert 0:6bd0b1a28e10 35 * @param scl I2C clock line pin
gsteiert 0:6bd0b1a28e10 36 * @param addr MAX14661 I2C address
gsteiert 0:6bd0b1a28e10 37 */
gsteiert 0:6bd0b1a28e10 38 MAX14661(PinName sda, PinName scl, int addr = 0x98);
gsteiert 0:6bd0b1a28e10 39
gsteiert 0:6bd0b1a28e10 40 ~MAX14661();
gsteiert 0:6bd0b1a28e10 41
gsteiert 0:6bd0b1a28e10 42 /** Name the register addresses
gsteiert 0:6bd0b1a28e10 43 */
gsteiert 0:6bd0b1a28e10 44 enum MAX14661regs {
gsteiert 1:4b0d22958890 45 REG_DIR0 = 0x00, /**< 8A-1A Direct Access */
gsteiert 1:4b0d22958890 46 REG_DIR1, /**< 16A-9A Direct Access */
gsteiert 1:4b0d22958890 47 REG_DIR2, /**< 8B-1B Direct Access */
gsteiert 1:4b0d22958890 48 REG_DIR3, /**< 16B-9B Direct Access */
gsteiert 1:4b0d22958890 49 REG_SHDW0 = 0x10, /**< 8A-1A Shadow */
gsteiert 1:4b0d22958890 50 REG_SHDW1, /**< 16A-9A Shadow */
gsteiert 1:4b0d22958890 51 REG_SHDW2, /**< 8B-1B Shadow */
gsteiert 1:4b0d22958890 52 REG_SHSW3, /**< 16B-9B Shadow */
gsteiert 1:4b0d22958890 53 REG_CMD_A, /**< Command A */
gsteiert 1:4b0d22958890 54 REG_CMD_B /**< Command A */
gsteiert 0:6bd0b1a28e10 55 };
gsteiert 0:6bd0b1a28e10 56
gsteiert 0:6bd0b1a28e10 57 /** Name the command codes
gsteiert 0:6bd0b1a28e10 58 */
gsteiert 0:6bd0b1a28e10 59 enum MAX14661cmds {
gsteiert 1:4b0d22958890 60 CMD_EN01 = 0x00, /**< Enable switch 1 */
gsteiert 1:4b0d22958890 61 CMD_EN02, /**< Enable switch 2 */
gsteiert 1:4b0d22958890 62 CMD_EN03, /**< Enable switch 3 */
gsteiert 1:4b0d22958890 63 CMD_EN04, /**< Enable switch 4 */
gsteiert 1:4b0d22958890 64 CMD_EN05, /**< Enable switch 5 */
gsteiert 1:4b0d22958890 65 CMD_EN06, /**< Enable switch 6 */
gsteiert 1:4b0d22958890 66 CMD_EN07, /**< Enable switch 7 */
gsteiert 1:4b0d22958890 67 CMD_EN08, /**< Enable switch 8 */
gsteiert 1:4b0d22958890 68 CMD_EN09, /**< Enable switch 9 */
gsteiert 1:4b0d22958890 69 CMD_EN10, /**< Enable switch 10 */
gsteiert 1:4b0d22958890 70 CMD_EN11, /**< Enable switch 11 */
gsteiert 1:4b0d22958890 71 CMD_EN12, /**< Enable switch 12 */
gsteiert 1:4b0d22958890 72 CMD_EN13, /**< Enable switch 13 */
gsteiert 1:4b0d22958890 73 CMD_EN14, /**< Enable switch 14 */
gsteiert 1:4b0d22958890 74 CMD_EN15, /**< Enable switch 15 */
gsteiert 1:4b0d22958890 75 CMD_EN16, /**< Enable switch 16 */
gsteiert 1:4b0d22958890 76 CMD_DIS, /**< Disable switches */
gsteiert 1:4b0d22958890 77 CMD_COPY, /**< Copy shadow registers to switches */
gsteiert 1:4b0d22958890 78 CMD_NOOP = 0x1F /**< Keep current state, no changes */
gsteiert 0:6bd0b1a28e10 79 };
gsteiert 0:6bd0b1a28e10 80
gsteiert 0:6bd0b1a28e10 81 /** Name the switch bits
gsteiert 0:6bd0b1a28e10 82 */
gsteiert 0:6bd0b1a28e10 83 enum MAX14661sws {
gsteiert 1:4b0d22958890 84 SW01 = (1 << 0), /**< Bit mask for switch 1 */
gsteiert 1:4b0d22958890 85 SW02 = (1 << 1), /**< Bit mask for switch 2 */
gsteiert 1:4b0d22958890 86 SW03 = (1 << 2), /**< Bit mask for switch 3 */
gsteiert 1:4b0d22958890 87 SW04 = (1 << 3), /**< Bit mask for switch 4 */
gsteiert 1:4b0d22958890 88 SW05 = (1 << 4), /**< Bit mask for switch 5 */
gsteiert 1:4b0d22958890 89 SW06 = (1 << 5), /**< Bit mask for switch 6 */
gsteiert 1:4b0d22958890 90 SW07 = (1 << 6), /**< Bit mask for switch 7 */
gsteiert 1:4b0d22958890 91 SW08 = (1 << 7), /**< Bit mask for switch 8 */
gsteiert 1:4b0d22958890 92 SW09 = (1 << 8), /**< Bit mask for switch 9 */
gsteiert 1:4b0d22958890 93 SW10 = (1 << 9), /**< Bit mask for switch 10 */
gsteiert 1:4b0d22958890 94 SW11 = (1 << 10), /**< Bit mask for switch 11 */
gsteiert 1:4b0d22958890 95 SW12 = (1 << 11), /**< Bit mask for switch 12 */
gsteiert 1:4b0d22958890 96 SW13 = (1 << 12), /**< Bit mask for switch 13 */
gsteiert 1:4b0d22958890 97 SW14 = (1 << 13), /**< Bit mask for switch 14 */
gsteiert 1:4b0d22958890 98 SW15 = (1 << 14), /**< Bit mask for switch 15 */
gsteiert 1:4b0d22958890 99 SW16 = (1 << 15) /**< Bit mask for switch 16 */
gsteiert 0:6bd0b1a28e10 100 };
gsteiert 0:6bd0b1a28e10 101
gsteiert 0:6bd0b1a28e10 102 /** Clears all bits to opens all 32 switches
gsteiert 0:6bd0b1a28e10 103 */
gsteiert 0:6bd0b1a28e10 104 void clearAll();
gsteiert 0:6bd0b1a28e10 105
gsteiert 0:6bd0b1a28e10 106 /** Set all 32 switches simultaneously
gsteiert 0:6bd0b1a28e10 107 *
gsteiert 0:6bd0b1a28e10 108 * @param swA the desired state of switches [A16 - A01]
gsteiert 0:6bd0b1a28e10 109 * @param swB the desired state of switches [B16 - B01]
gsteiert 0:6bd0b1a28e10 110 */
gsteiert 0:6bd0b1a28e10 111 void setAB(int swA, int swB);
gsteiert 0:6bd0b1a28e10 112
gsteiert 0:6bd0b1a28e10 113 /** Read the status of all 32 switches concatenated into a single int
gsteiert 0:6bd0b1a28e10 114 *
gsteiert 0:6bd0b1a28e10 115 * @returns
gsteiert 0:6bd0b1a28e10 116 * the switch states [B16-B01,A16-A1]
gsteiert 0:6bd0b1a28e10 117 */
gsteiert 0:6bd0b1a28e10 118 int read();
gsteiert 0:6bd0b1a28e10 119
gsteiert 0:6bd0b1a28e10 120 private:
gsteiert 0:6bd0b1a28e10 121 I2C _i2c;
gsteiert 0:6bd0b1a28e10 122 int _addr;
gsteiert 0:6bd0b1a28e10 123 };
gsteiert 0:6bd0b1a28e10 124
gsteiert 0:6bd0b1a28e10 125 #endif