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

main.cpp

Committer:
Jamess
Date:
2015-04-24
Revision:
1:b54671e37e54
Parent:
0:e59a01f2ebcd
Child:
2:6f5f2342d0a5

File content as of revision 1:b54671e37e54:

//Arquivo exemplo de se como utilizar a SPI em com a biblioteca do mbed feita por aaron.
//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
#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

#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};
     
    //Go into standby mode to configure the device.
  //  pc.printf("Starting setting the accelerômeters");
    //accelerometer.setPowerControl(0x00);
 
    //Full resolution, +/-16g, 4mg/LSB.
    //accelerometer.setDataFormatControl(0x0B);
    
    //3.2kHz data rate.
    //accelerometer.setDataRate(ADXL345_3200HZ);
 
    //Measurement mode.
    //accelerometer.setPowerControl(0x08);
 
    while (1) {
    
        wait(0.1);
        
        //accelerometer.getOutput(readings);
        
        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;
    }
 
}

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;

}*/