Read analog value from MCP3201 serial ADC converter SPI interface.
Dependencies: mbed
mcp3201.h@0:f9b5c272f6ed, 2016-05-06 (annotated)
- Committer:
- skelter
- Date:
- Fri May 06 18:50:55 2016 +0000
- Revision:
- 0:f9b5c272f6ed
commit start
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
skelter | 0:f9b5c272f6ed | 1 | /* |
skelter | 0:f9b5c272f6ed | 2 | Header for MCP3201 Analog SAR Converter with SPI interface |
skelter | 0:f9b5c272f6ed | 3 | Version: 1.0 |
skelter | 0:f9b5c272f6ed | 4 | Julio S. |
skelter | 0:f9b5c272f6ed | 5 | */ |
skelter | 0:f9b5c272f6ed | 6 | |
skelter | 0:f9b5c272f6ed | 7 | // SPI clock freq. in HZ |
skelter | 0:f9b5c272f6ed | 8 | // Limits from MCP3201 datasheet are: |
skelter | 0:f9b5c272f6ed | 9 | // 1500000Hz when vdd=5V |
skelter | 0:f9b5c272f6ed | 10 | // 800000Hz when vdd=2.7V |
skelter | 0:f9b5c272f6ed | 11 | // 1MHz should work and is the default value. |
skelter | 0:f9b5c272f6ed | 12 | #define MCP3201_CLK_FREQ 1000000 |
skelter | 0:f9b5c272f6ed | 13 | |
skelter | 0:f9b5c272f6ed | 14 | // MCP3201 SPI channel pinout |
skelter | 0:f9b5c272f6ed | 15 | // p5 not wired, there are no commands to send for MCP3201 device |
skelter | 0:f9b5c272f6ed | 16 | SPI MCP3201(p5,p6,p7); |
skelter | 0:f9b5c272f6ed | 17 | // take control from CS pin to avoid transition changes between write commands |
skelter | 0:f9b5c272f6ed | 18 | DigitalOut cs(p8); |
skelter | 0:f9b5c272f6ed | 19 | |
skelter | 0:f9b5c272f6ed | 20 | |
skelter | 0:f9b5c272f6ed | 21 | // Read the analog value from MCP3201. |
skelter | 0:f9b5c272f6ed | 22 | // return 12bit interger (0...4095) |
skelter | 0:f9b5c272f6ed | 23 | int ReadAnalogMCP3201(void) |
skelter | 0:f9b5c272f6ed | 24 | { |
skelter | 0:f9b5c272f6ed | 25 | //uncommente below line only if the MCP3201_CLK_FREQ is diferrent of 1MHz |
skelter | 0:f9b5c272f6ed | 26 | //MCP3201.frequency(MCP3201_CLK_FREQ); |
skelter | 0:f9b5c272f6ed | 27 | |
skelter | 0:f9b5c272f6ed | 28 | cs=0; |
skelter | 0:f9b5c272f6ed | 29 | int high_byte = MCP3201.write(0x00); |
skelter | 0:f9b5c272f6ed | 30 | int low_byte = MCP3201.write(0x00); |
skelter | 0:f9b5c272f6ed | 31 | cs=1; |
skelter | 0:f9b5c272f6ed | 32 | int conv_result = ((high_byte & 0x1f) << 7) | ((low_byte >> 1) & 0x7f); |
skelter | 0:f9b5c272f6ed | 33 | |
skelter | 0:f9b5c272f6ed | 34 | return conv_result; |
skelter | 0:f9b5c272f6ed | 35 | } |