// Esse programa ainda não foi testado. // É uma adaptação para utilizar vários acelerômetros utilizando a classe // BUSOUT ligado no CS dos acelerômetros; //Baseado na biblioteca de aaronn berek
Fork of ADXLHELLOWORD by
Diff: main.cpp
- Revision:
- 2:6f5f2342d0a5
- Parent:
- 1:b54671e37e54
- Child:
- 3:56c16ca210d1
--- a/main.cpp Fri Apr 24 12:55:57 2015 +0000 +++ b/main.cpp Mon May 04 13:09:52 2015 +0000 @@ -2,14 +2,14 @@ //Programa temporario. logo será republicado // TO do: - //Verificar se é possível utilizar esta biblioteca para se comunicar com vários acelerômetros-> Provavelmente não; //Ver o tempo em que leva para realizar cada função. //Trocar o printf pelo putc - //Sair da biblioteca... na verdade... Não permite muita coisa.. - + //DONE: //Instalação do acc na protoboard. + #include "mbed.h" + /*-------ADXL345-------*/ // When SDO grounded @@ -37,25 +37,55 @@ #define OFSZ 0x20 #define BW_RATE 0x2C //define Baudrate +//SPI Comunication +#define ADXL345_SPI_READ 0x80 +#define ADXL345_SPI_WRITE 0x00 +#define ADXL345_MULTI_BYTE 0x60 + /*----Transmicao----*/ +#define PORT_MASK_ACC0 002 +#define PORT_MASK_ACC1 001 +#define PORT_MASK_ACC2 003 +#define PORT_MASK_ACC3 005 +#define PORT_MASK_ACC4 004 +#define PORT_MASK_ACC5 000 +#define PORT_MASK_ACC6 000 +#define PORT_MASK_ACC7 000 +#define PORT_MASK_ACC8 000 +#define PORT_MASK_ACC9 000 +#define CS_ON 001 -SPI spi1(PTD2,PTD3,PTD1); //PTD0);//PinName mosi, PinName miso, PinName sck, PinName cs) +/*----Chip Select----*/ +#define CS_ACC0 PTE31 +#define CS_ACC1 PTE19 +#define CS_ACC2 PTE18 +#define CS_ACC3 PTE17 +#define CS_ACC4 PTE16 +#define CS_ACC5 PTE6 +#define CS_ACC6 PTE3 +#define CS_ACC7 PTE2 +#define CS_ACC8 PTE20 +#define CS_ACC9 PTE21 + +SPI spi(PTD2,PTD3,PTD1); //PTD0);//PinName mosi, PinName miso, PinName sck, PinName cs) +BusOut CS_Accel(CS_ACC0,CS_ACC1,CS_ACC2,CS_ACC3,CS_ACC4,CS_ACC5,CS_ACC6,CS_ACC7,CS_ACC8,CS_ACC9); //NA PLACA 46z Serial pc(USBTX, USBRX); -DigitalOut PIN(PTA13); +DigitalOut PIN(PTD5); /********************---------FUNÇÕES ACELERÔMETRO**********************************/ + //Escrita: -inline void RegisterWrite(char acc,char address,char data); //Escreve o desejado no acelerômetro acc no endereço tal +void RegisterWrite(char,int,char); //char acelerômetro, int endereço, char dado. void MultRegisterWrite(char acc,char address,char data); //Faz isso //Leitura: void GetOutputs(void); //Faz aquilo -void MultRegisterRead(void); // -void RegisterRead(void); +void MultRegisterRead(int,char*, int); // +int RegisterRead(char); /******************************Variáveis Acelerômetro********************************/ -bool Acc_CS[10] = {0}; + /************************************************************************************/ @@ -67,90 +97,104 @@ //Go into standby mode to configure the device. // pc.printf("Starting setting the accelerômeters"); //accelerometer.setPowerControl(0x00); - + RegisterWrite(PORT_MASK_ACC1,POWER_CTL,0x00); //Full resolution, +/-16g, 4mg/LSB. //accelerometer.setDataFormatControl(0x0B); + RegisterWrite(PORT_MASK_ACC1,DATA_FORMAT,0x0B); //3.2kHz data rate. //accelerometer.setDataRate(ADXL345_3200HZ); - + RegisterWrite(PORT_MASK_ACC1,BW_RATE,0x0F); + //Measurement mode. //accelerometer.setPowerControl(0x08); + RegisterWrite(PORT_MASK_ACC1,POWER_CTL,0x08); while (1) { - - wait(0.1); - //accelerometer.getOutput(readings); + pc.printf("main"); PIN = 1; - //13-bit, sign extended values. - // pc.printf("%i, %i, %i\n", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]); + PIN = 0; } } +/*---------------------------FUNÇÕES-------------------------*/ -void RegisterRead(void){ +int RegisterRead(char portMaskRead,char address){ int tx = (ADXL345_SPI_READ | (address & 0x3F)); int rx = 0; - PIN = 0; + CS_Accel = portMaskRead; //Send address to read from. - spi_.write(tx); + spi.write(tx); //Read back contents of address. - rx = spi_.write(0x00); - PIN = 1; + rx = spi.write(0x00); + CS_Accel = CS_ON; //Finishes the comunication putting CS in HIGH return rx; } -void RegisterWrite(int address, char data) { +void RegisterWrite(char portMaskWrite,int address, char data) { + + //Char acc para definir qual CS será setado int tx = (ADXL345_SPI_WRITE | (address & 0x3F)); - PIN = 0; // Aqui na verdade vai ficar uma márcara para decidirvários pinos aomesmo tempo + CS_Accel = portMaskWrite; // Aqui na verdade vai ficar uma márcara para decidirvários pinos aomesmo tempo //Send address to write to. - spi_.write(tx); + spi.write(tx); //Send data to be written. - spi_.write(data); - PIN = 1; + spi.write(data); + CS_Accel = CS_ON; } -void MultRegisterRead(int startAddress, char* buffer, int size) { +void MultRegisterRead(char portMaskMRead,int startAddress, char* buffer, int size) { int tx = (ADXL345_SPI_READ | ADXL345_MULTI_BYTE | (startAddress & 0x3F)); - PIN = 0; + CS_Accel = portMaskMRead; //Send address to start reading from. - spi_.write(tx); + spi.write(tx); for (int i = 0; i < size; i++) { - buffer[i] = spi_.write(0x00); + buffer[i] = spi.write(0x00); } - PIN = 1; + CS_Accel = CS_ON; } -void MultRegisterWrite(int startAddress, char* buffer, int size) { +void MultRegisterWrite(char portMaskMWrite, int startAddress, char* buffer, int size) { int tx = (ADXL345_SPI_WRITE | ADXL345_MULTI_BYTE | (startAddress & 0x3F)); - PIN = 0; + CS_Accel = portMaskMWrite; //Send address to start reading from. - spi_.write(tx); + spi.write(tx); for (int i = 0; i < size; i++) { - buffer[i] = spi_.write(0x00); + buffer[i] = spi.write(0x00); } - PIN = 1; + CS_Accel = portMaskMWrite; } - +void GetOutput(void){ + //Lê Acelerômetro 1 + //Lê Acelerômetro 2 + //Lê Acelerômetro 3 + //Lê Acelerômetro 4 + //Lê Acelerômetro 5 + //Lê Acelerômetro 6 + //Lê Acelerômetro 7 + //Lê Acelerômetro 8 + //Lê Acelerômetro 9 + //Lê Acelerômetro 10 +} /*===============================FUNCOES COPIADAS======================================*/