// 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 2:6f5f2342d0a5, committed 2015-05-04
- Comitter:
- Jamess
- Date:
- Mon May 04 13:09:52 2015 +0000
- Parent:
- 1:b54671e37e54
- Child:
- 3:56c16ca210d1
- Commit message:
- Esbo?o da Programa??o de 10 ACC;
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Fri Apr 24 12:55:57 2015 +0000
+++ b/main.cpp Mon May 04 13:09:52 2015 +0000
@@ -2,14 +2,14 @@
//Programa temporario. logo será republicado
// TO do:
- //Verificar se é possível utilizar esta biblioteca para se comunicar com vários acelerômetros-> Provavelmente não;
//Ver o tempo em que leva para realizar cada função.
//Trocar o printf pelo putc
- //Sair da biblioteca... na verdade... Não permite muita coisa..
-
+
//DONE:
//Instalação do acc na protoboard.
+
#include "mbed.h"
+
/*-------ADXL345-------*/
// When SDO grounded
@@ -37,25 +37,55 @@
#define OFSZ 0x20
#define BW_RATE 0x2C //define Baudrate
+//SPI Comunication
+#define ADXL345_SPI_READ 0x80
+#define ADXL345_SPI_WRITE 0x00
+#define ADXL345_MULTI_BYTE 0x60
+
/*----Transmicao----*/
+#define PORT_MASK_ACC0 002
+#define PORT_MASK_ACC1 001
+#define PORT_MASK_ACC2 003
+#define PORT_MASK_ACC3 005
+#define PORT_MASK_ACC4 004
+#define PORT_MASK_ACC5 000
+#define PORT_MASK_ACC6 000
+#define PORT_MASK_ACC7 000
+#define PORT_MASK_ACC8 000
+#define PORT_MASK_ACC9 000
+#define CS_ON 001
-SPI spi1(PTD2,PTD3,PTD1); //PTD0);//PinName mosi, PinName miso, PinName sck, PinName cs)
+/*----Chip Select----*/
+#define CS_ACC0 PTE31
+#define CS_ACC1 PTE19
+#define CS_ACC2 PTE18
+#define CS_ACC3 PTE17
+#define CS_ACC4 PTE16
+#define CS_ACC5 PTE6
+#define CS_ACC6 PTE3
+#define CS_ACC7 PTE2
+#define CS_ACC8 PTE20
+#define CS_ACC9 PTE21
+
+SPI spi(PTD2,PTD3,PTD1); //PTD0);//PinName mosi, PinName miso, PinName sck, PinName cs)
+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
Serial pc(USBTX, USBRX);
-DigitalOut PIN(PTA13);
+DigitalOut PIN(PTD5);
/********************---------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 RegisterWrite(char,int,char); //char acelerômetro, int endereço, char dado.
void MultRegisterWrite(char acc,char address,char data); //Faz isso
//Leitura:
void GetOutputs(void); //Faz aquilo
-void MultRegisterRead(void); //
-void RegisterRead(void);
+void MultRegisterRead(int,char*, int); //
+int RegisterRead(char);
/******************************Variáveis Acelerômetro********************************/
-bool Acc_CS[10] = {0};
+
/************************************************************************************/
@@ -67,90 +97,104 @@
//Go into standby mode to configure the device.
// pc.printf("Starting setting the accelerômeters");
//accelerometer.setPowerControl(0x00);
-
+ RegisterWrite(PORT_MASK_ACC1,POWER_CTL,0x00);
//Full resolution, +/-16g, 4mg/LSB.
//accelerometer.setDataFormatControl(0x0B);
+ RegisterWrite(PORT_MASK_ACC1,DATA_FORMAT,0x0B);
//3.2kHz data rate.
//accelerometer.setDataRate(ADXL345_3200HZ);
-
+ RegisterWrite(PORT_MASK_ACC1,BW_RATE,0x0F);
+
//Measurement mode.
//accelerometer.setPowerControl(0x08);
+ RegisterWrite(PORT_MASK_ACC1,POWER_CTL,0x08);
while (1) {
-
- wait(0.1);
- //accelerometer.getOutput(readings);
+ pc.printf("main");
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;
}
}
+/*---------------------------FUNÇÕES-------------------------*/
-void RegisterRead(void){
+int RegisterRead(char portMaskRead,char address){
int tx = (ADXL345_SPI_READ | (address & 0x3F));
int rx = 0;
- PIN = 0;
+ CS_Accel = portMaskRead;
//Send address to read from.
- spi_.write(tx);
+ spi.write(tx);
//Read back contents of address.
- rx = spi_.write(0x00);
- PIN = 1;
+ rx = spi.write(0x00);
+ CS_Accel = CS_ON; //Finishes the comunication putting CS in HIGH
return rx;
}
-void RegisterWrite(int address, char data) {
+void RegisterWrite(char portMaskWrite,int address, char data) {
+
+ //Char acc para definir qual CS será setado
int tx = (ADXL345_SPI_WRITE | (address & 0x3F));
- PIN = 0; // Aqui na verdade vai ficar uma márcara para decidirvários pinos aomesmo tempo
+ CS_Accel = portMaskWrite; // Aqui na verdade vai ficar uma márcara para decidirvários pinos aomesmo tempo
//Send address to write to.
- spi_.write(tx);
+ spi.write(tx);
//Send data to be written.
- spi_.write(data);
- PIN = 1;
+ spi.write(data);
+ CS_Accel = CS_ON;
}
-void MultRegisterRead(int startAddress, char* buffer, int size) {
+void MultRegisterRead(char portMaskMRead,int startAddress, char* buffer, int size) {
int tx = (ADXL345_SPI_READ | ADXL345_MULTI_BYTE | (startAddress & 0x3F));
- PIN = 0;
+ CS_Accel = portMaskMRead;
//Send address to start reading from.
- spi_.write(tx);
+ spi.write(tx);
for (int i = 0; i < size; i++) {
- buffer[i] = spi_.write(0x00);
+ buffer[i] = spi.write(0x00);
}
- PIN = 1;
+ CS_Accel = CS_ON;
}
-void MultRegisterWrite(int startAddress, char* buffer, int size) {
+void MultRegisterWrite(char portMaskMWrite, int startAddress, char* buffer, int size) {
int tx = (ADXL345_SPI_WRITE | ADXL345_MULTI_BYTE | (startAddress & 0x3F));
- PIN = 0;
+ CS_Accel = portMaskMWrite;
//Send address to start reading from.
- spi_.write(tx);
+ spi.write(tx);
for (int i = 0; i < size; i++) {
- buffer[i] = spi_.write(0x00);
+ buffer[i] = spi.write(0x00);
}
- PIN = 1;
+ CS_Accel = portMaskMWrite;
}
-
+void GetOutput(void){
+ //Lê Acelerômetro 1
+ //Lê Acelerômetro 2
+ //Lê Acelerômetro 3
+ //Lê Acelerômetro 4
+ //Lê Acelerômetro 5
+ //Lê Acelerômetro 6
+ //Lê Acelerômetro 7
+ //Lê Acelerômetro 8
+ //Lê Acelerômetro 9
+ //Lê Acelerômetro 10
+}
/*===============================FUNCOES COPIADAS======================================*/
