MAX14661 Serial Controlled 16:2 Multiplexer

Dependents:   MBD2PMD_WebServer ARD2PMD_WebServer MAX14661_DEMO MAX3232_DEMO

Committer:
gsteiert
Date:
Mon Feb 03 04:14:24 2014 +0000
Revision:
0:6bd0b1a28e10
Child:
1:4b0d22958890
MAX14661 Library Initial Draft

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 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
gsteiert 0:6bd0b1a28e10 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
gsteiert 0:6bd0b1a28e10 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
gsteiert 0:6bd0b1a28e10 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
gsteiert 0:6bd0b1a28e10 7 * furnished to do so, subject to the following conditions:
gsteiert 0:6bd0b1a28e10 8 *
gsteiert 0:6bd0b1a28e10 9 * The above copyright notice and this permission notice shall be included in all copies or
gsteiert 0:6bd0b1a28e10 10 * substantial portions of the Software.
gsteiert 0:6bd0b1a28e10 11 *
gsteiert 0:6bd0b1a28e10 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
gsteiert 0:6bd0b1a28e10 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
gsteiert 0:6bd0b1a28e10 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
gsteiert 0:6bd0b1a28e10 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
gsteiert 0:6bd0b1a28e10 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
gsteiert 0:6bd0b1a28e10 17 */
gsteiert 0:6bd0b1a28e10 18
gsteiert 0:6bd0b1a28e10 19 #ifndef MAX14661_H
gsteiert 0:6bd0b1a28e10 20 #define MAX14661_H
gsteiert 0:6bd0b1a28e10 21
gsteiert 0:6bd0b1a28e10 22 #include "mbed.h"
gsteiert 0:6bd0b1a28e10 23
gsteiert 0:6bd0b1a28e10 24 /** MAX14661 Library, Provides utilities for configuring the MAX14661 over I2C
gsteiert 0:6bd0b1a28e10 25 *
gsteiert 0:6bd0b1a28e10 26 * Example:
gsteiert 0:6bd0b1a28e10 27 * @code
gsteiert 0:6bd0b1a28e10 28 * // Enable only switch B3 and read back switch state.
gsteiert 0:6bd0b1a28e10 29 *
gsteiert 0:6bd0b1a28e10 30 * #include "MAX14661.h"
gsteiert 0:6bd0b1a28e10 31 *
gsteiert 0:6bd0b1a28e10 32 * MAX14661 mux(p28, p27);
gsteiert 0:6bd0b1a28e10 33 *
gsteiert 0:6bd0b1a28e10 34 * int main() {
gsteiert 0:6bd0b1a28e10 35 * mux.setAB(0x0000, MAX14661::SW03);
gsteiert 0:6bd0b1a28e10 36 * printf("mux = 0x%08X\n", mux.read());
gsteiert 0:6bd0b1a28e10 37 * mux.clearAll();
gsteiert 0:6bd0b1a28e10 38 * printf("mux = 0x%08X\n", mux.read());
gsteiert 0:6bd0b1a28e10 39 * }
gsteiert 0:6bd0b1a28e10 40 * @endcode
gsteiert 0:6bd0b1a28e10 41 */
gsteiert 0:6bd0b1a28e10 42 class MAX14661
gsteiert 0:6bd0b1a28e10 43 {
gsteiert 0:6bd0b1a28e10 44 public:
gsteiert 0:6bd0b1a28e10 45
gsteiert 0:6bd0b1a28e10 46 /** Create a MAX14661 interface
gsteiert 0:6bd0b1a28e10 47 *
gsteiert 0:6bd0b1a28e10 48 * @param sda I2C data line pin
gsteiert 0:6bd0b1a28e10 49 * @param scl I2C clock line pin
gsteiert 0:6bd0b1a28e10 50 * @param addr MAX14661 I2C address
gsteiert 0:6bd0b1a28e10 51 */
gsteiert 0:6bd0b1a28e10 52 MAX14661(PinName sda, PinName scl, int addr = 0x98);
gsteiert 0:6bd0b1a28e10 53
gsteiert 0:6bd0b1a28e10 54 ~MAX14661();
gsteiert 0:6bd0b1a28e10 55
gsteiert 0:6bd0b1a28e10 56 /** Name the register addresses
gsteiert 0:6bd0b1a28e10 57 */
gsteiert 0:6bd0b1a28e10 58 enum MAX14661regs {
gsteiert 0:6bd0b1a28e10 59 REG_DIR0 = 0x00,
gsteiert 0:6bd0b1a28e10 60 REG_DIR1,
gsteiert 0:6bd0b1a28e10 61 REG_DIR2,
gsteiert 0:6bd0b1a28e10 62 REG_DIR3,
gsteiert 0:6bd0b1a28e10 63 REG_SHDW0 = 0x10,
gsteiert 0:6bd0b1a28e10 64 REG_SHDW1,
gsteiert 0:6bd0b1a28e10 65 REG_SHDW2,
gsteiert 0:6bd0b1a28e10 66 REG_SHSW3,
gsteiert 0:6bd0b1a28e10 67 REG_CMD_A,
gsteiert 0:6bd0b1a28e10 68 REG_CMD_B
gsteiert 0:6bd0b1a28e10 69 };
gsteiert 0:6bd0b1a28e10 70
gsteiert 0:6bd0b1a28e10 71 /** Name the command codes
gsteiert 0:6bd0b1a28e10 72 */
gsteiert 0:6bd0b1a28e10 73 enum MAX14661cmds {
gsteiert 0:6bd0b1a28e10 74 CMD_EN01 = 0x00,
gsteiert 0:6bd0b1a28e10 75 CMD_EN02,
gsteiert 0:6bd0b1a28e10 76 CMD_EN03,
gsteiert 0:6bd0b1a28e10 77 CMD_EN04,
gsteiert 0:6bd0b1a28e10 78 CMD_EN05,
gsteiert 0:6bd0b1a28e10 79 CMD_EN06,
gsteiert 0:6bd0b1a28e10 80 CMD_EN07,
gsteiert 0:6bd0b1a28e10 81 CMD_EN08,
gsteiert 0:6bd0b1a28e10 82 CMD_EN09,
gsteiert 0:6bd0b1a28e10 83 CMD_EN10,
gsteiert 0:6bd0b1a28e10 84 CMD_EN11,
gsteiert 0:6bd0b1a28e10 85 CMD_EN12,
gsteiert 0:6bd0b1a28e10 86 CMD_EN13,
gsteiert 0:6bd0b1a28e10 87 CMD_EN14,
gsteiert 0:6bd0b1a28e10 88 CMD_EN15,
gsteiert 0:6bd0b1a28e10 89 CMD_EN16,
gsteiert 0:6bd0b1a28e10 90 CMD_DIS,
gsteiert 0:6bd0b1a28e10 91 CMD_COPY,
gsteiert 0:6bd0b1a28e10 92 CMD_NOOP = 0x1F
gsteiert 0:6bd0b1a28e10 93 };
gsteiert 0:6bd0b1a28e10 94
gsteiert 0:6bd0b1a28e10 95 /** Name the switch bits
gsteiert 0:6bd0b1a28e10 96 */
gsteiert 0:6bd0b1a28e10 97 enum MAX14661sws {
gsteiert 0:6bd0b1a28e10 98 SW01 = (1 << 0),
gsteiert 0:6bd0b1a28e10 99 SW02 = (1 << 1),
gsteiert 0:6bd0b1a28e10 100 SW03 = (1 << 2),
gsteiert 0:6bd0b1a28e10 101 SW04 = (1 << 3),
gsteiert 0:6bd0b1a28e10 102 SW05 = (1 << 4),
gsteiert 0:6bd0b1a28e10 103 SW06 = (1 << 5),
gsteiert 0:6bd0b1a28e10 104 SW07 = (1 << 6),
gsteiert 0:6bd0b1a28e10 105 SW08 = (1 << 7),
gsteiert 0:6bd0b1a28e10 106 SW09 = (1 << 8),
gsteiert 0:6bd0b1a28e10 107 SW10 = (1 << 9),
gsteiert 0:6bd0b1a28e10 108 SW11 = (1 << 10),
gsteiert 0:6bd0b1a28e10 109 SW12 = (1 << 11),
gsteiert 0:6bd0b1a28e10 110 SW13 = (1 << 12),
gsteiert 0:6bd0b1a28e10 111 SW14 = (1 << 13),
gsteiert 0:6bd0b1a28e10 112 SW15 = (1 << 14),
gsteiert 0:6bd0b1a28e10 113 SW16 = (1 << 15)
gsteiert 0:6bd0b1a28e10 114 };
gsteiert 0:6bd0b1a28e10 115
gsteiert 0:6bd0b1a28e10 116 /** Clears all bits to opens all 32 switches
gsteiert 0:6bd0b1a28e10 117 */
gsteiert 0:6bd0b1a28e10 118 void clearAll();
gsteiert 0:6bd0b1a28e10 119
gsteiert 0:6bd0b1a28e10 120 /** Set all 32 switches simultaneously
gsteiert 0:6bd0b1a28e10 121 *
gsteiert 0:6bd0b1a28e10 122 * @param swA the desired state of switches [A16 - A01]
gsteiert 0:6bd0b1a28e10 123 * @param swB the desired state of switches [B16 - B01]
gsteiert 0:6bd0b1a28e10 124 */
gsteiert 0:6bd0b1a28e10 125 void setAB(int swA, int swB);
gsteiert 0:6bd0b1a28e10 126
gsteiert 0:6bd0b1a28e10 127 /** Read the status of all 32 switches concatenated into a single int
gsteiert 0:6bd0b1a28e10 128 *
gsteiert 0:6bd0b1a28e10 129 * @returns
gsteiert 0:6bd0b1a28e10 130 * the switch states [B16-B01,A16-A1]
gsteiert 0:6bd0b1a28e10 131 */
gsteiert 0:6bd0b1a28e10 132 int read();
gsteiert 0:6bd0b1a28e10 133
gsteiert 0:6bd0b1a28e10 134 private:
gsteiert 0:6bd0b1a28e10 135 I2C _i2c;
gsteiert 0:6bd0b1a28e10 136 int _addr;
gsteiert 0:6bd0b1a28e10 137 };
gsteiert 0:6bd0b1a28e10 138
gsteiert 0:6bd0b1a28e10 139 #endif