// 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

Dependencies:   ADXL345 mbed

Fork of ADXLHELLOWORD by Thiago .

Committer:
Jamess
Date:
Mon May 04 13:09:52 2015 +0000
Revision:
2:6f5f2342d0a5
Parent:
1:b54671e37e54
Child:
3:56c16ca210d1
Esbo?o da Programa??o de 10 ACC;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jamess 0:e59a01f2ebcd 1 //Arquivo exemplo de se como utilizar a SPI em com a biblioteca do mbed feita por aaron.
Jamess 0:e59a01f2ebcd 2 //Programa temporario. logo será republicado
Jamess 0:e59a01f2ebcd 3
Jamess 0:e59a01f2ebcd 4 // TO do:
Jamess 0:e59a01f2ebcd 5 //Ver o tempo em que leva para realizar cada função.
Jamess 0:e59a01f2ebcd 6 //Trocar o printf pelo putc
Jamess 2:6f5f2342d0a5 7
Jamess 0:e59a01f2ebcd 8 //DONE:
Jamess 0:e59a01f2ebcd 9 //Instalação do acc na protoboard.
Jamess 2:6f5f2342d0a5 10
Jamess 1:b54671e37e54 11 #include "mbed.h"
Jamess 2:6f5f2342d0a5 12
Jamess 1:b54671e37e54 13 /*-------ADXL345-------*/
Jamess 1:b54671e37e54 14
Jamess 1:b54671e37e54 15 // When SDO grounded
Jamess 1:b54671e37e54 16 #define ADXL1_ADDR_WRITE 0xA6
Jamess 1:b54671e37e54 17 #define ADXL1_ADDR_READ 0xA7
Jamess 1:b54671e37e54 18 #define ADXL1_ADDR 0X53
Jamess 1:b54671e37e54 19
Jamess 1:b54671e37e54 20 //When SDO high
Jamess 1:b54671e37e54 21 #define ADXL2_ADDR_WRITE 0x3A
Jamess 1:b54671e37e54 22 #define ADXL2_ADDR_READ 0x3B
Jamess 1:b54671e37e54 23 #define ADXL2_ADDR 0x53
Jamess 1:b54671e37e54 24
Jamess 1:b54671e37e54 25 //Registers
Jamess 0:e59a01f2ebcd 26
Jamess 1:b54671e37e54 27 #define POWER_CTL 0x2D
Jamess 1:b54671e37e54 28 #define DATA_FORMAT 0x31
Jamess 1:b54671e37e54 29 #define DATAX0 0x32 //X
Jamess 1:b54671e37e54 30 #define DATAX1 0x33
Jamess 1:b54671e37e54 31 #define DATAY0 0x34 //Y
Jamess 1:b54671e37e54 32 #define DATAY1 0x35
Jamess 1:b54671e37e54 33 #define DATAZ0 0x36 //Z
Jamess 1:b54671e37e54 34 #define DATAZ1 0x37
Jamess 1:b54671e37e54 35 #define OFSX 0x1D //accelerometer offset calibration
Jamess 1:b54671e37e54 36 #define OFSY 0x1F
Jamess 1:b54671e37e54 37 #define OFSZ 0x20
Jamess 1:b54671e37e54 38 #define BW_RATE 0x2C //define Baudrate
Jamess 1:b54671e37e54 39
Jamess 2:6f5f2342d0a5 40 //SPI Comunication
Jamess 2:6f5f2342d0a5 41 #define ADXL345_SPI_READ 0x80
Jamess 2:6f5f2342d0a5 42 #define ADXL345_SPI_WRITE 0x00
Jamess 2:6f5f2342d0a5 43 #define ADXL345_MULTI_BYTE 0x60
Jamess 2:6f5f2342d0a5 44
Jamess 1:b54671e37e54 45 /*----Transmicao----*/
Jamess 1:b54671e37e54 46
Jamess 2:6f5f2342d0a5 47 #define PORT_MASK_ACC0 002
Jamess 2:6f5f2342d0a5 48 #define PORT_MASK_ACC1 001
Jamess 2:6f5f2342d0a5 49 #define PORT_MASK_ACC2 003
Jamess 2:6f5f2342d0a5 50 #define PORT_MASK_ACC3 005
Jamess 2:6f5f2342d0a5 51 #define PORT_MASK_ACC4 004
Jamess 2:6f5f2342d0a5 52 #define PORT_MASK_ACC5 000
Jamess 2:6f5f2342d0a5 53 #define PORT_MASK_ACC6 000
Jamess 2:6f5f2342d0a5 54 #define PORT_MASK_ACC7 000
Jamess 2:6f5f2342d0a5 55 #define PORT_MASK_ACC8 000
Jamess 2:6f5f2342d0a5 56 #define PORT_MASK_ACC9 000
Jamess 2:6f5f2342d0a5 57 #define CS_ON 001
Jamess 1:b54671e37e54 58
Jamess 2:6f5f2342d0a5 59 /*----Chip Select----*/
Jamess 2:6f5f2342d0a5 60 #define CS_ACC0 PTE31
Jamess 2:6f5f2342d0a5 61 #define CS_ACC1 PTE19
Jamess 2:6f5f2342d0a5 62 #define CS_ACC2 PTE18
Jamess 2:6f5f2342d0a5 63 #define CS_ACC3 PTE17
Jamess 2:6f5f2342d0a5 64 #define CS_ACC4 PTE16
Jamess 2:6f5f2342d0a5 65 #define CS_ACC5 PTE6
Jamess 2:6f5f2342d0a5 66 #define CS_ACC6 PTE3
Jamess 2:6f5f2342d0a5 67 #define CS_ACC7 PTE2
Jamess 2:6f5f2342d0a5 68 #define CS_ACC8 PTE20
Jamess 2:6f5f2342d0a5 69 #define CS_ACC9 PTE21
Jamess 2:6f5f2342d0a5 70
Jamess 2:6f5f2342d0a5 71 SPI spi(PTD2,PTD3,PTD1); //PTD0);//PinName mosi, PinName miso, PinName sck, PinName cs)
Jamess 2:6f5f2342d0a5 72 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
Jamess 0:e59a01f2ebcd 73 Serial pc(USBTX, USBRX);
Jamess 2:6f5f2342d0a5 74 DigitalOut PIN(PTD5);
Jamess 1:b54671e37e54 75
Jamess 1:b54671e37e54 76 /********************---------FUNÇÕES ACELERÔMETRO**********************************/
Jamess 2:6f5f2342d0a5 77
Jamess 1:b54671e37e54 78 //Escrita:
Jamess 2:6f5f2342d0a5 79 void RegisterWrite(char,int,char); //char acelerômetro, int endereço, char dado.
Jamess 1:b54671e37e54 80 void MultRegisterWrite(char acc,char address,char data); //Faz isso
Jamess 1:b54671e37e54 81
Jamess 1:b54671e37e54 82 //Leitura:
Jamess 1:b54671e37e54 83 void GetOutputs(void); //Faz aquilo
Jamess 2:6f5f2342d0a5 84 void MultRegisterRead(int,char*, int); //
Jamess 2:6f5f2342d0a5 85 int RegisterRead(char);
Jamess 1:b54671e37e54 86 /******************************Variáveis Acelerômetro********************************/
Jamess 1:b54671e37e54 87
Jamess 2:6f5f2342d0a5 88
Jamess 1:b54671e37e54 89
Jamess 1:b54671e37e54 90
Jamess 1:b54671e37e54 91 /************************************************************************************/
Jamess 1:b54671e37e54 92
Jamess 0:e59a01f2ebcd 93 int main() {
Jamess 0:e59a01f2ebcd 94
Jamess 0:e59a01f2ebcd 95 int readings[3] = {0, 0, 0};
Jamess 1:b54671e37e54 96
Jamess 0:e59a01f2ebcd 97 //Go into standby mode to configure the device.
Jamess 1:b54671e37e54 98 // pc.printf("Starting setting the accelerômeters");
Jamess 1:b54671e37e54 99 //accelerometer.setPowerControl(0x00);
Jamess 2:6f5f2342d0a5 100 RegisterWrite(PORT_MASK_ACC1,POWER_CTL,0x00);
Jamess 0:e59a01f2ebcd 101 //Full resolution, +/-16g, 4mg/LSB.
Jamess 1:b54671e37e54 102 //accelerometer.setDataFormatControl(0x0B);
Jamess 2:6f5f2342d0a5 103 RegisterWrite(PORT_MASK_ACC1,DATA_FORMAT,0x0B);
Jamess 0:e59a01f2ebcd 104
Jamess 0:e59a01f2ebcd 105 //3.2kHz data rate.
Jamess 1:b54671e37e54 106 //accelerometer.setDataRate(ADXL345_3200HZ);
Jamess 2:6f5f2342d0a5 107 RegisterWrite(PORT_MASK_ACC1,BW_RATE,0x0F);
Jamess 2:6f5f2342d0a5 108
Jamess 0:e59a01f2ebcd 109 //Measurement mode.
Jamess 1:b54671e37e54 110 //accelerometer.setPowerControl(0x08);
Jamess 2:6f5f2342d0a5 111 RegisterWrite(PORT_MASK_ACC1,POWER_CTL,0x08);
Jamess 0:e59a01f2ebcd 112
Jamess 0:e59a01f2ebcd 113 while (1) {
Jamess 0:e59a01f2ebcd 114
Jamess 2:6f5f2342d0a5 115 pc.printf("main");
Jamess 0:e59a01f2ebcd 116
Jamess 1:b54671e37e54 117 PIN = 1;
Jamess 2:6f5f2342d0a5 118
Jamess 1:b54671e37e54 119 PIN = 0;
Jamess 0:e59a01f2ebcd 120 }
Jamess 0:e59a01f2ebcd 121
Jamess 0:e59a01f2ebcd 122 }
Jamess 2:6f5f2342d0a5 123 /*---------------------------FUNÇÕES-------------------------*/
Jamess 1:b54671e37e54 124
Jamess 2:6f5f2342d0a5 125 int RegisterRead(char portMaskRead,char address){
Jamess 1:b54671e37e54 126
Jamess 1:b54671e37e54 127 int tx = (ADXL345_SPI_READ | (address & 0x3F));
Jamess 1:b54671e37e54 128 int rx = 0;
Jamess 1:b54671e37e54 129
Jamess 2:6f5f2342d0a5 130 CS_Accel = portMaskRead;
Jamess 1:b54671e37e54 131 //Send address to read from.
Jamess 2:6f5f2342d0a5 132 spi.write(tx);
Jamess 1:b54671e37e54 133 //Read back contents of address.
Jamess 2:6f5f2342d0a5 134 rx = spi.write(0x00);
Jamess 2:6f5f2342d0a5 135 CS_Accel = CS_ON; //Finishes the comunication putting CS in HIGH
Jamess 1:b54671e37e54 136
Jamess 1:b54671e37e54 137 return rx;
Jamess 1:b54671e37e54 138 }
Jamess 1:b54671e37e54 139
Jamess 2:6f5f2342d0a5 140 void RegisterWrite(char portMaskWrite,int address, char data) {
Jamess 2:6f5f2342d0a5 141
Jamess 2:6f5f2342d0a5 142 //Char acc para definir qual CS será setado
Jamess 1:b54671e37e54 143
Jamess 1:b54671e37e54 144 int tx = (ADXL345_SPI_WRITE | (address & 0x3F));
Jamess 1:b54671e37e54 145
Jamess 2:6f5f2342d0a5 146 CS_Accel = portMaskWrite; // Aqui na verdade vai ficar uma márcara para decidirvários pinos aomesmo tempo
Jamess 1:b54671e37e54 147 //Send address to write to.
Jamess 2:6f5f2342d0a5 148 spi.write(tx);
Jamess 1:b54671e37e54 149 //Send data to be written.
Jamess 2:6f5f2342d0a5 150 spi.write(data);
Jamess 2:6f5f2342d0a5 151 CS_Accel = CS_ON;
Jamess 1:b54671e37e54 152
Jamess 1:b54671e37e54 153 }
Jamess 2:6f5f2342d0a5 154 void MultRegisterRead(char portMaskMRead,int startAddress, char* buffer, int size) {
Jamess 1:b54671e37e54 155
Jamess 1:b54671e37e54 156 int tx = (ADXL345_SPI_READ | ADXL345_MULTI_BYTE | (startAddress & 0x3F));
Jamess 1:b54671e37e54 157
Jamess 2:6f5f2342d0a5 158 CS_Accel = portMaskMRead;
Jamess 1:b54671e37e54 159 //Send address to start reading from.
Jamess 2:6f5f2342d0a5 160 spi.write(tx);
Jamess 1:b54671e37e54 161
Jamess 1:b54671e37e54 162 for (int i = 0; i < size; i++) {
Jamess 2:6f5f2342d0a5 163 buffer[i] = spi.write(0x00);
Jamess 1:b54671e37e54 164 }
Jamess 1:b54671e37e54 165
Jamess 2:6f5f2342d0a5 166 CS_Accel = CS_ON;
Jamess 1:b54671e37e54 167
Jamess 1:b54671e37e54 168 }
Jamess 1:b54671e37e54 169
Jamess 2:6f5f2342d0a5 170 void MultRegisterWrite(char portMaskMWrite, int startAddress, char* buffer, int size) {
Jamess 1:b54671e37e54 171
Jamess 1:b54671e37e54 172 int tx = (ADXL345_SPI_WRITE | ADXL345_MULTI_BYTE | (startAddress & 0x3F));
Jamess 1:b54671e37e54 173
Jamess 2:6f5f2342d0a5 174 CS_Accel = portMaskMWrite;
Jamess 1:b54671e37e54 175 //Send address to start reading from.
Jamess 2:6f5f2342d0a5 176 spi.write(tx);
Jamess 1:b54671e37e54 177
Jamess 1:b54671e37e54 178 for (int i = 0; i < size; i++) {
Jamess 2:6f5f2342d0a5 179 buffer[i] = spi.write(0x00);
Jamess 1:b54671e37e54 180 }
Jamess 1:b54671e37e54 181
Jamess 2:6f5f2342d0a5 182 CS_Accel = portMaskMWrite;
Jamess 1:b54671e37e54 183
Jamess 1:b54671e37e54 184 }
Jamess 1:b54671e37e54 185
Jamess 2:6f5f2342d0a5 186 void GetOutput(void){
Jamess 2:6f5f2342d0a5 187 //Lê Acelerômetro 1
Jamess 2:6f5f2342d0a5 188 //Lê Acelerômetro 2
Jamess 2:6f5f2342d0a5 189 //Lê Acelerômetro 3
Jamess 2:6f5f2342d0a5 190 //Lê Acelerômetro 4
Jamess 2:6f5f2342d0a5 191 //Lê Acelerômetro 5
Jamess 2:6f5f2342d0a5 192 //Lê Acelerômetro 6
Jamess 2:6f5f2342d0a5 193 //Lê Acelerômetro 7
Jamess 2:6f5f2342d0a5 194 //Lê Acelerômetro 8
Jamess 2:6f5f2342d0a5 195 //Lê Acelerômetro 9
Jamess 2:6f5f2342d0a5 196 //Lê Acelerômetro 10
Jamess 2:6f5f2342d0a5 197 }
Jamess 1:b54671e37e54 198
Jamess 1:b54671e37e54 199
Jamess 1:b54671e37e54 200 /*===============================FUNCOES COPIADAS======================================*/
Jamess 1:b54671e37e54 201 /*int ADXL345::oneByteRead(int address) {
Jamess 1:b54671e37e54 202
Jamess 1:b54671e37e54 203 int tx = (ADXL345_SPI_READ | (address & 0x3F));
Jamess 1:b54671e37e54 204 int rx = 0;
Jamess 1:b54671e37e54 205
Jamess 1:b54671e37e54 206 PIN = 0;
Jamess 1:b54671e37e54 207 //Send address to read from.
Jamess 1:b54671e37e54 208 spi_.write(tx);
Jamess 1:b54671e37e54 209 //Read back contents of address.
Jamess 1:b54671e37e54 210 rx = spi_.write(0x00);
Jamess 1:b54671e37e54 211 PIN = 1;
Jamess 1:b54671e37e54 212
Jamess 1:b54671e37e54 213 return rx;
Jamess 1:b54671e37e54 214
Jamess 1:b54671e37e54 215 }
Jamess 1:b54671e37e54 216
Jamess 1:b54671e37e54 217 void ADXL345::oneByteWrite(int address, char data) {
Jamess 1:b54671e37e54 218
Jamess 1:b54671e37e54 219 int tx = (ADXL345_SPI_WRITE | (address & 0x3F));
Jamess 1:b54671e37e54 220
Jamess 1:b54671e37e54 221 PIN = 0;
Jamess 1:b54671e37e54 222 //Send address to write to.
Jamess 1:b54671e37e54 223 spi_.write(tx);
Jamess 1:b54671e37e54 224 //Send data to be written.
Jamess 1:b54671e37e54 225 spi_.write(data);
Jamess 1:b54671e37e54 226 PIN = 1;
Jamess 1:b54671e37e54 227
Jamess 1:b54671e37e54 228 }
Jamess 1:b54671e37e54 229
Jamess 1:b54671e37e54 230 void ADXL345::multiByteRead(int startAddress, char* buffer, int size) {
Jamess 1:b54671e37e54 231
Jamess 1:b54671e37e54 232 int tx = (ADXL345_SPI_READ | ADXL345_MULTI_BYTE | (startAddress & 0x3F));
Jamess 1:b54671e37e54 233
Jamess 1:b54671e37e54 234 PIN = 0;
Jamess 1:b54671e37e54 235 //Send address to start reading from.
Jamess 1:b54671e37e54 236 spi_.write(tx);
Jamess 1:b54671e37e54 237
Jamess 1:b54671e37e54 238 for (int i = 0; i < size; i++) {
Jamess 1:b54671e37e54 239 buffer[i] = spi_.write(0x00);
Jamess 1:b54671e37e54 240 }
Jamess 1:b54671e37e54 241
Jamess 1:b54671e37e54 242 PIN = 1;
Jamess 1:b54671e37e54 243
Jamess 1:b54671e37e54 244 }
Jamess 1:b54671e37e54 245
Jamess 1:b54671e37e54 246 void ADXL345::multiByteWrite(int startAddress, char* buffer, int size) {
Jamess 1:b54671e37e54 247
Jamess 1:b54671e37e54 248 int tx = (ADXL345_SPI_WRITE | ADXL345_MULTI_BYTE | (startAddress & 0x3F));
Jamess 1:b54671e37e54 249
Jamess 1:b54671e37e54 250 PIN = 0;
Jamess 1:b54671e37e54 251 //Send address to start reading from.
Jamess 1:b54671e37e54 252 spi_.write(tx);
Jamess 1:b54671e37e54 253
Jamess 1:b54671e37e54 254 for (int i = 0; i < size; i++) {
Jamess 1:b54671e37e54 255 buffer[i] = spi_.write(0x00);
Jamess 1:b54671e37e54 256 }
Jamess 1:b54671e37e54 257
Jamess 1:b54671e37e54 258 PIN = 1;
Jamess 1:b54671e37e54 259
Jamess 1:b54671e37e54 260 }*/