
Fork of Lab3_latest_21_01_2015_aggiornata by
Diff: main.cpp
- Revision:
- 4:c40acfb63133
- Parent:
- 3:f8f4a33c7aa2
- Child:
- 5:bc92e421d5f8
--- a/main.cpp Tue Jan 20 11:09:06 2015 +0000 +++ b/main.cpp Tue Jan 20 23:03:39 2015 +0000 @@ -3,6 +3,7 @@ #include "I2C.h" #include "SPI.h" #include "DigitalIn.h" +#include "DigitalOut.h" //--prova-------------------------------------------- //PinName const INT1 = PTA14 ; //pin interrupt @@ -35,11 +36,16 @@ // 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 +//DigitalIn int1(INT1); //inizializza int1 +//DigitalIn int2(INT2); //inizializza int2 //--prova------------------------------------------------------------ +//instanzia e inizializza oggettto spi della classe SPI +SPI spi(mosi,miso,sck); +DigitalOut slave_select(pcs0,1); //inizializza slave-select +//------------------------------------------------------- + //registri da impostare char CTRL_REG_1 = 0x2A ; //read/write // register address del CTRL_REG_1 char CTRL_REG_2 = 0x2B ; //read/write // register address del CTRL_REG_2 @@ -51,8 +57,14 @@ char XYZ_DATA_CFG = 0x0E; //read/write // register address del XYZ_DATA_CFG char ASLP_COUNT= 0x29; //read/write // register address SLEEP TIME-OUT COUNTER char SYSMOD = 0x0B; //read only // register address SYSMOD System Mode Register +//registri da impostare------------------------------------------------------------------- + +//-indirizzo del dipositivo con l'ultimo bit asserito per la lettura e negato per la scrittura 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) +//------------------------------------------------------------------------------------------------ + +//--variabile di appoggio utilizzata per scrivere e leggere i registri char data = 0x00 ; // inizalizza la variabile data con le impostazioni da scrivere su CTRL_REG_1 //--registri aggiunti e settati per prova ------------------------------------------------------------------ @@ -64,9 +76,18 @@ int main(void) { - printf("inizio \n"); - //impostazione dei registri con scrittura Single Byte Write + printf("inizio \n"); + //--setting delle impostazioni del SPI in base alle specifiche------------------ + int bits = 8; + int mode = 1; + spi.format(bits,mode);//definisce formato spi con 16 bit e pol=0 e pha=1 + //di default la frequenza è 1MHz + char command_wr=0x80; //comando per la scrittura (10000DDD), di default nella locazione DDD=000 + //int command_rd=0; //comando per la lettura (00000DDD), dib default nella locazione DDD=000 + //non utilizzato ! + //--setting delle impostazioni della SPI come da specifiche------------------------ + //impostazione dei registri dell'I2C con scrittura Single Byte Write // setta impostazioni su CTRL_REG_1 data = 0x58 ; // setta la variabile data con le impostazioni da scrivere su CTRL_REG_1 //Bit 7-> ASLP_RATE1 = 0 @@ -148,7 +169,7 @@ i2c.stop(); //setta impostazioni su ASLP_COUNT - data=0x0F; //->impostato da me valore max + data=0xF0; //->impostato da me valore max //data=0x01; //impostato da me valore min //data=0x04; //imposta data con le impostazioni del ASLP_COUNT -> impostato dal professore!!! i2c.start(); // dai lo start @@ -285,7 +306,16 @@ printf("ASLP_COUNT: %1.2x \n", aslp_count); //in esadecimale char sysmod = 0x00; - float x_axis, y_axis, z_axis; + + float x_axis, y_axis, z_axis; + float x_axis_norm, y_axis_norm, z_axis_norm; + int x_tens, x_unit, y_tens, y_unit, z_tens, z_unit; + char x_tens_ascii, x_unit_ascii, y_tens_ascii, y_unit_ascii, z_tens_ascii, z_unit_ascii; + char loc_x_tens=0x00, loc_x_unit=0x01, loc_y_tens=0x02, loc_y_unit=0x03, loc_z_tens=0x04, loc_z_unit=0x05; + //location DDD=000, DDD=001, DDD=010, DDD=011, DDD=100, DDD=101; + + char command_location=0x00; // in caso di scrittura 1000 DDD + //int int1_value = 0; //int int2_value = 0; while (true) { @@ -380,38 +410,93 @@ z_axis=i2c.read(0); // scrive bit di NAK (non acknowlodgement) e salva il dato sul bus su z_axis i2c.stop(); //accendo led - rled = 1.0f - x_axis/256; - gled = 1.0f - y_axis/256; - bled = 1.0f - z_axis/256; + rled = 1.0f - x_axis/64; + 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); - //SCRIVO DATI SU DISPLAY A SETTE SEGMENTI MEDIANTE SPI - //comunicazione con SPI - int bits = 8; - int mode = 1; - spi.format(bits,mode);//definisce formato spi con 16 bit e pol=0 e pha=1 - //di default la frequenza è 1MHz - - char character; - char lettura; - int i; - while(1) - { - int command_wr=128; //comando per la scrittura (10000DDD), di default nella locazione DDD=000 - //int command_rd=0; //comando per la lettura (00000DDD), dib default nella locazione DDD=000 - //for(i=0;i<7;i++) - //{ - //character=(char)(65+i); - //scrittura - slave_select.write(0); - spi.write(133); - spi.write(3); - slave_select.write(1); - printf("Carattere in ingresso %c\n",character); - //command_wr++; - // } + //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] + x_tens = (int(x_axis_norm/10)); // ottengo le decine + x_unit = (x_axis_norm-10*x_tens); // ottengo le unità + x_tens_ascii = ( '0' + (x_tens) ); // ottengo le decine in ASCII + x_unit_ascii = ( '0' + (x_unit) ); // ottengo le unità in ASCII + //accelerazione sull'asse y + y_axis_norm=y_axis/64*99; // normalizzo tra [0 99] + y_tens = (int(y_axis_norm/10)); // ottengo le decine + y_unit = (y_axis_norm-10*y_tens); // ottengo le unità + y_tens_ascii = ( '0' + (y_tens) ); // ottengo le decine in ASCII + y_unit_ascii = ( '0' + (y_unit) ); // ottengo le unità in ASCII + //accelerazione sull'asse z + z_axis_norm=z_axis/64*99; // normalizzo tra [0 99] + z_tens = (int(z_axis_norm/10)); // ottengo le decine + z_unit = (z_axis_norm-10*z_tens); // ottengo le unità + z_tens_ascii = ( '0' + (z_tens) ); // ottengo le decine in ASCII + 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); + //stampo nella seriale le unità delle componenti x,y,z dell'accelereazione normailzzate tra 0 e 99 + printf("ax_unit: %1.2d, ay_unit: %1.2d, az_unit: %1.2d\n", x_unit, y_unit, z_unit); + //stampo nella seriale le decine in ascii delle componenti x,y,z dell'accelereazione normailzzate tra 0 e 99 + 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); + + //scrivo nei display i valori dell'accelerazione + //componente x dell'accelarazione + //scrivo codice ascii delle decine nel display nel display dedicato + //command_location = char ( (command_wr) + int(loc_tens_x) ) ; //1000 000 = 0x80 + command_location = 0x80; + slave_select.write(0); + spi.write(command_location); + spi.write(x_tens_ascii); + slave_select.write(1); + //scrivo codice ascii delle unità nel display nel display dedicato + //command_location = command_wr + loc_unit_x ; //1000 001 = 0x81 + command_location = 0x81; + slave_select.write(0); + 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_tens_y ; //1000 010 = 0x82 + command_location = 0x82; + slave_select.write(0); //asserisco lo slave select attivo basso + spi.write(command_location); + spi.write(y_tens_ascii); + slave_select.write(1); //nego lo slave select attivo basso + //scrivo codice ascii delle unità nel display nel display dedicato + //command_location = command_wr + loc_unit_y ; //1000 011 = 0x83 + command_location = 0x83; + 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 + + //componente z dell'accelarazione + //scrivo codice ascii delle decine nel display nel display dedicato + //command_location = command_wr + loc_tens_z ; //1000 100 = 0x84 + command_location = 0x84; + slave_select.write(0); //asserisco lo slave select attivo basso + spi.write(command_location); + spi.write(z_tens_ascii); + slave_select.write(1); //nego lo slave select attivo basso + //scrivo codice ascii delle unità nel display nel display dedicato + //command_location = command_wr + loc_unit_z ; //1000 101 = 0x85 + command_location = 0x85; + slave_select.write(0); + spi.write(command_location); + spi.write(z_unit_ascii); + slave_select.write(1); + } //close 2nd if }//close while }//close main