// 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
main.cpp
- Committer:
- Jamess
- Date:
- 2015-05-04
- Revision:
- 2:6f5f2342d0a5
- Parent:
- 1:b54671e37e54
- Child:
- 3:56c16ca210d1
File content as of revision 2:6f5f2342d0a5:
//Arquivo exemplo de se como utilizar a SPI em com a biblioteca do mbed feita por aaron. //Programa temporario. logo será republicado // TO do: //Ver o tempo em que leva para realizar cada função. //Trocar o printf pelo putc //DONE: //Instalação do acc na protoboard. #include "mbed.h" /*-------ADXL345-------*/ // When SDO grounded #define ADXL1_ADDR_WRITE 0xA6 #define ADXL1_ADDR_READ 0xA7 #define ADXL1_ADDR 0X53 //When SDO high #define ADXL2_ADDR_WRITE 0x3A #define ADXL2_ADDR_READ 0x3B #define ADXL2_ADDR 0x53 //Registers #define POWER_CTL 0x2D #define DATA_FORMAT 0x31 #define DATAX0 0x32 //X #define DATAX1 0x33 #define DATAY0 0x34 //Y #define DATAY1 0x35 #define DATAZ0 0x36 //Z #define DATAZ1 0x37 #define OFSX 0x1D //accelerometer offset calibration #define OFSY 0x1F #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 /*----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(PTD5); /********************---------FUNÇÕES ACELERÔMETRO**********************************/ //Escrita: 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(int,char*, int); // int RegisterRead(char); /******************************Variáveis Acelerômetro********************************/ /************************************************************************************/ int main() { int readings[3] = {0, 0, 0}; //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) { pc.printf("main"); PIN = 1; PIN = 0; } } /*---------------------------FUNÇÕES-------------------------*/ int RegisterRead(char portMaskRead,char address){ int tx = (ADXL345_SPI_READ | (address & 0x3F)); int rx = 0; CS_Accel = portMaskRead; //Send address to read from. spi.write(tx); //Read back contents of address. rx = spi.write(0x00); CS_Accel = CS_ON; //Finishes the comunication putting CS in HIGH return rx; } void RegisterWrite(char portMaskWrite,int address, char data) { //Char acc para definir qual CS será setado int tx = (ADXL345_SPI_WRITE | (address & 0x3F)); 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); //Send data to be written. spi.write(data); CS_Accel = CS_ON; } void MultRegisterRead(char portMaskMRead,int startAddress, char* buffer, int size) { int tx = (ADXL345_SPI_READ | ADXL345_MULTI_BYTE | (startAddress & 0x3F)); CS_Accel = portMaskMRead; //Send address to start reading from. spi.write(tx); for (int i = 0; i < size; i++) { buffer[i] = spi.write(0x00); } CS_Accel = CS_ON; } void MultRegisterWrite(char portMaskMWrite, int startAddress, char* buffer, int size) { int tx = (ADXL345_SPI_WRITE | ADXL345_MULTI_BYTE | (startAddress & 0x3F)); CS_Accel = portMaskMWrite; //Send address to start reading from. spi.write(tx); for (int i = 0; i < size; i++) { buffer[i] = spi.write(0x00); } 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======================================*/ /*int ADXL345::oneByteRead(int address) { int tx = (ADXL345_SPI_READ | (address & 0x3F)); int rx = 0; PIN = 0; //Send address to read from. spi_.write(tx); //Read back contents of address. rx = spi_.write(0x00); PIN = 1; return rx; } void ADXL345::oneByteWrite(int address, char data) { int tx = (ADXL345_SPI_WRITE | (address & 0x3F)); PIN = 0; //Send address to write to. spi_.write(tx); //Send data to be written. spi_.write(data); PIN = 1; } void ADXL345::multiByteRead(int startAddress, char* buffer, int size) { int tx = (ADXL345_SPI_READ | ADXL345_MULTI_BYTE | (startAddress & 0x3F)); PIN = 0; //Send address to start reading from. spi_.write(tx); for (int i = 0; i < size; i++) { buffer[i] = spi_.write(0x00); } PIN = 1; } void ADXL345::multiByteWrite(int startAddress, char* buffer, int size) { int tx = (ADXL345_SPI_WRITE | ADXL345_MULTI_BYTE | (startAddress & 0x3F)); PIN = 0; //Send address to start reading from. spi_.write(tx); for (int i = 0; i < size; i++) { buffer[i] = spi_.write(0x00); } PIN = 1; }*/