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 Lab3_21_01_2015_finita by
main.cpp@2:53521a18c3de, 2015-01-17 (annotated)
- Committer:
- capopolito
- Date:
- Sat Jan 17 09:27:25 2015 +0000
- Revision:
- 2:53521a18c3de
- Parent:
- 1:944348c50dd6
- Child:
- 3:f8f4a33c7aa2
Lab2_latest_version
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| serenabpolito | 0:4317f4b1a4b3 | 1 | #include "mbed.h" |
| serenabpolito | 0:4317f4b1a4b3 | 2 | #include "MMA8451Q.h" |
| serenabpolito | 0:4317f4b1a4b3 | 3 | #include "I2C.h" |
| serenabpolito | 0:4317f4b1a4b3 | 4 | |
| serenabpolito | 0:4317f4b1a4b3 | 5 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
| capopolito | 2:53521a18c3de | 6 | //PinName const INT1 = PTA14 ; //pin interrupt |
| capopolito | 2:53521a18c3de | 7 | //PinName const INT2 = PTA15 ; //pin interrupt |
| serenabpolito | 0:4317f4b1a4b3 | 8 | PinName const SDA = PTE25; |
| serenabpolito | 0:4317f4b1a4b3 | 9 | PinName const SCL = PTE24; |
| serenabpolito | 0:4317f4b1a4b3 | 10 | #elif defined (TARGET_KL05Z) |
| serenabpolito | 0:4317f4b1a4b3 | 11 | PinName const SDA = PTB4; |
| serenabpolito | 0:4317f4b1a4b3 | 12 | PinName const SCL = PTB3; |
| serenabpolito | 0:4317f4b1a4b3 | 13 | #elif defined (TARGET_K20D50M) |
| serenabpolito | 0:4317f4b1a4b3 | 14 | PinName const SDA = PTB1; |
| serenabpolito | 0:4317f4b1a4b3 | 15 | PinName const SCL = PTB0; |
| serenabpolito | 0:4317f4b1a4b3 | 16 | #else |
| serenabpolito | 0:4317f4b1a4b3 | 17 | #error TARGET NOT DEFINED |
| serenabpolito | 0:4317f4b1a4b3 | 18 | #endif |
| serenabpolito | 0:4317f4b1a4b3 | 19 | |
| serenabpolito | 0:4317f4b1a4b3 | 20 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
| serenabpolito | 0:4317f4b1a4b3 | 21 | |
| serenabpolito | 0:4317f4b1a4b3 | 22 | |
| serenabpolito | 0:4317f4b1a4b3 | 23 | //instanzia e inizializza oggettto i2c della clase I2C |
| serenabpolito | 0:4317f4b1a4b3 | 24 | I2C i2c(SDA,SCL); // SDA I2C data line pin |
| serenabpolito | 0:4317f4b1a4b3 | 25 | // SCL I2C clock line pin |
| serenabpolito | 0:4317f4b1a4b3 | 26 | |
| serenabpolito | 0:4317f4b1a4b3 | 27 | |
| capopolito | 2:53521a18c3de | 28 | char address_wr = 0x3A ; // byte per eseguire lettura: address_device + bit_wr(W=0) |
| capopolito | 2:53521a18c3de | 29 | char address_rd = 0x3B ; // byte per eseguire scrittura: address_device + bit_rd(R=1) |
| capopolito | 2:53521a18c3de | 30 | char CTRL_REG_1 = 0x2A ; //read/write // register address del CTRL_REG_1 |
| capopolito | 2:53521a18c3de | 31 | char CTRL_REG_2 = 0x2B ; //read/write // register address del CTRL_REG_2 |
| capopolito | 2:53521a18c3de | 32 | char CTRL_REG_3 = 0x2C ; //read/write // register address del CTRL_REG_3 |
| capopolito | 2:53521a18c3de | 33 | char CTRL_REG_4 = 0x2D ; //read/write // register address del CTRL_REG_4 |
| capopolito | 2:53521a18c3de | 34 | char CTRL_REG_5 = 0x2E ; //read/write // register address del CTRL_REG_5 |
| capopolito | 2:53521a18c3de | 35 | char data = 0x00 ; // inizalizza la variabile data con le impostazioni da scrivere su CTRL_REG_1 |
| capopolito | 2:53521a18c3de | 36 | char OUT_X_MSB = 0x01 ; //read only // parte più significativa del registro contenete l'accelerazione sull'asse x |
| capopolito | 2:53521a18c3de | 37 | char OUT_Y_MSB = 0x03 ; //read only // parte più significativa del registro contenete l'accelerazione sull'asse y |
| capopolito | 2:53521a18c3de | 38 | char OUT_Z_MSB = 0x05 ; //read only // parte più significativa del registro contenete l'accelerazione sull'asse z |
| capopolito | 2:53521a18c3de | 39 | char XYZ_DATA_CFG = 0x0E; //read/write // register address del XYZ_DATA_CFG |
| capopolito | 2:53521a18c3de | 40 | char FF_MT_CFG = 0x15; //read/write // registera addres del FF_MT_CFG (Frefall/Motionn Configuration register (Read/Write) |
| capopolito | 2:53521a18c3de | 41 | char INT_SOURCE = 0x0C; //read only // register adderess del INT_SOURCE ( System Interrupt Status Register) |
| capopolito | 2:53521a18c3de | 42 | char FF_MT_SRC = 0x16; //read only // register address del FF_MT_SRC (Frefall/Motion Source Register |
| capopolito | 2:53521a18c3de | 43 | char ASLP_COUNT= 0x29; //read/write // register address SLEEP TIME-OUT COUNTER |
| capopolito | 2:53521a18c3de | 44 | char WHO_AM_I = 0x0D; //read only // register address WHO_AM_I dice chi è ? |
| capopolito | 2:53521a18c3de | 45 | char SYSMOD = 0x0B; //read only // register address SYSMOD System Mode Register |
| serenabpolito | 0:4317f4b1a4b3 | 46 | |
| serenabpolito | 0:4317f4b1a4b3 | 47 | int main(void) |
| serenabpolito | 0:4317f4b1a4b3 | 48 | { |
| capopolito | 1:944348c50dd6 | 49 | printf("inizio \n"); |
| serenabpolito | 0:4317f4b1a4b3 | 50 | //impostazione dei registri con scrittura Single Byte Write |
| serenabpolito | 0:4317f4b1a4b3 | 51 | |
| serenabpolito | 0:4317f4b1a4b3 | 52 | // setta impostazioni su CTRL_REG_1 |
| capopolito | 2:53521a18c3de | 53 | //data = 0x58 ; //->F_READ=0; acquisisco cmq un solo byte |
| capopolito | 2:53521a18c3de | 54 | //data= 0x02;//solo F_READ=1; |
| capopolito | 2:53521a18c3de | 55 | data = 0x5A ; // setta la variabile data con le impostazioni da scrivere su CTRL_REG_1 |
| capopolito | 2:53521a18c3de | 56 | //Bit 7-> ASLP_RATE1 = 0 |
| capopolito | 2:53521a18c3de | 57 | //Bit 6-> ASLP_RATE0 = 1 -> // Il sample rate in sleep è 6.25 Hz vedi AN070 |
| capopolito | 2:53521a18c3de | 58 | //Bit 5-> DR2 = 0 |
| capopolito | 2:53521a18c3de | 59 | //Bit 4-> DR1 = 1 |
| capopolito | 2:53521a18c3de | 60 | //Bit 3-> DR0 = 1 -> // Il sample rate in wake è 100 Hz vedi AN070 |
| capopolito | 2:53521a18c3de | 61 | //Bit 2-> LNOISE = 0 |
| capopolito | 2:53521a18c3de | 62 | //Bit 1-> F_READ = 1 -> //Faste read is enabled, acquissco un solo byte! |
| capopolito | 2:53521a18c3de | 63 | //Bit 0-> ACTIVE = 0 -> //Mette il dispositivo in standby per settare gli altri registri |
| serenabpolito | 0:4317f4b1a4b3 | 64 | i2c.start(); // dai lo start |
| serenabpolito | 0:4317f4b1a4b3 | 65 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| serenabpolito | 0:4317f4b1a4b3 | 66 | i2c.write(CTRL_REG_1); // scrivi l'indirizzo del CTRL_REG_1 |
| serenabpolito | 0:4317f4b1a4b3 | 67 | i2c.write(data); // scrivi il "data" già inizializzato con le impostazioni del CTRL_REG_1 |
| serenabpolito | 0:4317f4b1a4b3 | 68 | i2c.stop(); |
| serenabpolito | 0:4317f4b1a4b3 | 69 | |
| serenabpolito | 0:4317f4b1a4b3 | 70 | // setta impostazioni su CTRL_REG_2 |
| serenabpolito | 0:4317f4b1a4b3 | 71 | data=0x04; //imposta data con le impostazioni del CTRL_REG_2 |
| serenabpolito | 0:4317f4b1a4b3 | 72 | //ST=0 disabilita il self-test |
| serenabpolito | 0:4317f4b1a4b3 | 73 | //RST=0 disabilita modalità reset |
| serenabpolito | 0:4317f4b1a4b3 | 74 | //bit 5 don't care |
| serenabpolito | 0:4317f4b1a4b3 | 75 | //SMODS0=SMODS1=0 setta la modalità oversampling_mode = normal , quando è in modalità in sleep |
| capopolito | 2:53521a18c3de | 76 | //SLPE=1 abilita l'autosleep -> vedi AN070 |
| serenabpolito | 0:4317f4b1a4b3 | 77 | //MODS0=MODS1=0 setta la modalità oversampling_mode = normal , quando è in modalità in active |
| serenabpolito | 0:4317f4b1a4b3 | 78 | i2c.start(); // dai lo start |
| serenabpolito | 0:4317f4b1a4b3 | 79 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| serenabpolito | 0:4317f4b1a4b3 | 80 | i2c.write(CTRL_REG_2); // scrivi l'indirizzo del CTRL_REG_2 |
| serenabpolito | 0:4317f4b1a4b3 | 81 | i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_2 |
| serenabpolito | 0:4317f4b1a4b3 | 82 | i2c.stop(); |
| serenabpolito | 0:4317f4b1a4b3 | 83 | |
| serenabpolito | 0:4317f4b1a4b3 | 84 | // setta impostazioni su CTRL_REG_3 |
| capopolito | 2:53521a18c3de | 85 | //data=0x18; //imposta data con le impostazioni del CTRL_REG_3 attineti alle gestioni dell'interupt in modalità sleep |
| capopolito | 2:53521a18c3de | 86 | data=0x40; //imposta solo il wake_trans |
| serenabpolito | 0:4317f4b1a4b3 | 87 | // vedi data-sheet |
| capopolito | 1:944348c50dd6 | 88 | //Bit 7-> FIFO GATE = 0 |
| capopolito | 2:53521a18c3de | 89 | //Bit 6-> WAKE_TRANS = 0 ->0 oppure a 1 non cambia! |
| capopolito | 1:944348c50dd6 | 90 | //Bit 5-> WAKE_LNDRPT = 0 |
| capopolito | 2:53521a18c3de | 91 | //Bit 4-> WAKE_PULSE = 1 |
| capopolito | 2:53521a18c3de | 92 | //Bit 3-> WAKE_FF_MT = 1 (if=0disabled!) Frefall/Motion function interrupt can wake up ! |
| capopolito | 1:944348c50dd6 | 93 | //Bit 2-> don't care |
| capopolito | 1:944348c50dd6 | 94 | //Bit 1-> IPOL = 0 |
| capopolito | 1:944348c50dd6 | 95 | //Bit 0-> PP_OD = 0 |
| serenabpolito | 0:4317f4b1a4b3 | 96 | i2c.start(); // dai lo start |
| serenabpolito | 0:4317f4b1a4b3 | 97 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| serenabpolito | 0:4317f4b1a4b3 | 98 | i2c.write(CTRL_REG_3); // scrivi l'indirizzo del CTRL_REG_3 |
| serenabpolito | 0:4317f4b1a4b3 | 99 | i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_3 |
| serenabpolito | 0:4317f4b1a4b3 | 100 | i2c.stop(); |
| serenabpolito | 0:4317f4b1a4b3 | 101 | |
| serenabpolito | 0:4317f4b1a4b3 | 102 | // setta impostazioni su CTRL_REG_4 |
| capopolito | 2:53521a18c3de | 103 | //data=0x8C; //imposta data con le impostazioni del CTRL_REG_4 attineti alle gestioni dell'interupt |
| capopolito | 2:53521a18c3de | 104 | data=0x80; // imposta solo l'Auto-SLEEP/WAKE interrupt |
| capopolito | 1:944348c50dd6 | 105 | // vedi data-sheet |
| capopolito | 2:53521a18c3de | 106 | //Bit 7-> IN_EN_ASLP = 1 ; se = 1 Auto-SLEEP/WAKE interrupt enabled -> vedi AN070 |
| capopolito | 1:944348c50dd6 | 107 | //Bit 6-> INT_EN_FIFO = 0 |
| capopolito | 1:944348c50dd6 | 108 | //Bit 5-> INT_EN_TRANS = 0 |
| capopolito | 1:944348c50dd6 | 109 | //Bit 4-> INT_EN_LNDPRT = 0 |
| capopolito | 2:53521a18c3de | 110 | //Bit 3-> INT_EN_PULSE = 1 Pulse interrupt enabled -> vedi AN070 |
| capopolito | 2:53521a18c3de | 111 | //Bit 2-> INT_EN_FF_MT = 1 Freefall/Motion interrupt enabled -> vedi AN070 |
| capopolito | 1:944348c50dd6 | 112 | //Bit 1-> don't care = 0 |
| capopolito | 1:944348c50dd6 | 113 | //Bit 0-> INT_EN_DRDY = 0 |
| serenabpolito | 0:4317f4b1a4b3 | 114 | i2c.start(); // dai lo start |
| serenabpolito | 0:4317f4b1a4b3 | 115 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| serenabpolito | 0:4317f4b1a4b3 | 116 | i2c.write(CTRL_REG_4); // scrivi l'indirizzo del CTRL_REG_4 |
| serenabpolito | 0:4317f4b1a4b3 | 117 | i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_4 |
| serenabpolito | 0:4317f4b1a4b3 | 118 | i2c.stop(); |
| serenabpolito | 0:4317f4b1a4b3 | 119 | |
| capopolito | 2:53521a18c3de | 120 | // setta impostazioni su CTRL_REG_5 |
| capopolito | 2:53521a18c3de | 121 | data=0x80; //imposta data con le impostazioni del CTRL_REG_5 attineti alle gestioni dell'interupt nei pin |
| serenabpolito | 0:4317f4b1a4b3 | 122 | // vedi data-sheet |
| capopolito | 2:53521a18c3de | 123 | //Bit 7-> INT_CFG_ASLP = 1 route the auto-sleep interrupt to INT1 ->vedi AN070 |
| capopolito | 2:53521a18c3de | 124 | //Bit 6-> INT_CFG_FIFO = 0 |
| capopolito | 2:53521a18c3de | 125 | //Bit 5-> INT_CFG_TRANS = 0 |
| capopolito | 2:53521a18c3de | 126 | //Bit 4-> INT_CFG_LNDPRT = 0 |
| capopolito | 2:53521a18c3de | 127 | //Bit 3-> INT_CFG_PULSE = 0 route the pulse interrupt to INT1 ->vedi AN070 |
| capopolito | 2:53521a18c3de | 128 | //Bit 2-> INT_CFG_FF_MT = 0 route the Motion and Orientation interrupt to INT1 ->vedi AN070 |
| capopolito | 2:53521a18c3de | 129 | //Bit 1-> DON'T CARE = 0 |
| capopolito | 2:53521a18c3de | 130 | //Bit 0-> INT_CFG_DRDY = 0 |
| serenabpolito | 0:4317f4b1a4b3 | 131 | i2c.start(); // dai lo start |
| serenabpolito | 0:4317f4b1a4b3 | 132 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| serenabpolito | 0:4317f4b1a4b3 | 133 | i2c.write(CTRL_REG_5); // scrivi l'indirizzo del CTRL_REG_5 |
| serenabpolito | 0:4317f4b1a4b3 | 134 | i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_5 |
| serenabpolito | 0:4317f4b1a4b3 | 135 | i2c.stop(); |
| capopolito | 1:944348c50dd6 | 136 | |
| serenabpolito | 0:4317f4b1a4b3 | 137 | // setta impostazioni su XYZ_DATA_CFG |
| serenabpolito | 0:4317f4b1a4b3 | 138 | data=0x00; //imposta data con le impostazioni del XYZ_DATA_CFG attineti alla dinamica che si vuole acquisire (+-2g) |
| serenabpolito | 0:4317f4b1a4b3 | 139 | // FS1=FS0=0 imposta la dinamica +-2g |
| serenabpolito | 0:4317f4b1a4b3 | 140 | i2c.start(); // dai lo start |
| serenabpolito | 0:4317f4b1a4b3 | 141 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| serenabpolito | 0:4317f4b1a4b3 | 142 | i2c.write(XYZ_DATA_CFG); // scrivi l'indirizzo del XYZ_DATA_CFG |
| serenabpolito | 0:4317f4b1a4b3 | 143 | i2c.write(data); // scrivi il "data" contenete le impostazioni del XYZ_DATA_CFG |
| serenabpolito | 0:4317f4b1a4b3 | 144 | i2c.stop(); |
| capopolito | 1:944348c50dd6 | 145 | |
| capopolito | 1:944348c50dd6 | 146 | // setta impostazioni su FF_MT_CFG (Frefall/Motion Configuration Register (Read/Write) |
| capopolito | 2:53521a18c3de | 147 | //data=0xF8; //imposta data con le impostazioni del FF_MT_SRC attineti quando vogliamo svegliare il dispositivo dal wake |
| capopolito | 2:53521a18c3de | 148 | data=0x00; //non imposta nulla |
| capopolito | 1:944348c50dd6 | 149 | //Bit 7-> ELE = 1 ;event flag latch enabled in FF_MT_SRC |
| capopolito | 2:53521a18c3de | 150 | //Bit 6-> OAE = 0 ;Motion Flag (if=1 OR combination) (if=1 AND combination) |
| capopolito | 1:944348c50dd6 | 151 | //Bit 5-> ZEFE = 1 ;se = 0 asse Z event dection disabled ; se = 1 asse X raise event flag on measured acceleration value beyond present threshold |
| capopolito | 1:944348c50dd6 | 152 | //Bit 4-> YEFE = 1 ;se = 0 asse Y event dection disabled ; se = 1 asse Y raise event flag on measured acceleration value beyond present threshold |
| capopolito | 1:944348c50dd6 | 153 | //Bit 3-> XEFE = 1 ;se = 0 asse X event dection disabled ; se = 1 asse X raise event flag on measured acceleration value beyond present threshold |
| capopolito | 1:944348c50dd6 | 154 | //Bit 2-> = 0 don't care |
| capopolito | 1:944348c50dd6 | 155 | //Bit 1-> = 0 don't care |
| capopolito | 1:944348c50dd6 | 156 | //Bit 0-> = 0 don't care |
| capopolito | 1:944348c50dd6 | 157 | i2c.start(); // dai lo start |
| capopolito | 1:944348c50dd6 | 158 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 1:944348c50dd6 | 159 | i2c.write(FF_MT_CFG); // scrivi l'indirizzo del FF_MT_CFG |
| capopolito | 1:944348c50dd6 | 160 | i2c.write(data); // scrivi il "data" contenete le impostazioni del FF_MT_CFG |
| capopolito | 1:944348c50dd6 | 161 | i2c.stop(); |
| capopolito | 2:53521a18c3de | 162 | //setta impostazioni su ASLP_COUNT |
| capopolito | 2:53521a18c3de | 163 | data=0xF0; //->impostato da me valore max |
| capopolito | 2:53521a18c3de | 164 | //data=0x01; //impostato da me valore min |
| capopolito | 2:53521a18c3de | 165 | //data=0x04; //imposta data con le impostazioni del ASLP_COUNT -> impostato dal professore!!! |
| capopolito | 2:53521a18c3de | 166 | i2c.start(); // dai lo start |
| capopolito | 2:53521a18c3de | 167 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 168 | i2c.write(ASLP_COUNT); // scrivi l'indirizzo del ASLP_COUNT |
| capopolito | 2:53521a18c3de | 169 | i2c.write(data); // scrivi il "data" contenete le impostazioni del ASLP_COUNT |
| capopolito | 2:53521a18c3de | 170 | i2c.stop(); |
| capopolito | 1:944348c50dd6 | 171 | |
| capopolito | 2:53521a18c3de | 172 | //!!! attiva il dispositivo (esce da standby) !!! |
| serenabpolito | 0:4317f4b1a4b3 | 173 | // setta impostazioni su CTRL_REG_1 |
| capopolito | 2:53521a18c3de | 174 | data=0x5B ; // mette a 1 il bit ACTIVE e lascia invariati gli altri (già impostati) |
| serenabpolito | 0:4317f4b1a4b3 | 175 | i2c.start(); // dai lo start |
| serenabpolito | 0:4317f4b1a4b3 | 176 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| serenabpolito | 0:4317f4b1a4b3 | 177 | i2c.write(CTRL_REG_1); // scrivi l'indirizzo del CTRL_REG_1 |
| serenabpolito | 0:4317f4b1a4b3 | 178 | i2c.write(data); // scrivi il "data" in le impostazioni del CTRL_REG_1 |
| serenabpolito | 0:4317f4b1a4b3 | 179 | i2c.stop(); |
| serenabpolito | 0:4317f4b1a4b3 | 180 | |
| serenabpolito | 0:4317f4b1a4b3 | 181 | |
| serenabpolito | 0:4317f4b1a4b3 | 182 | MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); |
| serenabpolito | 0:4317f4b1a4b3 | 183 | PwmOut rled(LED1); |
| serenabpolito | 0:4317f4b1a4b3 | 184 | PwmOut gled(LED2); |
| capopolito | 1:944348c50dd6 | 185 | PwmOut bled(LED3); |
| capopolito | 1:944348c50dd6 | 186 | |
| capopolito | 2:53521a18c3de | 187 | |
| capopolito | 2:53521a18c3de | 188 | char who_am_i = 0x00; |
| capopolito | 2:53521a18c3de | 189 | //lettura single byte read del registro WHO_AM_I |
| capopolito | 2:53521a18c3de | 190 | i2c.start(); |
| capopolito | 2:53521a18c3de | 191 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 192 | i2c.write(WHO_AM_I); // scrivi l'indirizzo del registro |
| capopolito | 2:53521a18c3de | 193 | i2c.start(); |
| capopolito | 2:53521a18c3de | 194 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 195 | who_am_i=i2c.read(0); |
| capopolito | 2:53521a18c3de | 196 | i2c.stop(); |
| capopolito | 2:53521a18c3de | 197 | printf("mi chiamo: %1.2x \n", who_am_i); |
| capopolito | 2:53521a18c3de | 198 | |
| capopolito | 2:53521a18c3de | 199 | |
| capopolito | 2:53521a18c3de | 200 | char ctrl_reg_1 = 0x00; |
| capopolito | 2:53521a18c3de | 201 | //lettura single byte read del registro CTRL_REG_1 |
| capopolito | 2:53521a18c3de | 202 | i2c.start(); |
| capopolito | 2:53521a18c3de | 203 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 204 | i2c.write(CTRL_REG_1); // scrivi l'indirizzo del registro |
| capopolito | 2:53521a18c3de | 205 | i2c.start(); |
| capopolito | 2:53521a18c3de | 206 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 207 | ctrl_reg_1=i2c.read(0); |
| capopolito | 2:53521a18c3de | 208 | i2c.stop(); |
| capopolito | 2:53521a18c3de | 209 | printf("CTRL_REG_1: %1.2x \n", ctrl_reg_1); |
| capopolito | 2:53521a18c3de | 210 | |
| capopolito | 2:53521a18c3de | 211 | char ctrl_reg_2 = 0x00; |
| capopolito | 2:53521a18c3de | 212 | //lettura single byte read del registro CTRL_REG_2 |
| capopolito | 2:53521a18c3de | 213 | i2c.start(); |
| capopolito | 2:53521a18c3de | 214 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 215 | i2c.write(CTRL_REG_2); // scrivi l'indirizzo del registro |
| capopolito | 2:53521a18c3de | 216 | i2c.start(); |
| capopolito | 2:53521a18c3de | 217 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 218 | ctrl_reg_2=i2c.read(0); |
| capopolito | 2:53521a18c3de | 219 | i2c.stop(); |
| capopolito | 2:53521a18c3de | 220 | printf("CTRL_REG_2: %1.2x \n", ctrl_reg_2); |
| capopolito | 2:53521a18c3de | 221 | |
| capopolito | 2:53521a18c3de | 222 | char ctrl_reg_3 = 0x00; |
| capopolito | 2:53521a18c3de | 223 | //lettura single byte read del registro CTRL_REG_3 |
| capopolito | 2:53521a18c3de | 224 | i2c.start(); |
| capopolito | 2:53521a18c3de | 225 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 226 | i2c.write(CTRL_REG_3); // scrivi l'indirizzo del registro |
| capopolito | 2:53521a18c3de | 227 | i2c.start(); |
| capopolito | 2:53521a18c3de | 228 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 229 | ctrl_reg_3=i2c.read(0); |
| capopolito | 2:53521a18c3de | 230 | i2c.stop(); |
| capopolito | 2:53521a18c3de | 231 | printf("CTRL_REG_3: %1.2x \n", ctrl_reg_3); |
| capopolito | 2:53521a18c3de | 232 | |
| capopolito | 2:53521a18c3de | 233 | char ctrl_reg_4 = 0x00; |
| capopolito | 2:53521a18c3de | 234 | //lettura single byte read del registro CTRL_REG_4 |
| capopolito | 2:53521a18c3de | 235 | i2c.start(); |
| capopolito | 2:53521a18c3de | 236 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 237 | i2c.write(CTRL_REG_4); // scrivi l'indirizzo del registro |
| capopolito | 2:53521a18c3de | 238 | i2c.start(); |
| capopolito | 2:53521a18c3de | 239 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 240 | ctrl_reg_4=i2c.read(0); |
| capopolito | 2:53521a18c3de | 241 | i2c.stop(); |
| capopolito | 2:53521a18c3de | 242 | printf("CTRL_REG_4: %1.2x \n", ctrl_reg_4); |
| capopolito | 2:53521a18c3de | 243 | |
| capopolito | 2:53521a18c3de | 244 | char ctrl_reg_5 = 0x00; |
| capopolito | 2:53521a18c3de | 245 | //lettura single byte read del registro CTRL_REG_5 |
| capopolito | 2:53521a18c3de | 246 | i2c.start(); |
| capopolito | 2:53521a18c3de | 247 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 248 | i2c.write(CTRL_REG_5); // scrivi l'indirizzo del registro |
| capopolito | 2:53521a18c3de | 249 | i2c.start(); |
| capopolito | 2:53521a18c3de | 250 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 251 | ctrl_reg_5=i2c.read(0); |
| capopolito | 2:53521a18c3de | 252 | i2c.stop(); |
| capopolito | 2:53521a18c3de | 253 | printf("CTRL_REG_5: %1.2x \n", ctrl_reg_5); |
| capopolito | 2:53521a18c3de | 254 | |
| capopolito | 2:53521a18c3de | 255 | char ff_mt_cfg = 0x00; |
| capopolito | 2:53521a18c3de | 256 | //lettura single byte read del registro FF_MT_CFG |
| capopolito | 2:53521a18c3de | 257 | i2c.start(); |
| capopolito | 2:53521a18c3de | 258 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 259 | i2c.write(FF_MT_CFG); // scrivi l'indirizzo del registro |
| capopolito | 2:53521a18c3de | 260 | i2c.start(); |
| capopolito | 2:53521a18c3de | 261 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 262 | ff_mt_cfg=i2c.read(0); |
| capopolito | 2:53521a18c3de | 263 | i2c.stop(); |
| capopolito | 2:53521a18c3de | 264 | printf("FF_MT_CFG: %1.2x \n", ff_mt_cfg); |
| capopolito | 2:53521a18c3de | 265 | |
| capopolito | 2:53521a18c3de | 266 | |
| capopolito | 2:53521a18c3de | 267 | char int_source = 0x00; |
| capopolito | 2:53521a18c3de | 268 | //lettura single byte read del registro INT_SOURCE |
| capopolito | 2:53521a18c3de | 269 | i2c.start(); |
| capopolito | 2:53521a18c3de | 270 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 271 | i2c.write(INT_SOURCE); // scrivi l'indirizzo del registro |
| capopolito | 2:53521a18c3de | 272 | i2c.start(); |
| capopolito | 2:53521a18c3de | 273 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 274 | int_source=i2c.read(0); |
| capopolito | 2:53521a18c3de | 275 | i2c.stop(); |
| capopolito | 2:53521a18c3de | 276 | printf("INT_SOURCE: %1.2x \n", int_source); |
| capopolito | 2:53521a18c3de | 277 | |
| capopolito | 2:53521a18c3de | 278 | char aslp_count = 0x00; |
| capopolito | 2:53521a18c3de | 279 | //lettura single byte read del registro ASLP_COUNT |
| capopolito | 2:53521a18c3de | 280 | i2c.start(); |
| capopolito | 2:53521a18c3de | 281 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 282 | i2c.write(ASLP_COUNT); // scrivi l'indirizzo del registro |
| capopolito | 2:53521a18c3de | 283 | i2c.start(); |
| capopolito | 2:53521a18c3de | 284 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 285 | aslp_count=i2c.read(0); |
| capopolito | 2:53521a18c3de | 286 | i2c.stop(); |
| capopolito | 2:53521a18c3de | 287 | printf("ASLP_COUNT: %1.2x \n", aslp_count); |
| serenabpolito | 0:4317f4b1a4b3 | 288 | |
| capopolito | 1:944348c50dd6 | 289 | |
| capopolito | 2:53521a18c3de | 290 | char sysmod = 0x00; |
| capopolito | 1:944348c50dd6 | 291 | char stato_FF_MT_SRC = 0x00 ; |
| capopolito | 1:944348c50dd6 | 292 | char stato_INT_SOURCE = 0x00 ; |
| serenabpolito | 0:4317f4b1a4b3 | 293 | float x_axis, y_axis, z_axis; |
| serenabpolito | 0:4317f4b1a4b3 | 294 | while (true) { |
| capopolito | 2:53521a18c3de | 295 | printf("sono dentro il while \n"); |
| capopolito | 2:53521a18c3de | 296 | printf("SYSMOD_pre_lettura: %1.2x \n", sysmod); |
| capopolito | 1:944348c50dd6 | 297 | //lettura del registro di stato INT_SOURCE (read only) |
| capopolito | 1:944348c50dd6 | 298 | //Bit 7-> SRC_ASLP = 1 one or more event flag has been asserted |
| capopolito | 1:944348c50dd6 | 299 | //Bit 6-> SRC_FIFO |
| capopolito | 1:944348c50dd6 | 300 | //Bit 5-> SRC_TRANS |
| capopolito | 1:944348c50dd6 | 301 | //Bit 4-> SRC_LNDPRT |
| capopolito | 1:944348c50dd6 | 302 | //Bit 3-> SRC_PULSE |
| capopolito | 1:944348c50dd6 | 303 | //Bit 2-> SRC_FF_MT |
| capopolito | 1:944348c50dd6 | 304 | //Bit 1-> DONT'CARE |
| capopolito | 1:944348c50dd6 | 305 | //Bit 0-> SRC_DRDY |
| capopolito | 1:944348c50dd6 | 306 | i2c.start(); |
| capopolito | 1:944348c50dd6 | 307 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 1:944348c50dd6 | 308 | i2c.write(INT_SOURCE); // scrivi l'indirizzo del registro |
| capopolito | 1:944348c50dd6 | 309 | i2c.start(); |
| capopolito | 1:944348c50dd6 | 310 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 1:944348c50dd6 | 311 | stato_INT_SOURCE=i2c.read(0); |
| capopolito | 1:944348c50dd6 | 312 | i2c.stop(); |
| capopolito | 1:944348c50dd6 | 313 | printf("stato_INT_SOURCE: %1.2d \n", stato_INT_SOURCE); |
| capopolito | 2:53521a18c3de | 314 | //lettura del registro di stato FF_MT_SRC (read only) |
| capopolito | 2:53521a18c3de | 315 | //Bit 7-> EA = 1 one or more event flag has been asserted |
| capopolito | 2:53521a18c3de | 316 | //Bit 6-> don't care |
| capopolito | 2:53521a18c3de | 317 | //Bit 5-> ZHE |
| capopolito | 2:53521a18c3de | 318 | //Bit 4-> ZHP |
| capopolito | 2:53521a18c3de | 319 | //Bit 3-> YHE |
| capopolito | 2:53521a18c3de | 320 | //Bit 2-> YHP |
| capopolito | 2:53521a18c3de | 321 | //Bit 1-> XHE |
| capopolito | 2:53521a18c3de | 322 | //Bit 0-> XHP i2c.start(); |
| capopolito | 1:944348c50dd6 | 323 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 1:944348c50dd6 | 324 | i2c.write(FF_MT_SRC); // scrivi l'indirizzo del registro |
| capopolito | 1:944348c50dd6 | 325 | i2c.start(); |
| capopolito | 1:944348c50dd6 | 326 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 1:944348c50dd6 | 327 | stato_FF_MT_SRC=i2c.read(0); |
| capopolito | 1:944348c50dd6 | 328 | i2c.stop(); |
| capopolito | 2:53521a18c3de | 329 | printf("stato_FF_MT_SRC: %1.2x \n", stato_FF_MT_SRC); |
| capopolito | 2:53521a18c3de | 330 | // lettura single Byte Read contenuto di SYSMOD System Mode Register |
| capopolito | 2:53521a18c3de | 331 | //Bit 7-> FGERR |
| capopolito | 2:53521a18c3de | 332 | //Bit 6-> FGT_4 |
| capopolito | 2:53521a18c3de | 333 | //Bit 5-> FGT_3 |
| capopolito | 2:53521a18c3de | 334 | //Bit 4-> FGT_2 |
| capopolito | 2:53521a18c3de | 335 | //Bit 3-> FGT_1 |
| capopolito | 2:53521a18c3de | 336 | //Bit 2-> FGT_0 |
| capopolito | 2:53521a18c3de | 337 | //Bit 1-> SYSMOD1 |
| capopolito | 2:53521a18c3de | 338 | //Bit 0-> SYSMOD0 |
| capopolito | 2:53521a18c3de | 339 | // SYSMOD[1:0] |
| capopolito | 2:53521a18c3de | 340 | // System Mode. Default value: 00. |
| capopolito | 2:53521a18c3de | 341 | // 00: STANDBY mode |
| capopolito | 2:53521a18c3de | 342 | // 01: WAKE mode |
| capopolito | 2:53521a18c3de | 343 | // 10: SLEEP mode |
| capopolito | 2:53521a18c3de | 344 | i2c.start(); |
| capopolito | 2:53521a18c3de | 345 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 346 | i2c.write(SYSMOD); // scrivi l'indirizzo del registro |
| capopolito | 2:53521a18c3de | 347 | i2c.start(); |
| capopolito | 2:53521a18c3de | 348 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 349 | sysmod=i2c.read(0); |
| capopolito | 2:53521a18c3de | 350 | i2c.stop(); |
| capopolito | 2:53521a18c3de | 351 | printf("SYSMOD_post_lettura: %1.2x \n", sysmod); |
| capopolito | 1:944348c50dd6 | 352 | //controllo sullo stato |
| capopolito | 1:944348c50dd6 | 353 | // se il flag SRC_FF_MT==1 (bit 7) del registro INT_SOURCE |
| capopolito | 2:53521a18c3de | 354 | //if (stato_INT_SOURCE &&0x04 == 0x04) { |
| capopolito | 2:53521a18c3de | 355 | //printf("INT1: %1.2x \n", INT1); |
| capopolito | 2:53521a18c3de | 356 | //printf("INT2: %1.2x \n", INT2); |
| capopolito | 2:53521a18c3de | 357 | wait(0.1f); |
| capopolito | 2:53521a18c3de | 358 | if (sysmod &0x02 ==0x02) { // if SYSMOD1,SYSMOD0 = 1,0 |
| capopolito | 2:53521a18c3de | 359 | wait(0.1f); |
| capopolito | 2:53521a18c3de | 360 | printf("Sto dormendo sono in auto-sleep , SYSMOD: %1.2x \n",sysmod); |
| capopolito | 2:53521a18c3de | 361 | rled = 0.0f; |
| capopolito | 2:53521a18c3de | 362 | gled = 0.0f; |
| capopolito | 2:53521a18c3de | 363 | bled = 0.0f; |
| capopolito | 2:53521a18c3de | 364 | } //chiusra del if |
| capopolito | 2:53521a18c3de | 365 | if (sysmod &0x01 ==0x01){ // if SYSMOD1,SYSMOD0 = 0,1 |
| capopolito | 2:53521a18c3de | 366 | printf("Buongiorno motion and rotation mi hanno sveliato, , SYSMOD: %1.2x \n", sysmod); |
| capopolito | 1:944348c50dd6 | 367 | //lettura degli assi con lettura Single Byte Read |
| capopolito | 1:944348c50dd6 | 368 | // asse x |
| serenabpolito | 0:4317f4b1a4b3 | 369 | i2c.start(); |
| serenabpolito | 0:4317f4b1a4b3 | 370 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| serenabpolito | 0:4317f4b1a4b3 | 371 | i2c.write(OUT_X_MSB); // scrivi l'indirizzo del registro contente l'accelerazione sull'asse X |
| serenabpolito | 0:4317f4b1a4b3 | 372 | i2c.start(); |
| serenabpolito | 0:4317f4b1a4b3 | 373 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 1:944348c50dd6 | 374 | x_axis=i2c.read(0); // scrive bit di NAK (no acknowlodgement) e salva il dato sul bus su x_axis |
| capopolito | 1:944348c50dd6 | 375 | i2c.stop(); |
| capopolito | 1:944348c50dd6 | 376 | // asse y |
| capopolito | 1:944348c50dd6 | 377 | i2c.start(); |
| capopolito | 1:944348c50dd6 | 378 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 1:944348c50dd6 | 379 | i2c.write(OUT_Y_MSB); // scrivi l'indirizzo del registro contente l'accelerazione sull'asse Y |
| capopolito | 1:944348c50dd6 | 380 | i2c.start(); |
| capopolito | 1:944348c50dd6 | 381 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 1:944348c50dd6 | 382 | y_axis=i2c.read(0); // scrive bit di NAK (no acknowlodgement) e salva il dato sul bus su y_axis |
| serenabpolito | 0:4317f4b1a4b3 | 383 | i2c.stop(); |
| capopolito | 1:944348c50dd6 | 384 | // asse Z |
| capopolito | 1:944348c50dd6 | 385 | i2c.start(); |
| capopolito | 1:944348c50dd6 | 386 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 1:944348c50dd6 | 387 | i2c.write(OUT_Z_MSB); // scrivi l'indirizzo del registro contente l'accelerazione sull'asse Z |
| capopolito | 1:944348c50dd6 | 388 | i2c.start(); |
| capopolito | 1:944348c50dd6 | 389 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 1:944348c50dd6 | 390 | z_axis=i2c.read(0); // scrive bit di NAK (no acknowlodgement) e salva il dato sul bus su z_axis |
| capopolito | 1:944348c50dd6 | 391 | i2c.stop(); |
| capopolito | 1:944348c50dd6 | 392 | |
| capopolito | 1:944348c50dd6 | 393 | //accendo led |
| serenabpolito | 0:4317f4b1a4b3 | 394 | rled = 1.0f - x_axis/256; |
| serenabpolito | 0:4317f4b1a4b3 | 395 | gled = 1.0f - y_axis/256; |
| serenabpolito | 0:4317f4b1a4b3 | 396 | bled = 1.0f - z_axis/256; |
| capopolito | 2:53521a18c3de | 397 | //wait(0.1f); |
| capopolito | 1:944348c50dd6 | 398 | //scrivo sulla seriale |
| capopolito | 2:53521a18c3de | 399 | printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n", x_axis/64, y_axis/64, z_axis/64); |
| capopolito | 2:53521a18c3de | 400 | } //chiusura secondo if |
| capopolito | 2:53521a18c3de | 401 | }//chiusura del while |
| capopolito | 2:53521a18c3de | 402 | }//chiusura del main |
| serenabpolito | 0:4317f4b1a4b3 | 403 |
