Aldo Omar Marez Aquino
/
P10E1
main.cpp@0:6e12cd8b71b4, 2018-11-22 (annotated)
- Committer:
- aldomarez
- Date:
- Thu Nov 22 20:11:48 2018 +0000
- Revision:
- 0:6e12cd8b71b4
SPI
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
aldomarez | 0:6e12cd8b71b4 | 1 | #include "mbed.h" |
aldomarez | 0:6e12cd8b71b4 | 2 | |
aldomarez | 0:6e12cd8b71b4 | 3 | SPI acc(D11,D12,D13); // setup SPI interface on pins D11--MOSI>>SDA,D12--MISO>>SDO,D13--SCL |
aldomarez | 0:6e12cd8b71b4 | 4 | DigitalOut cs(D10); // use pin 14 as chip select |
aldomarez | 0:6e12cd8b71b4 | 5 | |
aldomarez | 0:6e12cd8b71b4 | 6 | Serial pc(USBTX, USBRX); // setup USB interface to host terminal |
aldomarez | 0:6e12cd8b71b4 | 7 | |
aldomarez | 0:6e12cd8b71b4 | 8 | char buffer[6]; // raw data array type char |
aldomarez | 0:6e12cd8b71b4 | 9 | signed short data[3]; // acc data is signed 16 bit from -32,768 to +32,767 |
aldomarez | 0:6e12cd8b71b4 | 10 | float x, y, z; // floating point data |
aldomarez | 0:6e12cd8b71b4 | 11 | int main() { |
aldomarez | 0:6e12cd8b71b4 | 12 | cs=1; |
aldomarez | 0:6e12cd8b71b4 | 13 | acc.format(8,3); // 8 bit data, Mode 3 |
aldomarez | 0:6e12cd8b71b4 | 14 | acc.frequency(2000000); // 2MHz clock rate |
aldomarez | 0:6e12cd8b71b4 | 15 | cs=0; |
aldomarez | 0:6e12cd8b71b4 | 16 | acc.write(0x31); // data format register |
aldomarez | 0:6e12cd8b71b4 | 17 | acc.write(0x0B); // format +/-16g, 0.004g/LSB |
aldomarez | 0:6e12cd8b71b4 | 18 | cs=1; |
aldomarez | 0:6e12cd8b71b4 | 19 | cs=0; |
aldomarez | 0:6e12cd8b71b4 | 20 | acc.write(0x2D); // power ctrl register |
aldomarez | 0:6e12cd8b71b4 | 21 | acc.write(0x08); // measure mode |
aldomarez | 0:6e12cd8b71b4 | 22 | cs=1; |
aldomarez | 0:6e12cd8b71b4 | 23 | while (1) { |
aldomarez | 0:6e12cd8b71b4 | 24 | wait(0.2); |
aldomarez | 0:6e12cd8b71b4 | 25 | cs=0; |
aldomarez | 0:6e12cd8b71b4 | 26 | acc.write(0x80|0x40|0x32); // RW bit high, MB bit high, plus address |
aldomarez | 0:6e12cd8b71b4 | 27 | for (int i = 0;i<=5;i++) { |
aldomarez | 0:6e12cd8b71b4 | 28 | buffer[i]=acc.write(0x00); // read back 6 data bytes |
aldomarez | 0:6e12cd8b71b4 | 29 | } |
aldomarez | 0:6e12cd8b71b4 | 30 | cs=1; |
aldomarez | 0:6e12cd8b71b4 | 31 | data[0] = buffer[1]<<8 | buffer[0]; // combine MSB and LSB |
aldomarez | 0:6e12cd8b71b4 | 32 | data[1] = buffer[3]<<8 | buffer[2]; |
aldomarez | 0:6e12cd8b71b4 | 33 | data[2] = buffer[5]<<8 | buffer[4]; |
aldomarez | 0:6e12cd8b71b4 | 34 | x=0.004*data[0]; y=0.004*data[1]; z=0.004*data[2]; // convert to floating point |
aldomarez | 0:6e12cd8b71b4 | 35 | pc.printf("x = %+1.2fg\t y = %+1.2fg\t z = %+1.2fg\n\r", x, y,z); //print to screen |
aldomarez | 0:6e12cd8b71b4 | 36 | } |
aldomarez | 0:6e12cd8b71b4 | 37 | } |