
Fork of Lab3_latest_21_01_2015_aggiornata by
Diff: main.cpp
- Revision:
- 7:3abddf195ada
- Parent:
- 6:848474d4d02e
--- a/main.cpp Tue Jan 20 23:20:03 2015 +0000 +++ b/main.cpp Sun Feb 08 17:34:52 2015 +0000 @@ -5,10 +5,6 @@ #include "DigitalIn.h" #include "DigitalOut.h" -//--prova-------------------------------------------- -//PinName const INT1 = PTA14 ; //pin interrupt -//PinName const INT2 = PTA15 ; //pin interrupt -//--prova-------------------------------------------- #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) PinName const SDA = PTE25; @@ -34,11 +30,6 @@ //instanzia e inizializza oggettto i2c della clase I2C I2C i2c(SDA,SCL); // SDA I2C data line pin // SCL I2C clock line pin -//--prova------------------------------------------------------------ -//instanzia e inizializza oggetti int1 e int2 della classe DigitalIn -//DigitalIn int1(INT1); //inizializza int1 -//DigitalIn int2(INT2); //inizializza int2 -//--prova------------------------------------------------------------ //instanzia e inizializza oggettto spi della classe SPI @@ -68,7 +59,6 @@ char data = 0x00 ; // inizalizza la variabile data con le impostazioni da scrivere su CTRL_REG_1 //--registri aggiunti e settati per prova ------------------------------------------------------------------ -char CTRL_REG_5 = 0x2E ; //read/write // register address del CTRL_REG_5 char FF_MT_CFG = 0x15; //read/write // registera addres del FF_MT_CFG (Frefall/Motionn Configuration register char FF_MT_THS = 0x17; //read/write // register address del FF_MT_THS Freefall and Motion Threshold char FF_MT_COUNT = 0x18; //read/write //register address del FF_MT_COUNT Debounce Register @@ -178,25 +168,7 @@ i2c.write(data); // scrivi il "data" contenete le impostazioni del ASLP_COUNT i2c.stop(); -//---registri impostati per prova --------------------------------- - - - // setta impostazioni su CTRL_REG_5 - data=0x81; //imposta data con le impostazioni del CTRL_REG_5 attineti alle gestioni dell'interupt nei pin - // vedi data-sheet - //Bit 7-> INT_CFG_ASLP = 1 route the auto-sleep interrupt to INT1 ->vedi AN074 - //Bit 6-> INT_CFG_FIFO = 0 - //Bit 5-> INT_CFG_TRANS = 0 - //Bit 4-> INT_CFG_LNDPRT = 0 - //Bit 3-> INT_CFG_PULSE = 0 route the pulse interrupt to INT2 ->vedi AN074 - //Bit 2-> INT_CFG_FF_MT = 0 route the Motion and Orientation interrupt to INT2 ->vedi AN074 - //Bit 1-> DON'T CARE = 0 - //Bit 0-> INT_CFG_DRDY = 1 route the data-ready interrupt to INT1 ->vedi AN074 - 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(); +//---registri impostati per gestire gli interrupt --------------------------------- // setta impostazioni su FF_MT_CFG (Frefall/Motion Configuration Register (Read/Write) data=0xF8; //imposta data con le impostazioni del FF_MT_SRC attineti quando vogliamo svegliare il dispositivo dal wake @@ -231,7 +203,7 @@ i2c.write(data); // scrivi il "data" contenete le impostazioni del FF_MT_COUNT i2c.stop(); -//---registri impostati per prova --------------------------------- +//---registri impostati per gestire gli interrupt --------------------------------- //!!! attiva il dispositivo (esce da standby) !!! @@ -248,7 +220,7 @@ PwmOut gled(LED2); PwmOut bled(LED3); - //verifica della corretta scrittura dei registri, mediante lettura Single Byte Read + //verifica della corretta scrittura dei principali registri, mediante lettura Single Byte Read //lettura single byte read del registro CTRL_REG_1 char ctrl_reg_1 = 0x00; @@ -260,7 +232,6 @@ ctrl_reg_1=i2c.read(0); i2c.stop(); printf("CTRL_REG_1: %1.2x \n", ctrl_reg_1); // in esadecimale - //lettura single byte read del registro CTRL_REG_2 char ctrl_reg_2 = 0x00; i2c.start(); @@ -271,8 +242,7 @@ ctrl_reg_2=i2c.read(0); i2c.stop(); printf("CTRL_REG_2: %1.2x \n", ctrl_reg_2); //in esadecimale - - //lettura single byte read del registro CTRL_REG_3 + //lettura single byte read del registro CTRL_REG_3 char ctrl_reg_3 = 0x00; i2c.start(); i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura @@ -282,7 +252,6 @@ ctrl_reg_3=i2c.read(0); i2c.stop(); printf("CTRL_REG_3: %1.2x \n", ctrl_reg_3); //in esadecimale - //lettura single byte read del registro CTRL_REG_4 char ctrl_reg_4 = 0x00; i2c.start(); @@ -293,7 +262,6 @@ ctrl_reg_4=i2c.read(0); i2c.stop(); printf("CTRL_REG_4: %1.2x \n", ctrl_reg_4); //in esadecimale - //lettura single byte read del registro ASLP_COUNT char aslp_count = 0x00; i2c.start(); @@ -304,6 +272,7 @@ aslp_count=i2c.read(0); i2c.stop(); printf("ASLP_COUNT: %1.2x \n", aslp_count); //in esadecimale + //verifica della corretta scrittura dei registri principali------------------------------ char sysmod = 0x00; @@ -316,13 +285,11 @@ char command_location=0x00; // in caso di scrittura 1000 DDD - //int int1_value = 0; - //int int2_value = 0; while (true) { printf("SYSMOD_pre_read: %1.2x \n", sysmod); wait(0.1); //lettura dello stato dell'accelerometro wake o sleep - // lettura single Byte Read contenuto di SYSMOD System Mode Register + //lettura single Byte Read contenuto di SYSMOD System Mode Register // Bit 7-> FGERR // Bit 6-> FGT_4 // Bit 5-> FGT_3 @@ -351,37 +318,9 @@ rled = 0.0f; gled = 0.0f; bled = 0.0f; - //---prova------------------------------------------------ - //mette il dispositivo in standby - //setta impostazioni su CTRL_REG_1 - data=0x5A ; // 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(); - //attiva il dispositivo - //setta impostazioni su CTRL_REG_1 - data=0x5B ; // 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(); - //int1_value=int1.read(); - //int2_value=int2.read(); - //printf("INT1_sleep: %1.2d \n",INT1); - //printf("INT2_sleep: %1.2d \n",INT2); - //---prova------------------------------------------------ - + } //chiusra del if if ( (sysmod &0x01) ==0x01){ // if SYSMOD1,SYSMOD0 = 0,1 - //---prova------------------------------------------------- - //int1_value=int1.read; - //int2_value=int2.read; - //printf("INT1_wake: %1.2d \n",INT1); - //printf("INT2_wake: %1.2d \n",INT2); - //---prova------------------------------------------------- wait(0.1f); printf("Good morning! , SYSMOD: %1.2x \n", sysmod); //lettura degli assi con lettura Single Byte Read @@ -414,8 +353,7 @@ gled = 1.0f - y_axis/64; bled = 1.0f - z_axis/64; //scrivo sulla seriale - printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n", x_axis/64, y_axis/64, z_axis/64); - + printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n", x_axis/64, y_axis/64, z_axis/64); //SCRIVO DATI SU DISPLAY A SETTE SEGMENTI DELLA SCHEDA DE2 MEDIANTE SPI //accelerazione sull'asse x x_axis_norm=x_axis/64*99; // normalizzo tra [0 99] @@ -437,6 +375,7 @@ z_unit_ascii = ( '0' + (z_unit) ); // ottengo le unità in ASCII //stampo nella seriale componente x,y,z dell'accelereazione normailzzate tra 0 e 99 + printf("ax_norm: %1.2f, ay_norm: %1.2f, az_norm: %1.2f\n", x_axis_norm, y_axis_norm, z_axis_norm); //stampo nella seriale le decine delle componenti x,y,z dell'accelereazione normailzzate tra 0 e 99 printf("ax_tens: %1.2d, ay_tens: %1.2d, az_tens: %1.2d\n", x_tens, y_tens, z_tens); @@ -446,6 +385,8 @@ printf("ax_tens_ascii: %1.2c, ay_tens_ascii: %1.2c, az_tens_ascii: %1.2c\n", x_tens_ascii, y_tens_ascii, z_tens_ascii); //stampo nella seriale le unità in ascii delle componenti x,y,z dell'accelereazione normailzzate tra 0 e 99 printf("ax_unit_ascii: %1.2c, ay_unit_ascii: %1.2c, az_unit_ascii: %1.2c\n", x_unit_ascii, y_unit_ascii, z_unit_ascii); + + //stampo nella seriale componente x,y,z dell'accelereazione normailzzate tra 0 e 99 //scrivo nei display i valori dell'accelerazione @@ -464,7 +405,6 @@ spi.write(command_location); spi.write(x_unit_ascii); slave_select.write(1); - //componente y dell'accelarazione //scrivo codice ascii delle decine nel display nel display dedicato command_location = ( command_wr | loc_y_tens ); //1000 010 = 0x82 @@ -479,8 +419,7 @@ slave_select.write(0); //asserisco lo slave select attivo basso spi.write(command_location); spi.write(y_unit_ascii); - slave_select.write(1); //nego lo slave select attivo basso - + slave_select.write(1); //nego lo slave select attivo basso //componente z dell'accelarazione //scrivo codice ascii delle decine nel display nel display dedicato command_location = ( command_wr | loc_z_tens ); //1000 100 = 0x84 @@ -496,7 +435,7 @@ spi.write(command_location); spi.write(z_unit_ascii); slave_select.write(1); - + //scrivo nei display i valori dell'accelerazione } //close 2nd if }//close while }//close main