Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of SPI_Master_Example_SerialComm by
Revision 1:939932df321d, committed 2015-08-27
- Comitter:
- Idoriz
- Date:
- Thu Aug 27 06:07:46 2015 +0000
- Parent:
- 0:c48a4735d25f
- Commit message:
- Until conversion of RAW data sensor
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
tsi_sensor.lib | Show diff for this revision Revisions of this file |
diff -r c48a4735d25f -r 939932df321d main.cpp --- a/main.cpp Fri Mar 06 22:00:20 2015 +0000 +++ b/main.cpp Thu Aug 27 06:07:46 2015 +0000 @@ -1,33 +1,154 @@ #include "mbed.h" -#include "tsi_sensor.h" -#define ELEC0 9 // Pin connections for touch sensor -#define ELEC1 10 + +// Address untuk masing-masing data dari IMU ADIS16407 +#define SUPPLY_ADD 0x0200 +#define XGYRO_ADD 0x0400 +#define YGYRO_ADD 0x0600 +#define ZGYRO_ADD 0x0800 +#define XACCL_ADD 0x0A00 +#define YACCL_ADD 0x0C00 +#define ZACCL_ADD 0x0E00 +#define XMAGN_ADD 0x1000 +#define YMAGN_ADD 0x1200 +#define ZMAGN_ADD 0x1400 +#define BAROH_ADD 0x1600 +#define BAROL_ADD 0x1800 +#define TEMP_ADD 0x1A00 +#define AUX_ADD 0x1C00 +// Address untuk burst mode +#define BURST_ADD 0x4200 + +// Nilai sensor per LSB/resolusi +#define GYRO_LSB 0.05f +#define ACCL_LSB 0.003333f +#define MAGN_LSB 0.0005f +#define SUPPLY_LSB 0.002418f +#define TEMP_LSB 0.136f + -SPI spi(PTD2, PTD3, PTD1); // mosi, miso, sclk -DigitalOut cs(PTD0); -TSIAnalogSlider tsi(ELEC0, ELEC1, 40); -Serial pc(USBTX, USBRX); // Configure PC UART +SPI spi(PTD2, PTD3, PTD1); // MOSI, MISO, SCLK +DigitalOut cs(PTD0); // Chip select +Serial pc(USBTX, USBRX); // Konfigurasi UART untuk termnial + +// Deklarasi Fungsi dan Prosedur +void Akuisisi_RAW_Data_IMU_Normal(void); +float konversi_data1(unsigned short accl, float resolusi); +float konversi_data2(unsigned short suhu, float resolusi); + +// Variabel Global +unsigned short data_high, data_low, info[14]; +float suhu, dummy, supply, xgyro, ygyro, zgyro, xaccl, yaccl, zaccl, xmagn, ymagn, zmagn; +int size; int main() { - // Configure PC/Serial Connection + // Konfigurasi baud rate terminal pc.baud(9600); - char slidervalue = 0; - char responsevalue = 0; - // Chip must be deselected + + // Variabel Lokal + + // Inisialisasi CS, off cs = 1; - // Setup the spi for 8 bit data, high steady state clock, - // second edge capture, with a 1MHz clock rate + + // Set format komunikasi SPI, 8 bit, mode 3 (CPOL = 1, CPHA = 1) spi.format(8,3); + + // Set frekuensi komunikasi SPI, 1 MHz spi.frequency(1000000); while(true) { - slidervalue = (char)(254 * tsi.readPercentage() + 1); // Get value from Cap. Touch - cs = 0; // Select the device by seting chip select low - spi.write(slidervalue); // Send slider percentage in a single byte - responsevalue = spi.write(0x00); // Send slider percentage in a single byte - pc.printf("LED Adjusted to = 0x%X\n\r", responsevalue); // Print to PC/Serial - // Deselect the device - cs = 1; + + Akuisisi_RAW_Data_IMU_Normal(); + // dummy=info[0]; + // Data power supply sensor dalam floating point + supply = (info[1]&0xfff)*SUPPLY_LSB; + + // Data gyroscope dalam floating point + xgyro = konversi_data1(info[2],GYRO_LSB); + ygyro = konversi_data1(info[3],GYRO_LSB); + zgyro = konversi_data1(info[4],GYRO_LSB); + + // Data accelerometer dalam floating point + xaccl = konversi_data1(info[5],ACCL_LSB); + yaccl = konversi_data1(info[6],ACCL_LSB); + zaccl = konversi_data1(info[7],ACCL_LSB); + + // Data magnetometer dalam floating point + xmagn = konversi_data1(info[8],MAGN_LSB); + ymagn = konversi_data1(info[9],MAGN_LSB); + zmagn = konversi_data1(info[10],MAGN_LSB); + + // Data barometer dalam floating point + + + // Data suhu internal sensor dalam floating point + suhu = konversi_data2(info[13],TEMP_LSB); + + +// pc.printf("test = 0x%x\n\r", test); // Print to PC/Serial + pc.printf("Supply = %.6f\n\r", supply); // Print to PC/Serial + pc.printf("xgyro = %.6f ", xgyro); // Print to PC/Serial + pc.printf("ygyro = %.6f ", ygyro); // Print to PC/Serial + pc.printf("zgyro = %.6f\n\r", zgyro); // Print to PC/Serial + pc.printf("xaccl = %.6f ", xaccl); // Print to PC/Serial + pc.printf("yaccl = %.6f ", yaccl); // Print to PC/Serial + pc.printf("zaccl = %.6f\n\r", zaccl); // Print to PC/Serial + pc.printf("xmagn = %.6f ", xmagn); // Print to PC/Serial + pc.printf("ymagn = %.6f ", ymagn); // Print to PC/Serial + pc.printf("zmagn = %.6f\n\r", zmagn); // Print to PC/Serial + pc.printf("suhu = %.6f\n\r", suhu); // Print to PC/Serial +// pc.printf("size zmagn = %d\n\r", size); // Print to PC/Serial + wait(0.5f); } +} + +void Akuisisi_RAW_Data_IMU_Normal() +{ + int count=0; + unsigned short int dir, data; + for (dir=0x02;dir<0x1D;dir+=0x02) + { + cs = 0; // Chip Select di set 0 untuk memulai komunikasi + data_high=spi.write(dir); + data_low=spi.write(0x00); + cs = 1; // Chip Select di set 1 untuk menghentikan komunikasi + data = data_high<<8 | data_low; + wait_us(10); + info[count]=(data&0x3fff); + count++; + } +} + +float konversi_data1(unsigned short accl, float resolusi) +{ + unsigned short temp1; + float temp2; + signed short sign; + temp1 = accl; + if ((temp1&0x2000) == 0) sign = 1; + else + { + temp1 = (~temp1)+1; + temp1 = temp1&0x1fff; + sign = -1; + } + temp2 = (temp1*resolusi*sign); + return (temp2); +} + +float konversi_data2(unsigned short suhu, float resolusi) +{ + unsigned short temp1; + float temp2; + signed short sign; + temp1 = suhu; + if ((temp1&0x0800) == 0) sign = 1; + else + { + temp1 = (~temp1)+1; + temp1 = temp1&0x7ff; + sign = -1; + } + temp2 = 25+(temp1*resolusi*sign); + return (temp2); } \ No newline at end of file
diff -r c48a4735d25f -r 939932df321d tsi_sensor.lib --- a/tsi_sensor.lib Fri Mar 06 22:00:20 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/Kojto/code/tsi_sensor/#f64097679f27