Simplified access to a Microchip Digital Potentiometer (MCP41xxx/MCP42xxx) devices
Dependents: MCP41xxxApp MCP320xApp MCP41xxxApp
Diff: MCP4xxxx_SPI.h
- Revision:
- 0:03314ad622d6
- Child:
- 1:cf3cee91eb87
diff -r 000000000000 -r 03314ad622d6 MCP4xxxx_SPI.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/MCP4xxxx_SPI.h Fri Jan 25 16:10:58 2013 +0000
@@ -0,0 +1,123 @@
+/* mbed simplified access to Microchip MCP42xxx/MCP41xxx Digital Potentiometer devices (SPI)
+ * Copyright (c) 2013-2013 ygarcia, MIT License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+#if !defined(__MCP4xxxx_SPI_H__)
+#define __MCP4xxxx_SPI_H__
+
+#include <string>
+#include <vector>
+
+#include "Debug.h" // Include mbed header + debug primitives. See DebugLibrary
+
+namespace MCP4xxxx_SPI {
+
+ /** This class provides simplified SPI access to a Microchip MCP42xxx/MCP41xxx Digital Potentiometer device. V0.0.0.1
+ * This class DOES NOT manage /CS pin. It shall be done by the application itself
+ *
+ * Microchip MCP42xxx/MCP41xxx Serial EEPROM device reference: DS11195C
+ *
+ * Note that for SPI details, please visit http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
+ *
+ * @remark This class was validated with Tektronix TDS2014 oscilloscope in 3.3V and in mixte power mode 3.3V for mbed and 5V for the Microchip 24LCxx Serial EEPROM device
+ * @author Yann Garcia (Don't hesitate to contact me: garcia.yann@gmail.com)
+ */
+ class CMCP4xxxx_SPI {
+ /** Reference counter used to guarentee unicity of the instance of SPI class
+ */
+ static unsigned char SPIModuleRefCounter;
+
+ /** Reset state indicator (pin 11); true to reset device, false otherwise (DS11195C-page 21 Clause 5.5 Reset (RS) Pin Operation)
+ */
+ DigitalOut *_reset;
+ /** Shutdown state indicator (pin 12); true to shutdown device, false otherwise (DS11195C-page 21 5.6 Shutdown (SHDN) Pin Operation)
+ */
+ DigitalOut *_shdn;
+ /** An unique instance of SPI class
+ */
+ SPI *_spiInstance;
+ public:
+ /** Authorized commands
+ * See DS11195C-page 18
+ */
+ enum Commands {
+ WriteToPot1, //<! Write to digital potentiometer #1
+ WriteToPot2, //<! Write to digital potentiometer #2
+ WriteToPotBoth, //<! Write to both digital potentiometers
+ ShutdownPot1, //<! Shutdown digital potentiometer #1
+ ShutdownPot2, //<! Shutdown digital potentiometer #2
+ ShutdownPotBoth, //<! Shutdown both digital potentiometers
+ };
+ public:
+ /** Constructor with Write Protect command pin wired.
+ *
+ * @param p_mosi: MBed pin for SDI
+ * @param p_miso: MBed pin for SDO. Note that this pin does not exist for MCP41xxx
+ * @param p_sclk: MBed pin for CLK
+ * @param p_reset: MBed pin to manage /RESET input. If NC, /RESET is not managed, default value is NC, not connected
+ * @param p_shdn: MBed pin to manage /SHDN input. If NC, /SHDN is not managed, default value is NC, not connected
+ * @param p_frequency: Frequency of the SPI interface (SCK), default value is 1MHz
+ */
+ CMCP4xxxx_SPI(const PinName p_mosi, const PinName p_miso, const PinName p_sclk, const PinName p_reset = NC, const PinName p_shdn = NC, const unsigned int p_frequency = 1000000);
+
+ /** Destructor
+ */
+ virtual ~CMCP4xxxx_SPI();
+
+ /** Used to return the unique instance of SPI instance
+ */
+ inline const SPI * operator * () { return (const SPI *)_spiInstance; };
+
+ /** Write a command
+ *
+ * @param p_command The command to execute: Write or Shutdown (See DS11195C-page 18)
+ * @param p_value The potentiometer selection bits (See DS11195C-page 14 Clause 4.1 Modes of Operation)
+ * @return true on success, false otherwise
+ * Exemple:
+ * @code
+ * unsigned char value = 0xaa;
+ * ...
+ * myEEPROM.Write(memoryAddress, value);
+ * ...
+ * @endcode
+ */
+ unsigned short Write(const Commands p_command, const unsigned char p_value);
+
+ /** Write a NOP command
+ */
+ unsigned short Write();
+
+ /** Reset the device
+ */
+ bool Reset();
+
+ /** Shutdown the device
+ */
+ bool Shutdown(const bool p_set);
+
+ private:
+ /** Internal reference identifier
+ */
+ std::string _internalId;
+
+ }; // End of class CMCP4xxxx_SPI
+
+} // End of namespace MCP4xxxx_SPI
+
+using namespace MCP4xxxx_SPI;
+
+#endif // __MCP4xxxx_SPI_H__
Yann Garcia