MAX14661 Serial Controlled 16:2 Multiplexer
Dependents: MBD2PMD_WebServer ARD2PMD_WebServer MAX14661_DEMO MAX3232_DEMO
MAX14661.h@2:c3525ee2d636, 2014-04-19 (annotated)
- 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?
User | Revision | Line number | New 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 |