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.
Dependencies: mbed
Revision 0:f0ae885dd281, committed 2018-02-01
- Comitter:
- rschiano
- Date:
- Thu Feb 01 14:33:45 2018 +0000
- Child:
- 1:e9a1cf8774e0
- Commit message:
- I2C Ottimizzato;
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
| mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Feb 01 14:33:45 2018 +0000
@@ -0,0 +1,133 @@
+#include "mbed.h"
+
+#define ACC_W 0xD6
+#define WHO_AM_I 0x0F
+#define CTRL1X 0x10
+#define ODR416 0x60
+#define CTRL2G 0x11
+#define OUTG 0x22
+#define OUTX 0x28
+#define OUTT 0x20
+
+#define MAG_W 0x3C
+#define ACC_M 0x32
+#define CFG_REG_A_M 0x60
+#define ODR100 0x8C
+#define OUTM 0x68
+
+
+I2C i2c(D14, D15);
+
+DigitalOut myled(LED1);
+int16_t buffer[10];
+char bufUart[20];
+RawSerial pc(USBTX, USBRX, 921600);
+Timer timer;
+// volatile char TempCelsiusDisplay[] = "+abc.d C";
+
+int main()
+{
+
+ char data_write[2];
+ char data_read[6];
+
+ /* Configure the Temperature sensor device STLM75:
+ - Thermostat mode Interrupt
+ - Fault tolerance: 0
+ */
+ i2c.frequency(400000);
+#ifdef DEBUG
+ data_write[0] = WHO_AM_I;
+ //data_write[1] = WHO_AM_I;
+ pc.printf("Invio who am i...\r\n");
+ int status = i2c.write(ACC_M, data_write, 1, 0);
+ if (status != 0) { // Error
+ while (1) {
+ myled = !myled;
+ wait(0.2);
+ }
+ }
+ pc.printf("Who am i inviato...\r\n");
+ i2c.read(ACC_M, data_read, 1, 0);
+ pc.printf("temp = %d\r\n", data_read[0]);
+ pc.printf("Fine\r\n");
+#endif
+ // Imposto ODR 416 Hz su acc
+ data_write[0] = CTRL1X;
+ data_write[1] = ODR416;
+ i2c.write(ACC_W, data_write, 2, 0);
+ // Imposto ODR 416 Hz su gyro
+ data_write[0] = CTRL2G;
+ data_write[1] = ODR416;
+ i2c.write(ACC_W, data_write, 2, 0);
+ // Imposto ODR 100 Hz Mag
+ data_write[0] = CFG_REG_A_M;
+ data_write[1] = ODR100;
+ i2c.write(MAG_W, data_write, 2, 0);
+ while(1){
+ //timer.reset();
+ //timer.start();
+ char app = '.';
+ //pc.printf("Avvio...\r\n");
+ do{
+ app = pc.getc();
+ }while(app!='k');
+ data_write[0] = OUTG;
+ i2c.write(ACC_W, data_write, 1, 0);
+ i2c.read(ACC_W, data_read, 6, 0);
+ for(int i=0; i<3; i++)
+ buffer[i] = (int16_t)((uint16_t)data_read[2*i+1]*256+data_read[2*i]);
+ for(int i=0; i<6; i++){
+ bufUart[i] = data_read[i];
+ }
+ //timer.stop();
+ //pc.printf("%d\t%d\t%d\r\n",(int16_t)((uint16_t)data_read[1]*256+data_read[0]),(int16_t)((uint16_t)data_read[3]*256+data_read[2]),(int16_t)((uint16_t)data_read[5]*256+data_read[4]));
+ //pc.printf("Elapsed time %d [us]\r\n",timer.read_us());
+ //timer.reset();
+ //timer.start();
+ data_write[0] = OUTX;
+ i2c.write(ACC_W, data_write, 1, 0);
+ i2c.read(ACC_W, data_read, 6, 0);
+ for(int i=0; i<3; i++)
+ buffer[i+3] = (int16_t)((uint16_t)data_read[2*i+1]*256+data_read[2*i]);
+ for(int i=0; i<6; i++){
+ bufUart[i+6] = data_read[i];
+ }
+ //timer.stop();
+ //pc.printf("%d\t%d\t%d\r\n",(int16_t)((uint16_t)data_read[1]*256+data_read[0]),(int16_t)((uint16_t)data_read[3]*256+data_read[2]),(int16_t)((uint16_t)data_read[5]*256+data_read[4]));
+ //pc.printf("Elapsed time %d [us]\r\n",timer.read_us());
+ //timer.reset();
+ //timer.start();
+ data_write[0] = OUTT;
+ i2c.write(ACC_W, data_write, 1, 0);
+ i2c.read(ACC_W, data_read, 2, 0);
+ for(int i=0; i<1; i++)
+ buffer[i+6] = (int16_t)((uint16_t)data_read[2*i+1]*256+data_read[2*i]);
+ for(int i=0; i<2; i++){
+ bufUart[i+12] = data_read[i];
+ }
+ //timer.stop();
+ //pc.printf("%f\t%d\t%d\r\n",(float)((int16_t)(((int16_t)data_read[1])*256+data_read[0]))/256.0 + 25.0,data_read[1],data_read[0]);
+ //pc.printf("Elapsed time %d [us]\r\n",timer.read_us());
+ //timer.reset();
+ //timer.start();
+ data_write[0] = OUTM;
+ i2c.write(MAG_W, data_write, 1, 0);
+ i2c.read(MAG_W, data_read, 6, 0);
+ for(int i=0; i<3; i++)
+ buffer[i+7] = (int16_t)((uint16_t)data_read[2*i+1]*256+data_read[2*i]);
+ for(int i=0; i<6; i++){
+ bufUart[i+14] = data_read[i];
+ }
+ //timer.stop();
+ //pc.printf("%d\t%d\t%d\r\n",(int16_t)((uint16_t)data_read[1]*256+data_read[0]),(int16_t)((uint16_t)data_read[3]*256+data_read[2]),(int16_t)((uint16_t)data_read[5]*256+data_read[4]));
+ //pc.printf("Elapsed time %d [us]\r\n",timer.read_us());
+ //wait_ms(1000);
+ //pc.printf("Invio dati...\r\n");
+ for(int i=0; i<20; i++){
+ pc.putc(bufUart[i]);
+ }
+ }
+
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Feb 01 14:33:45 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/7130f322cb7e \ No newline at end of file