MCP41XXX/42XXX. Single/Dual Digital Potentiometer with SPI™ Interface

Committer:
mcm
Date:
Tue Aug 21 15:44:32 2018 +0000
Revision:
2:81f5716e32f7
Parent:
1:ba1b5b4001f7
cs pin was forgotten, now the chip selects works as expected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 1:ba1b5b4001f7 1 /**
mcm 1:ba1b5b4001f7 2 * @brief MCP41XXX_42XXX.h
mcm 1:ba1b5b4001f7 3 * @details Single/Dual Digital Potentiometer with SPI™ Interface.
mcm 1:ba1b5b4001f7 4 * Header file.
mcm 1:ba1b5b4001f7 5 *
mcm 1:ba1b5b4001f7 6 *
mcm 1:ba1b5b4001f7 7 * @return N/A
mcm 1:ba1b5b4001f7 8 *
mcm 1:ba1b5b4001f7 9 * @author Manuel Caballero
mcm 1:ba1b5b4001f7 10 * @date 21/August/2018
mcm 1:ba1b5b4001f7 11 * @version 21/August/2018 The ORIGIN
mcm 1:ba1b5b4001f7 12 * @pre N/A.
mcm 1:ba1b5b4001f7 13 * @warning N/A
mcm 1:ba1b5b4001f7 14 * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ).
mcm 1:ba1b5b4001f7 15 */
mcm 1:ba1b5b4001f7 16 #ifndef MCP41XXX_42XXX_H
mcm 1:ba1b5b4001f7 17 #define MCP41XXX_42XXX_H
mcm 1:ba1b5b4001f7 18
mcm 1:ba1b5b4001f7 19 #include "mbed.h"
mcm 1:ba1b5b4001f7 20 /**
mcm 1:ba1b5b4001f7 21 Example:
mcm 1:ba1b5b4001f7 22 @code
mcm 1:ba1b5b4001f7 23
mcm 1:ba1b5b4001f7 24 @endcode
mcm 1:ba1b5b4001f7 25 */
mcm 1:ba1b5b4001f7 26
mcm 1:ba1b5b4001f7 27
mcm 1:ba1b5b4001f7 28 /*!
mcm 1:ba1b5b4001f7 29 Library for the MCP41XXX_42XXX 3D Single/Dual Digital Potentiometer with SPI™ Interface.
mcm 1:ba1b5b4001f7 30 */
mcm 1:ba1b5b4001f7 31 class MCP41XXX_42XXX
mcm 1:ba1b5b4001f7 32 {
mcm 1:ba1b5b4001f7 33 public:
mcm 1:ba1b5b4001f7 34 /* Command Byte */
mcm 1:ba1b5b4001f7 35 /**
mcm 1:ba1b5b4001f7 36 * @brief COMMAND SELECTION BITS
mcm 1:ba1b5b4001f7 37 */
mcm 1:ba1b5b4001f7 38 typedef enum {
mcm 1:ba1b5b4001f7 39 MCP41XXX_42XXX_COMMAND_NONE = ( 0b00 << 4 ), /*!< No Command will be executed */
mcm 1:ba1b5b4001f7 40 MCP41XXX_42XXX_COMMAND_WRITE_DATA = ( 0b01 << 4 ), /*!< Write the data contained in Data Byte to the potentiometer(s) determined by the potentiometer selection bits */
mcm 1:ba1b5b4001f7 41 MCP41XXX_42XXX_COMMAND_SHUTDOWN = ( 0b10 << 4 ) /*!< Potentiometer(s) determined by potentiometer selection bits will enter Shutdown Mode. Data bits for this command are 'don't cares' */
mcm 1:ba1b5b4001f7 42 } MCP41XXX_42XXX_command_selection_bits_t;
mcm 1:ba1b5b4001f7 43
mcm 1:ba1b5b4001f7 44
mcm 1:ba1b5b4001f7 45 /**
mcm 1:ba1b5b4001f7 46 * @brief POTENTIOMETER SELECTION BITS
mcm 1:ba1b5b4001f7 47 */
mcm 1:ba1b5b4001f7 48 typedef enum {
mcm 1:ba1b5b4001f7 49 MCP41XXX_42XXX_POTENTIOMETER_DUMMY_CODE = ( 0b00 << 0 ), /*!< Dummy Code: Neither Potentiometer affected */
mcm 1:ba1b5b4001f7 50 MCP41XXX_42XXX_POTENTIOMETER_COMMAND_POTENTIOMETER_0 = ( 0b01 << 0 ), /*!< Command executed on Potentiometer 0 */
mcm 1:ba1b5b4001f7 51 MCP41XXX_42XXX_POTENTIOMETER_COMMAND_POTENTIOMETER_1 = ( 0b10 << 0 ), /*!< Command executed on Potentiometer 1 */
mcm 1:ba1b5b4001f7 52 MCP41XXX_42XXX_POTENTIOMETER_COMMAND_BOTH_POTENTIOMETERS = ( 0b11 << 0 ) /*!< Command executed on both Potentiometers */
mcm 1:ba1b5b4001f7 53 } MCP41XXX_42XXX_potentiometer_selection_bits_t;
mcm 1:ba1b5b4001f7 54
mcm 1:ba1b5b4001f7 55
mcm 1:ba1b5b4001f7 56
mcm 1:ba1b5b4001f7 57
mcm 1:ba1b5b4001f7 58
mcm 1:ba1b5b4001f7 59 #ifndef MCP41XXX_42XXX_VECTOR_STRUCT_H
mcm 1:ba1b5b4001f7 60 #define MCP41XXX_42XXX_VECTOR_STRUCT_H
mcm 1:ba1b5b4001f7 61 typedef struct {
mcm 1:ba1b5b4001f7 62 uint8_t Dn;
mcm 1:ba1b5b4001f7 63 } MCP41XXX_42XXX_vector_data_t;
mcm 1:ba1b5b4001f7 64 #endif
mcm 1:ba1b5b4001f7 65
mcm 1:ba1b5b4001f7 66
mcm 1:ba1b5b4001f7 67
mcm 1:ba1b5b4001f7 68 /**
mcm 1:ba1b5b4001f7 69 * @brief INTERNAL CONSTANTS
mcm 1:ba1b5b4001f7 70 */
mcm 1:ba1b5b4001f7 71 typedef enum {
mcm 1:ba1b5b4001f7 72 MCP41XXX_42XXX_SUCCESS = 0,
mcm 1:ba1b5b4001f7 73 MCP41XXX_42XXX_FAILURE = 1,
mcm 1:ba1b5b4001f7 74 SPI_SUCCESS = 1
mcm 1:ba1b5b4001f7 75 } MCP41XXX_42XXX_status_t;
mcm 1:ba1b5b4001f7 76
mcm 1:ba1b5b4001f7 77
mcm 1:ba1b5b4001f7 78
mcm 1:ba1b5b4001f7 79
mcm 1:ba1b5b4001f7 80 /** Create an MCP41XXX_42XXX object connected to the specified SPI pins.
mcm 1:ba1b5b4001f7 81 *
mcm 1:ba1b5b4001f7 82 * @param mosi SPI Master Output Slave Input
mcm 1:ba1b5b4001f7 83 * @param miso SPI Master Input Slave Output
mcm 1:ba1b5b4001f7 84 * @param sclk SPI clock
mcm 1:ba1b5b4001f7 85 * @param cs SPI Chip Select
mcm 1:ba1b5b4001f7 86 * @param freq SPI frequency in Hz.
mcm 1:ba1b5b4001f7 87 */
mcm 1:ba1b5b4001f7 88 MCP41XXX_42XXX ( PinName mosi, PinName miso, PinName sclk, PinName cs, uint32_t freq );
mcm 1:ba1b5b4001f7 89
mcm 1:ba1b5b4001f7 90 /** Delete MCP41XXX_42XXX object.
mcm 1:ba1b5b4001f7 91 */
mcm 1:ba1b5b4001f7 92 ~MCP41XXX_42XXX();
mcm 1:ba1b5b4001f7 93
mcm 1:ba1b5b4001f7 94 /** It updates the wiper value on the given channel.
mcm 1:ba1b5b4001f7 95 */
mcm 1:ba1b5b4001f7 96 MCP41XXX_42XXX_status_t MCP41XXX_42XXX_SetWiper ( MCP41XXX_42XXX_potentiometer_selection_bits_t myChannel, MCP41XXX_42XXX_vector_data_t myWiperValue );
mcm 1:ba1b5b4001f7 97
mcm 1:ba1b5b4001f7 98 /** It performs a software shutdown.
mcm 1:ba1b5b4001f7 99 */
mcm 1:ba1b5b4001f7 100 MCP41XXX_42XXX_status_t MCP41XXX_42XXX_SoftwareShutdown ( MCP41XXX_42XXX_potentiometer_selection_bits_t myChannel );
mcm 1:ba1b5b4001f7 101
mcm 1:ba1b5b4001f7 102 private:
mcm 1:ba1b5b4001f7 103 SPI _spi;
mcm 1:ba1b5b4001f7 104 DigitalOut _cs;
mcm 1:ba1b5b4001f7 105 };
mcm 1:ba1b5b4001f7 106
mcm 1:ba1b5b4001f7 107 #endif