SDI 2014/2015 / Mbed 2 deprecated Lab2

Dependencies:   MMA8451Q mbed

Files at this revision

API Documentation at this revision

Comitter:
serenabpolito
Date:
Wed Jan 14 11:29:52 2015 +0000
Child:
1:944348c50dd6
Commit message:
jkj

Changed in this revision

MMA8451Q.lib Show annotated file Show diff for this revision Revisions of this file
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/MMA8451Q.lib	Wed Jan 14 11:29:52 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/emilmont/code/MMA8451Q/#c4d879a39775
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Jan 14 11:29:52 2015 +0000
@@ -0,0 +1,169 @@
+#include "mbed.h"
+#include "MMA8451Q.h"
+#include "I2C.h"
+
+#if   defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
+PinName const SDA = PTE25;
+PinName const SCL = PTE24;
+#elif defined (TARGET_KL05Z)
+PinName const SDA = PTB4;
+PinName const SCL = PTB3;
+#elif defined (TARGET_K20D50M)
+PinName const SDA = PTB1;
+PinName const SCL = PTB0;
+#else
+  #error TARGET NOT DEFINED
+#endif
+
+#define MMA8451_I2C_ADDRESS (0x1d<<1)
+
+
+//instanzia e inizializza oggettto i2c della clase I2C
+I2C i2c(SDA,SCL); // SDA I2C data line pin  
+                //  SCL I2C clock line pin  
+
+
+char address_wr = 0x3A ; //byte per eseguire lettura: address_device + bit_wr(W=0)
+char address_rd = 0x3B ; //byte per eseguire scrittura: address_device + bit_rd(R=1)
+char CTRL_REG_1 = 0x2A ; // register address del CTRL_REG_1
+char CTRL_REG_2 = 0x2B ; // register address del CTRL_REG_2
+char CTRL_REG_3 = 0x2C ; // register address del CTRL_REG_3
+char CTRL_REG_4 = 0x2D ; // register address del CTRL_REG_4
+char CTRL_REG_5 = 0x2E ; // register address del CTRL_REG_5
+char data = 0xFA ; // inizalizza la variabile data con le impostazioni da scrivere su CTRL_REG_1
+char OUT_X_MSB = 0x01 ; // parte più significativa del registro contenete l'accelerazione sull'asse x 
+char OUT_Y_MSB = 0x03 ; // parte più significativa del registro contenete l'accelerazione sull'asse y
+char OUT_Z_MSB = 0x05 ; // parte più significativa del registro contenete l'accelerazione sull'asse z
+char XYZ_DATA_CFG = 0x0E;// register address del XYZ_DATA_CFG
+//ASLP_RATE0 = ASLP_RATE1 = 1 \\ per settare modalità campionamento in sleep a f=1.56Hz
+//DR2=DR1=DR0 =1 \\ per settare campionamento in wake a f=1.56Hz
+//LNOISE=0 //non attiva ridzuione del rumore (tanto la frequenza di campionamento è bassa)
+//FREAD=1 // attiva modalità fast read, per campionare con 8bit ed avere risoluzione di 8 bit
+//ACTIVE=0 // setta l'avccelerometro in standby per settare anche altri  registri
+
+
+
+int main(void)
+{
+    
+    //impostazione dei registri con scrittura Single Byte Write
+    
+    // setta impostazioni su CTRL_REG_1
+    i2c.start(); // dai lo start
+    i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
+    i2c.write(CTRL_REG_1); // scrivi l'indirizzo del CTRL_REG_1
+    i2c.write(data); // scrivi il "data" già inizializzato con le impostazioni del CTRL_REG_1
+    i2c.stop();
+    
+    // setta impostazioni su CTRL_REG_2
+    data=0x04; //imposta data con le impostazioni del CTRL_REG_2
+    //ST=0 disabilita il self-test
+    //RST=0 disabilita modalità reset
+    //bit 5 don't care
+    //SMODS0=SMODS1=0 setta la modalità oversampling_mode = normal , quando è in modalità in sleep    
+    //SLPE=1 abilita l'autosleep
+    //MODS0=MODS1=0 setta la modalità oversampling_mode = normal , quando è in modalità in active   
+    i2c.start(); // dai lo start
+    i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
+    i2c.write(CTRL_REG_2); // scrivi l'indirizzo del CTRL_REG_2
+    i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_2
+    i2c.stop();    
+
+    // setta impostazioni su CTRL_REG_3
+    data=0x00; //imposta data con le impostazioni del CTRL_REG_3 attineti alle gestioni dell'interupt in modalità sleep
+    // vedi data-sheet
+    i2c.start(); // dai lo start
+    i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
+    i2c.write(CTRL_REG_3); // scrivi l'indirizzo del CTRL_REG_3
+    i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_3
+    i2c.stop();    
+
+    // setta impostazioni su CTRL_REG_4
+    data=0x00; //imposta data con le impostazioni del CTRL_REG_4 attineti alle gestioni dell'interupt
+    // vedi data-sheet
+    i2c.start(); // dai lo start
+    i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
+    i2c.write(CTRL_REG_4); // scrivi l'indirizzo del CTRL_REG_4
+    i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_4
+    i2c.stop();    
+
+  // setta impostazioni su CTRL_REG_5
+    data=0x00; //imposta data con le impostazioni del CTRL_REG_5 attineti alle gestioni dell'interupt in modalità sleep
+    // vedi data-sheet
+    i2c.start(); // dai lo start
+    i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
+    i2c.write(CTRL_REG_5); // scrivi l'indirizzo del CTRL_REG_5
+    i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_5
+    i2c.stop();   
+    
+    // setta impostazioni su CTRL_REG_5
+    data=0x00; //imposta data con le impostazioni del CTRL_REG_5 attineti alle gestioni dell'interupt in modalità sleep
+    // vedi data-sheet
+    i2c.start(); // dai lo start
+    i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
+    i2c.write(CTRL_REG_5); // scrivi l'indirizzo del CTRL_REG_5
+    i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_5
+    i2c.stop();    
+    
+    // setta impostazioni su XYZ_DATA_CFG
+    data=0x00; //imposta data con le impostazioni del XYZ_DATA_CFG attineti alla dinamica che si vuole acquisire (+-2g)
+    // FS1=FS0=0 imposta la dinamica +-2g 
+    i2c.start(); // dai lo start
+    i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
+    i2c.write(XYZ_DATA_CFG); // scrivi l'indirizzo del XYZ_DATA_CFG
+    i2c.write(data); // scrivi il "data" contenete le impostazioni del XYZ_DATA_CFG
+    i2c.stop();  
+  
+    //attiva il dispositivo (esce da standby)
+    // setta impostazioni su CTRL_REG_1
+    data=0xFB ; // mette a 1 il bit ACTIVE e lascia invariati gli altri (già impostati)
+    i2c.start(); // dai lo start
+    i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
+    i2c.write(CTRL_REG_1); // scrivi l'indirizzo del CTRL_REG_1
+    i2c.write(data); // scrivi il "data" in le impostazioni del CTRL_REG_1
+    i2c.stop();
+
+    //lettura degli assi con lettura Multiple Byte Read   
+    //float x_axis, y_axis, z_axis;
+    //i2c.start();
+    //i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
+    //i2c.write(OUT_X_MSB);  // scrivi l'indirizzo del registro contente l'accelerazione sull'asse X
+    //i2c.start();
+    //i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read
+    //x_axis=i2c.write(1); // scrive bit di AK (acknowlodgement) e salva il dato sul bus su x_axis
+    //y_axis=i2c.write(1); // scrive bit di AK (acknowlodgement) e salva il dato sul bus su y_axis
+    //z_axis=i2c.write(0); // scrive bit di AK (acknowlodgement) e salva il dato sul bus su z_axis
+    //i2c.stop();
+        
+    MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
+    PwmOut rled(LED1);
+    PwmOut gled(LED2);
+    PwmOut bled(LED3);
+
+    printf("MMA8451 ID: %d\n", acc.getWhoAmI());
+
+    float x_axis, y_axis, z_axis;
+    while (true) {
+       // float x, y, z;
+       // x = abs(acc.getAccX());
+       // y = abs(acc.getAccY());
+       // z = abs(acc.getAccZ());
+       //lettura degli assi con lettura Multiple Byte Read   
+        i2c.start();
+        i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
+        i2c.write(OUT_X_MSB);  // scrivi l'indirizzo del registro contente l'accelerazione sull'asse X
+        i2c.start();
+        i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read
+        x_axis=i2c.read(1); // scrive bit di AK (acknowlodgement) e salva il dato sul bus su x_axis
+        y_axis=i2c.read(1); // scrive bit di AK (acknowlodgement) e salva il dato sul bus su y_axis
+        z_axis=i2c.read(0); // scrive bit di AK (acknowlodgement) e salva il dato sul bus su z_axis
+        i2c.stop();
+        
+        rled = 1.0f - x_axis/256;
+        gled = 1.0f - y_axis/256;
+        bled = 1.0f - z_axis/256;
+        wait(0.1f);
+        printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n", x_axis, y_axis, z_axis);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Jan 14 11:29:52 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/4fc01daae5a5
\ No newline at end of file