Skip to content

Commit

Permalink
Merge branch 'release-candidate-accelerometer-v0.0.1'
Browse files Browse the repository at this point in the history
  • Loading branch information
JonasBchrt committed Jul 23, 2023
2 parents d3f31b0 + 133e1ee commit e7c4cad
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 44 deletions.
2 changes: 2 additions & 0 deletions firmware_versions/snapper-accelerometer/inc/accelerometer.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,6 @@ void Accelerometer_enableInterface();
// Disable I2C for LIS3DH
void Accelerometer_disableInterface();

bool Accelerometer_isAvailable();

#endif /* __ACCELEROMETER_H */
23 changes: 20 additions & 3 deletions firmware_versions/snapper-accelerometer/src/accelerometer.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
// address = 0x19.
#define LIS3DH_I2C_ADDRESS 0b0011001


// Registers
#define LIS3DH_AUX 0x07
#define LIS3DH_CTRL_REG0 0x1E
Expand All @@ -49,6 +48,12 @@
#define LIS3DH_FIFO_CTRL 0x2E
#define LIS3DH_WHO_AM_I 0x0F

// Content of the WHO_AM_I register
#define LIS3DH_ID 0b00110011

// Constants
#define TIMEOUT 10000

// I2C variables

static volatile I2C_TransferReturn_TypeDef status;
Expand Down Expand Up @@ -90,9 +95,13 @@ static void read(uint8_t *message, uint8_t *data, int32_t messageLength, int32_t

status = I2C_TransferInit(I2C0, &seq);

while (status == i2cTransferInProgress) {
uint32_t counter = 0;

EMU_EnterEM1();
while (status == i2cTransferInProgress && counter < TIMEOUT) {

// EMU_EnterEM1();

++counter;

}

Expand Down Expand Up @@ -348,3 +357,11 @@ void Accelerometer_disableInterface() {
NVIC_DisableIRQ(I2C0_IRQn);

}

bool Accelerometer_isAvailable() {

uint8_t whoAmI = Accelerometer_whoAmI();

return whoAmI == LIS3DH_ID;

}
91 changes: 50 additions & 41 deletions firmware_versions/snapper-accelerometer/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ static volatile bool loadFirmware = false;

/* Firmware version */

static uint8_t firmwareVersion[FIRMWARE_VERSION_LENGTH] = {0, 0, 1};
static uint8_t firmwareVersion[FIRMWARE_VERSION_LENGTH] = {0, 0, 2};

static uint8_t firmwareDescription[FIRMWARE_DESCRIPTION_LENGTH] = "SnapperGPS-Accelerometer";

Expand All @@ -282,7 +282,7 @@ static int16_t y = 0;

static int16_t z = 0;

static uint8_t ctrlReg[7] = {42, 42, 42, 42, 42, 42, 42};
static uint8_t ctrlReg[7] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

// Create acceleration arrays at same location as transmitBuffer
int16_t *accelerationsX = (int16_t*) transmitBuffer;
Expand Down Expand Up @@ -1049,14 +1049,12 @@ int main(void) {

Accelerometer_enableInterface();

// Wait until accelerometer is available
uint8_t id = Accelerometer_whoAmI();
while (id != 0b00110011) {
Timer_delayMicroseconds(500);
id = Accelerometer_whoAmI();
}
// Check if accelerometer is available
if (Accelerometer_isAvailable()) {

Accelerometer_enableLowPowerMode();

Accelerometer_enableLowPowerMode();
}

Accelerometer_disableInterface();

Expand Down Expand Up @@ -1130,29 +1128,36 @@ int main(void) {

Accelerometer_enableInterface();

// Wait until accelerometer is available
uint8_t id = Accelerometer_whoAmI();
while (id != 0b00110011) {
Timer_delayMicroseconds(500);
id = Accelerometer_whoAmI();
}
// Check if accelerometer is available
if (Accelerometer_isAvailable()) {

Accelerometer_selectDataRate(1);
Accelerometer_selectDataRate(1);

// Wait until accelerometer data is available
bool dataAvailable = Accelerometer_isNewDataAvailable();
while (!dataAvailable) {
Timer_delayMicroseconds(500);
dataAvailable = Accelerometer_isNewDataAvailable();
}
// Wait until accelerometer data is available
bool dataAvailable = Accelerometer_isNewDataAvailable();
while (!dataAvailable) {
Timer_delayMicroseconds(500);
dataAvailable = Accelerometer_isNewDataAvailable();
}

enableGreenLED(true);
enableGreenLED(true);

Accelerometer_readXYZ(&x, &y, &z);

Accelerometer_readXYZ(&x, &y, &z);
Accelerometer_readCtrlReg(ctrlReg);

Accelerometer_readCtrlReg(ctrlReg);
Accelerometer_selectDataRate(0);

Accelerometer_selectDataRate(0);
} else {

x = 0;
y = 0;
z = 0;
for (uint8_t i = 0; i < 7; ++i) {
ctrlReg[i] = 0;
}

}

Accelerometer_disableInterface();

Expand Down Expand Up @@ -1362,25 +1367,29 @@ int main(void) {

Accelerometer_enableInterface();

// Wait until accelerometer is available
uint8_t id = Accelerometer_whoAmI();
while (id != 0b00110011) {
Timer_delayMicroseconds(500);
id = Accelerometer_whoAmI();
}
// Check if accelerometer is available
if (Accelerometer_isAvailable()) {

Accelerometer_selectDataRate(1);
Accelerometer_selectDataRate(1);

// Wait until accelerometer data is available
bool dataAvailable = Accelerometer_isNewDataAvailable();
while (!dataAvailable) {
Timer_delayMicroseconds(500);
dataAvailable = Accelerometer_isNewDataAvailable();
}
// Wait until accelerometer data is available
bool dataAvailable = Accelerometer_isNewDataAvailable();
while (!dataAvailable) {
Timer_delayMicroseconds(500);
dataAvailable = Accelerometer_isNewDataAvailable();
}

Accelerometer_readXYZ(&x, &y, &z);
Accelerometer_readXYZ(&x, &y, &z);

Accelerometer_selectDataRate(0);
Accelerometer_selectDataRate(0);

} else {

x = 0;
y = 0;
z = 0;

}

Accelerometer_disableInterface();

Expand Down

0 comments on commit e7c4cad

Please sign in to comment.