1024-Position Digital Potentiometer
AD5235.h@0:6fed6c6c82b4, 2016-07-26 (annotated)
- 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?
| User | Revision | Line number | New 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 |