// 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 Jul 13 17:35:01 2015 +0000
Revision:
3:56c16ca210d1
Parent:
2:6f5f2342d0a5
// 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;

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