// 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
Revision 1:b54671e37e54, committed 2015-04-24
- Comitter:
- Jamess
- Date:
- Fri Apr 24 12:55:57 2015 +0000
- Parent:
- 0:e59a01f2ebcd
- Child:
- 2:6f5f2342d0a5
- Commit message:
- aGORA COM HEADERS TROCARPARA SPI
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Thu Apr 23 17:41:39 2015 +0000
+++ b/main.cpp Fri Apr 24 12:55:57 2015 +0000
@@ -9,43 +9,208 @@
//DONE:
//Instalação do acc na protoboard.
-
-#include "ADXL345.h"
+#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
-ADXL345 accelerometer(PTD2,PTD3,PTD1,PTD0);//PinName mosi, PinName miso, PinName sck, PinName cs)
+#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
+
+/*----Transmicao----*/
+
+
+SPI spi1(PTD2,PTD3,PTD1); //PTD0);//PinName mosi, PinName miso, PinName sck, PinName cs)
Serial pc(USBTX, USBRX);
DigitalOut PIN(PTA13);
-
+
+/********************---------FUNÇÕES ACELERÔMETRO**********************************/
+//Escrita:
+inline void RegisterWrite(char acc,char address,char data); //Escreve o desejado no acelerômetro acc no endereço tal
+void MultRegisterWrite(char acc,char address,char data); //Faz isso
+
+//Leitura:
+void GetOutputs(void); //Faz aquilo
+void MultRegisterRead(void); //
+void RegisterRead(void);
+/******************************Variáveis Acelerômetro********************************/
+
+bool Acc_CS[10] = {0};
+
+
+/************************************************************************************/
+
int main() {
int readings[3] = {0, 0, 0};
-
- pc.printf("Starting ADXL345 test...\n");
- pc.printf("Device ID is: 0x%02x\n", accelerometer.getDevId());
-
+
//Go into standby mode to configure the device.
- accelerometer.setPowerControl(0x00);
+ // pc.printf("Starting setting the accelerômeters");
+ //accelerometer.setPowerControl(0x00);
//Full resolution, +/-16g, 4mg/LSB.
- accelerometer.setDataFormatControl(0x0B);
+ //accelerometer.setDataFormatControl(0x0B);
//3.2kHz data rate.
- accelerometer.setDataRate(ADXL345_3200HZ);
+ //accelerometer.setDataRate(ADXL345_3200HZ);
//Measurement mode.
- accelerometer.setPowerControl(0x08);
+ //accelerometer.setPowerControl(0x08);
while (1) {
wait(0.1);
- accelerometer.getOutput(readings);
+ //accelerometer.getOutput(readings);
- PIN = '1';
+ PIN = 1;
//13-bit, sign extended values.
- pc.printf("%i, %i, %i\n", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]);
- PIN = '0';
+ // pc.printf("%i, %i, %i\n", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]);
+ PIN = 0;
}
}
-
\ No newline at end of file
+
+void RegisterRead(void){
+
+ 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 RegisterWrite(int address, char data) {
+
+ int tx = (ADXL345_SPI_WRITE | (address & 0x3F));
+
+ PIN = 0; // 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);
+ PIN = 1;
+
+}
+void MultRegisterRead(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 MultRegisterWrite(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;
+
+}
+
+
+
+
+/*===============================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;
+
+}*/
\ No newline at end of file
