// 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-07-13
- Revision:
- 3:56c16ca210d1
- Parent:
- 2:6f5f2342d0a5
File content as of revision 3:56c16ca210d1:
//Arquivo exemplo de se como utilizar a SPI em com a biblioteca do mbed feita por aaron.
//Programa temporario. logo será republicado
//IMPORTANTE:
//OBSERVAÇÃO:
//AILTON:
// 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;
#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;
}*/
