1024-Position Digital Potentiometer

Committer:
gvi70000
Date:
Tue Jul 26 10:49:57 2016 +0000
Revision:
0:6fed6c6c82b4
AD5235 - 1024-Position Digital Potentiometer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gvi70000 0:6fed6c6c82b4 1 #ifndef AD5235_H
gvi70000 0:6fed6c6c82b4 2 #define AD5235_H
gvi70000 0:6fed6c6c82b4 3
gvi70000 0:6fed6c6c82b4 4 #include "mbed.h"
gvi70000 0:6fed6c6c82b4 5 //Data Sheet http://www.analog.com/media/en/technical-documentation/data-sheets/AD5235.pdf
gvi70000 0:6fed6c6c82b4 6
gvi70000 0:6fed6c6c82b4 7 //Control Registers
gvi70000 0:6fed6c6c82b4 8 #define CMD_NOP 0x00 //0- Do nothing
gvi70000 0:6fed6c6c82b4 9 //EEMEM No.-Address-----EEMEM Content for …
gvi70000 0:6fed6c6c82b4 10 //1 0000 RDAC1
gvi70000 0:6fed6c6c82b4 11 //2 0001 RDAC2
gvi70000 0:6fed6c6c82b4 12 //3 0010 USER1
gvi70000 0:6fed6c6c82b4 13 //4 0011 USER2
gvi70000 0:6fed6c6c82b4 14 //… … …
gvi70000 0:6fed6c6c82b4 15 //15 1110 USER13
gvi70000 0:6fed6c6c82b4 16 //16 1111 RAB1 tolerance
gvi70000 0:6fed6c6c82b4 17
gvi70000 0:6fed6c6c82b4 18 //Instruction 3 writes two data bytes (16 bits of data) to EEMEM.
gvi70000 0:6fed6c6c82b4 19 //In the case of Address 0 and Address 1, only the last 10 bits
gvi70000 0:6fed6c6c82b4 20 //are valid for wiper position setting.
gvi70000 0:6fed6c6c82b4 21 //Basicaly it is CMD_USER2MEM + User mem address + user = B0011A3A2A1A0 + user
gvi70000 0:6fed6c6c82b4 22 // A3 A2 A1 A0
gvi70000 0:6fed6c6c82b4 23 // 0 0 0 0 RDAC1
gvi70000 0:6fed6c6c82b4 24 // 0 0 0 1 RDAC2
gvi70000 0:6fed6c6c82b4 25 // 1 1 1 1 Tolerance Read Only
gvi70000 0:6fed6c6c82b4 26
gvi70000 0:6fed6c6c82b4 27 class AD5235 {
gvi70000 0:6fed6c6c82b4 28 SPI& spi;
gvi70000 0:6fed6c6c82b4 29 DigitalOut cs;
gvi70000 0:6fed6c6c82b4 30 public:
gvi70000 0:6fed6c6c82b4 31 AD5235(SPI& _spi, PinName _cs);
gvi70000 0:6fed6c6c82b4 32 void storeEEMEM2RDAC(uint8_t w);//1 - Restore EEMEM (A0) contents to RDAC (A0) register. See Table 16.
gvi70000 0:6fed6c6c82b4 33 void storeRDAC2EEMEM(uint8_t w);//2 - Store wiper setting. Store RDAC (A0) setting to EEMEM (A0). See Table 15. - Use a delay of 50ms!!!
gvi70000 0:6fed6c6c82b4 34 void setEEMEM(uint8_t w, uint16_t v);//3 - Store contents of Serial Register Data Byte 0 and Serial Register Data Bytes 1 (total 16 bits) to EEMEM (ADDR). See Table 18.- Use a delay of 50ms!!!/RDAC1 is 0, RDAC2 is 1, User1 is 2....User13 is 14
gvi70000 0:6fed6c6c82b4 35 void stepDown6Db(uint8_t w);//4 - Decrement by 6 dB. Right-shift contents of RDAC (A0) register, stop at all 0s.
gvi70000 0:6fed6c6c82b4 36 void stepDownAll6Db(void);//5 - Decrement all by 6 dB. Right-shift contents of all RDAC registers, stop at all 0s.
gvi70000 0:6fed6c6c82b4 37 void stepDown1(uint8_t w);//6 - Decrement contents of RDAC (A0) by 1, stop at all 0s.
gvi70000 0:6fed6c6c82b4 38 void stepDown1All(void);//7 - Decrement contents of all RDAC registers by 1, stop at all 0s.
gvi70000 0:6fed6c6c82b4 39 void refreshAllRDAC(void);//8 - Reset. Refresh all RDACs with their corresponding EEMEM previously stored values. - Use a delay of 30us!!!
gvi70000 0:6fed6c6c82b4 40 uint16_t getEEMEM(uint8_t w);//9 - Read contents of EEMEM (ADDR) from SDO output in the next frame. See Table 19. - Use a delay of 30us!!!
gvi70000 0:6fed6c6c82b4 41 uint16_t getWiper(uint8_t w);//10 - Read RDAC wiper setting from SDO output in the next frame. See Table 20. - Use a delay of 30us!!!
gvi70000 0:6fed6c6c82b4 42 void setWiper(uint8_t w, uint16_t v);//11 - Write contents of Serial Register Data Byte 0 and Serial Register Data Byte 1 (total 10 bits) to RDAC (A0). See Table 14.
gvi70000 0:6fed6c6c82b4 43 void stepUp6Db(uint8_t w);//12 - Increment by 6 dB: Left-shift contents of RDAC (A0),stop at all 1s. See Table 17.
gvi70000 0:6fed6c6c82b4 44 void stepUpAll6Db(void);//13 - Increment all by 6 dB. Left-shift contents of all RDAC registers, stop at all 1s.
gvi70000 0:6fed6c6c82b4 45 void stepUp1(uint8_t w);//14 - Increment contents of RDAC (A0) by 1, stop at all 1s. See Table 15.
gvi70000 0:6fed6c6c82b4 46 void stepUp1All(void);//15 - Increment contents of all RDAC registers by 1, stop at all 1s.
gvi70000 0:6fed6c6c82b4 47 void repeatCMD(void);//16 - See page 21 in manual Another subtle feature of the AD5235 is that a subsequent CS strobe, withoutclock and data, repeats a previous command
gvi70000 0:6fed6c6c82b4 48 float getTolerance(void);
gvi70000 0:6fed6c6c82b4 49 private:
gvi70000 0:6fed6c6c82b4 50 uint16_t _reply;
gvi70000 0:6fed6c6c82b4 51 PinName _CS_pin;
gvi70000 0:6fed6c6c82b4 52 uint16_t transferData(uint8_t cmd, uint16_t val);
gvi70000 0:6fed6c6c82b4 53 };
gvi70000 0:6fed6c6c82b4 54 #endif