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_latest_21_01_2015_aggiornata by
Revision 7:3abddf195ada, committed 2015-02-08
- Comitter:
- capopolito
- Date:
- Sun Feb 08 17:34:52 2015 +0000
- Parent:
- 6:848474d4d02e
- Commit message:
- Questa ? la versione definitiva del codice dei Lab2_I2C e Lab3_SPI
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- 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