Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 | }*/ |
