Lluis Nadal
/
MCP4141_Test
Test for MCP4141. 7-bit digital potentiometer with SPI interface.
main.cpp@1:ea045d9d4c5b, 2011-08-06 (annotated)
- Committer:
- lnadal
- Date:
- Sat Aug 06 11:39:29 2011 +0000
- Revision:
- 1:ea045d9d4c5b
- Parent:
- 0:b91b5753e54f
Error corrected in line 21.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lnadal | 0:b91b5753e54f | 1 | #include "mbed.h" |
lnadal | 0:b91b5753e54f | 2 | |
lnadal | 0:b91b5753e54f | 3 | // MCP4141. 2.7 to 5.5V 7-bit linear digital potentiometer with SPI interface. |
lnadal | 0:b91b5753e54f | 4 | // Wiper commands can be write or read. This program is to write commands only. |
lnadal | 0:b91b5753e54f | 5 | // MOSI/MISO are multiplexed in the MCP4141 side. |
lnadal | 0:b91b5753e54f | 6 | |
lnadal | 0:b91b5753e54f | 7 | // Author: Lluis Nadal. August 2011. |
lnadal | 0:b91b5753e54f | 8 | |
lnadal | 0:b91b5753e54f | 9 | |
lnadal | 0:b91b5753e54f | 10 | DigitalOut leds[] = {(LED1), (LED2),(LED3),(LED4)}; |
lnadal | 0:b91b5753e54f | 11 | |
lnadal | 0:b91b5753e54f | 12 | //Define SPI mBed side: |
lnadal | 0:b91b5753e54f | 13 | SPI spi(p5, p6, p7); // mosi, miso, sclk. To write commands only, you do not need to connect p6(miso) to MCP4141. |
lnadal | 0:b91b5753e54f | 14 | DigitalOut cs(p8); // Chip select. Active low. |
lnadal | 0:b91b5753e54f | 15 | |
lnadal | 0:b91b5753e54f | 16 | /* |
lnadal | 0:b91b5753e54f | 17 | MCP4141 side: |
lnadal | 0:b91b5753e54f | 18 | p8 = Vdd: +3.3V. p4 = Vss: GROUND. p1: cs (mBed's p8). |
lnadal | 0:b91b5753e54f | 19 | p2: sclk (mBed's p7). p3: SDI (mBed's p5). p5: potentiometer a. p7: potentiometer b. |
lnadal | 0:b91b5753e54f | 20 | Rab: 5k, 10k 50k or 100k options. p6: wiper (75 Ohm). |
lnadal | 1:ea045d9d4c5b | 21 | Attach ohmeter to pins p6 and p7. |
lnadal | 0:b91b5753e54f | 22 | */ |
lnadal | 0:b91b5753e54f | 23 | |
lnadal | 0:b91b5753e54f | 24 | void write(int n) { // 0 >= n <= 128 |
lnadal | 0:b91b5753e54f | 25 | cs=1; |
lnadal | 0:b91b5753e54f | 26 | cs=0; |
lnadal | 0:b91b5753e54f | 27 | spi.write(0x00); // Address(volatile) 0000, write=00, data=00 = 0x00 |
lnadal | 0:b91b5753e54f | 28 | spi.write(n); // Data |
lnadal | 0:b91b5753e54f | 29 | cs=1; |
lnadal | 0:b91b5753e54f | 30 | } |
lnadal | 0:b91b5753e54f | 31 | |
lnadal | 0:b91b5753e54f | 32 | void increment() { |
lnadal | 0:b91b5753e54f | 33 | cs=1; |
lnadal | 0:b91b5753e54f | 34 | cs=0; |
lnadal | 0:b91b5753e54f | 35 | spi.write(0x07);// Address(volatile) 0000, increment 0100 = 0x07 |
lnadal | 0:b91b5753e54f | 36 | cs=1; |
lnadal | 0:b91b5753e54f | 37 | } |
lnadal | 0:b91b5753e54f | 38 | |
lnadal | 0:b91b5753e54f | 39 | void decrement() { |
lnadal | 0:b91b5753e54f | 40 | cs=0; |
lnadal | 0:b91b5753e54f | 41 | spi.write(0x0B);// Address(volatile) 0000, decrement 1000 = 0x0B |
lnadal | 0:b91b5753e54f | 42 | cs=1; |
lnadal | 0:b91b5753e54f | 43 | } |
lnadal | 0:b91b5753e54f | 44 | |
lnadal | 0:b91b5753e54f | 45 | |
lnadal | 0:b91b5753e54f | 46 | |
lnadal | 0:b91b5753e54f | 47 | int main() { |
lnadal | 0:b91b5753e54f | 48 | |
lnadal | 0:b91b5753e54f | 49 | cs=1; // Disables MCP4141 |
lnadal | 0:b91b5753e54f | 50 | |
lnadal | 0:b91b5753e54f | 51 | spi.format(8,0); // 8 bits , mode 0 |
lnadal | 0:b91b5753e54f | 52 | spi.frequency(1000000); // Default SPI frequency. ( 250kHz maximum for read commands). |
lnadal | 0:b91b5753e54f | 53 | |
lnadal | 0:b91b5753e54f | 54 | while (1) { |
lnadal | 0:b91b5753e54f | 55 | |
lnadal | 0:b91b5753e54f | 56 | leds[0]=0; |
lnadal | 0:b91b5753e54f | 57 | leds[1]=0; |
lnadal | 0:b91b5753e54f | 58 | leds[2]=0; |
lnadal | 0:b91b5753e54f | 59 | leds[3]=0; // All leds off. |
lnadal | 0:b91b5753e54f | 60 | wait(1); |
lnadal | 0:b91b5753e54f | 61 | |
lnadal | 0:b91b5753e54f | 62 | write(32);// Set wiper to 32/128 = 1/4 Rab |
lnadal | 0:b91b5753e54f | 63 | leds[0]=1; |
lnadal | 0:b91b5753e54f | 64 | wait(4); |
lnadal | 0:b91b5753e54f | 65 | |
lnadal | 0:b91b5753e54f | 66 | write(64);// Set wiper to 64/128 = 1/2 Rab |
lnadal | 0:b91b5753e54f | 67 | leds[1]=1; |
lnadal | 0:b91b5753e54f | 68 | wait(4); |
lnadal | 0:b91b5753e54f | 69 | |
lnadal | 0:b91b5753e54f | 70 | write(96);// Set wiper to 96/128 = 3/4 Rab |
lnadal | 0:b91b5753e54f | 71 | leds[2]=1; |
lnadal | 0:b91b5753e54f | 72 | wait(4); |
lnadal | 0:b91b5753e54f | 73 | |
lnadal | 0:b91b5753e54f | 74 | // Decrement wiper 10 times |
lnadal | 0:b91b5753e54f | 75 | for (int i=0; i<10; i++) { |
lnadal | 0:b91b5753e54f | 76 | decrement(); |
lnadal | 0:b91b5753e54f | 77 | } |
lnadal | 0:b91b5753e54f | 78 | leds[3]=1; |
lnadal | 0:b91b5753e54f | 79 | wait(4); |
lnadal | 0:b91b5753e54f | 80 | |
lnadal | 0:b91b5753e54f | 81 | // Increment wiper 10 times |
lnadal | 0:b91b5753e54f | 82 | for (int i=0; i<10; i++) { |
lnadal | 0:b91b5753e54f | 83 | increment(); |
lnadal | 0:b91b5753e54f | 84 | } |
lnadal | 0:b91b5753e54f | 85 | |
lnadal | 0:b91b5753e54f | 86 | leds[3]=0; |
lnadal | 0:b91b5753e54f | 87 | wait(4); |
lnadal | 0:b91b5753e54f | 88 | |
lnadal | 0:b91b5753e54f | 89 | } |
lnadal | 0:b91b5753e54f | 90 | |
lnadal | 0:b91b5753e54f | 91 | } |