// 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@3:56c16ca210d1, 2015-07-13 (annotated)
- 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?
User | Revision | Line number | New 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 | }*/ |