// 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 .

Files at this revision

API Documentation at this revision

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======================================*/