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

MCP41XXX_42XXX.h

Committer:
mcm
Date:
2018-08-21
Revision:
2:81f5716e32f7
Parent:
1:ba1b5b4001f7

File content as of revision 2:81f5716e32f7:

/**
 * @brief       MCP41XXX_42XXX.h
 * @details     Single/Dual Digital Potentiometer with SPI™ Interface.
 *              Header file.
 *
 *
 * @return      N/A
 *
 * @author      Manuel Caballero
 * @date        21/August/2018
 * @version     21/August/2018    The ORIGIN
 * @pre         N/A.
 * @warning     N/A
 * @pre         This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ).
 */
#ifndef MCP41XXX_42XXX_H
#define MCP41XXX_42XXX_H

#include "mbed.h"
/**
    Example:
@code

@endcode
*/


/*!
 Library for the MCP41XXX_42XXX 3D Single/Dual Digital Potentiometer with SPI™ Interface.
*/
class MCP41XXX_42XXX
{
public:
    /* Command Byte */
    /**
      * @brief   COMMAND SELECTION BITS
      */
    typedef enum {
        MCP41XXX_42XXX_COMMAND_NONE         =   ( 0b00 << 4 ),      /*!<   No Command will be executed                                                                                                          */
        MCP41XXX_42XXX_COMMAND_WRITE_DATA   =   ( 0b01 << 4 ),      /*!<   Write the data contained in Data Byte to the potentiometer(s) determined by the potentiometer selection bits                         */
        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'   */
    } MCP41XXX_42XXX_command_selection_bits_t;


    /**
      * @brief   POTENTIOMETER SELECTION BITS
      */
    typedef enum {
        MCP41XXX_42XXX_POTENTIOMETER_DUMMY_CODE                     =   ( 0b00 << 0 ),      /*!<   Dummy Code: Neither Potentiometer affected               */
        MCP41XXX_42XXX_POTENTIOMETER_COMMAND_POTENTIOMETER_0        =   ( 0b01 << 0 ),      /*!<   Command executed on Potentiometer 0                      */
        MCP41XXX_42XXX_POTENTIOMETER_COMMAND_POTENTIOMETER_1        =   ( 0b10 << 0 ),      /*!<   Command executed on Potentiometer 1                      */
        MCP41XXX_42XXX_POTENTIOMETER_COMMAND_BOTH_POTENTIOMETERS    =   ( 0b11 << 0 )       /*!<   Command executed on both Potentiometers */
    } MCP41XXX_42XXX_potentiometer_selection_bits_t;





#ifndef MCP41XXX_42XXX_VECTOR_STRUCT_H
#define MCP41XXX_42XXX_VECTOR_STRUCT_H
    typedef struct {
        uint8_t Dn;
    } MCP41XXX_42XXX_vector_data_t;
#endif



    /**
      * @brief   INTERNAL CONSTANTS
      */
    typedef enum {
        MCP41XXX_42XXX_SUCCESS     =       0,
        MCP41XXX_42XXX_FAILURE     =       1,
        SPI_SUCCESS                =       1
    } MCP41XXX_42XXX_status_t;




    /** Create an MCP41XXX_42XXX object connected to the specified SPI pins.
      *
      * @param mosi     SPI Master Output Slave Input
      * @param miso     SPI Master Input Slave Output
      * @param sclk     SPI clock
      * @param cs       SPI Chip Select
      * @param freq     SPI frequency in Hz.
      */
    MCP41XXX_42XXX ( PinName mosi, PinName miso, PinName sclk, PinName cs, uint32_t freq );

    /** Delete MCP41XXX_42XXX object.
     */
    ~MCP41XXX_42XXX();

    /** It updates the wiper value on the given channel.
        */
    MCP41XXX_42XXX_status_t  MCP41XXX_42XXX_SetWiper            ( MCP41XXX_42XXX_potentiometer_selection_bits_t myChannel, MCP41XXX_42XXX_vector_data_t myWiperValue );

    /** It performs a software shutdown.
        */
    MCP41XXX_42XXX_status_t  MCP41XXX_42XXX_SoftwareShutdown    ( MCP41XXX_42XXX_potentiometer_selection_bits_t myChannel                                            );
    
private:
    SPI         _spi;
    DigitalOut  _cs;
};

#endif