Complete Firmware of Geodynamic Seismograph

Dependencies:   TI_ADS1220 ESP8266 mbed

Fork of BMI160Test by GeoDynamics Hibrid Seismograph

Committer:
firewalk
Date:
Thu Sep 22 12:57:40 2016 +0000
Revision:
0:aa129e8d6912
Child:
1:268fc98970bb
Firmware 1.0v Hibrid Seismograph GeoDynamics

Who changed what in which revision?

UserRevisionLine numberNew contents of line
firewalk 0:aa129e8d6912 1 #include "mbed.h"
firewalk 0:aa129e8d6912 2
firewalk 0:aa129e8d6912 3
firewalk 0:aa129e8d6912 4 /* defines the axis for acc */
firewalk 0:aa129e8d6912 5 #define ACC_NOOF_AXIS 3
firewalk 0:aa129e8d6912 6 #define GYR_NOOF_AXIS 3
firewalk 0:aa129e8d6912 7
firewalk 0:aa129e8d6912 8 /* bmi160 slave address */
firewalk 0:aa129e8d6912 9 #define BMI160_ADDR ((0x68)<<1)
firewalk 0:aa129e8d6912 10
firewalk 0:aa129e8d6912 11 #define M_PI 3.1415927
firewalk 0:aa129e8d6912 12
firewalk 0:aa129e8d6912 13 Serial pc(USBTX, USBRX); // tx, rx
firewalk 0:aa129e8d6912 14
firewalk 0:aa129e8d6912 15 I2C i2c(P2_3, P2_4);
firewalk 0:aa129e8d6912 16
firewalk 0:aa129e8d6912 17
firewalk 0:aa129e8d6912 18 /* buffer to store acc samples */
firewalk 0:aa129e8d6912 19 int16_t acc_sample_buffer[ACC_NOOF_AXIS] = {0x5555, 0x5555, 0x5555};
firewalk 0:aa129e8d6912 20 int16_t gyr_sample_buffer[GYR_NOOF_AXIS] = {0x5555, 0x5555, 0x5555};
firewalk 0:aa129e8d6912 21
firewalk 0:aa129e8d6912 22 double acc_result_buffer[ACC_NOOF_AXIS] = {0x5555, 0x5555, 0x5555};
firewalk 0:aa129e8d6912 23 double gyr_result_buffer[GYR_NOOF_AXIS] = {0x5555, 0x5555, 0x5555};
firewalk 0:aa129e8d6912 24
firewalk 0:aa129e8d6912 25 char i2c_reg_buffer[2] = {0};
firewalk 0:aa129e8d6912 26
firewalk 0:aa129e8d6912 27 int main() {
firewalk 0:aa129e8d6912 28 pc.printf("Teste BMI160\n\r");
firewalk 0:aa129e8d6912 29 pc.printf("Configurando BMI160...\n\r");
firewalk 0:aa129e8d6912 30 wait_ms(250);
firewalk 0:aa129e8d6912 31
firewalk 0:aa129e8d6912 32 /*Config Freq. I2C Bus*/
firewalk 0:aa129e8d6912 33 i2c.frequency(20000);
firewalk 0:aa129e8d6912 34
firewalk 0:aa129e8d6912 35 /*Reset BMI160*/
firewalk 0:aa129e8d6912 36 i2c_reg_buffer[0] = 0x7E;
firewalk 0:aa129e8d6912 37 i2c_reg_buffer[1] = 0xB6;
firewalk 0:aa129e8d6912 38 i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false);
firewalk 0:aa129e8d6912 39 wait_ms(200);
firewalk 0:aa129e8d6912 40 pc.printf("BMI160 Resetado\n\r");
firewalk 0:aa129e8d6912 41
firewalk 0:aa129e8d6912 42 /*Habilita o Acelerometro*/
firewalk 0:aa129e8d6912 43 i2c_reg_buffer[0] = 0x7E;
firewalk 0:aa129e8d6912 44 i2c_reg_buffer[1] = 0x11; //PMU Normal
firewalk 0:aa129e8d6912 45 i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false);
firewalk 0:aa129e8d6912 46 pc.printf("Acc Habilitado\n\r");
firewalk 0:aa129e8d6912 47
firewalk 0:aa129e8d6912 48 /*Habilita o Giroscopio*/
firewalk 0:aa129e8d6912 49 i2c_reg_buffer[0] = 0x7E;
firewalk 0:aa129e8d6912 50 i2c_reg_buffer[1] = 0x15; //PMU Normal
firewalk 0:aa129e8d6912 51 i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false);
firewalk 0:aa129e8d6912 52 pc.printf("Gyr Habilitado\n\r");
firewalk 0:aa129e8d6912 53
firewalk 0:aa129e8d6912 54 /*Config o Data Rate ACC em 100Hz*/
firewalk 0:aa129e8d6912 55 i2c_reg_buffer[0] = 0x40;
firewalk 0:aa129e8d6912 56 i2c_reg_buffer[1] = 0x28;
firewalk 0:aa129e8d6912 57 i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false);
firewalk 0:aa129e8d6912 58 pc.printf("Data Rate ACC Selecionado a 100Hz\n\r");
firewalk 0:aa129e8d6912 59
firewalk 0:aa129e8d6912 60 /*Config o Data Rate GYR em 100Hz*/
firewalk 0:aa129e8d6912 61 i2c_reg_buffer[0] = 0x42;
firewalk 0:aa129e8d6912 62 i2c_reg_buffer[1] = 0x28;
firewalk 0:aa129e8d6912 63 i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false);
firewalk 0:aa129e8d6912 64 pc.printf("Data Rate GYR Selecionado a 100Hz\n\r");
firewalk 0:aa129e8d6912 65
firewalk 0:aa129e8d6912 66 wait_ms(2000);
firewalk 0:aa129e8d6912 67 pc.printf("BMI160 Configurado\n\r");
firewalk 0:aa129e8d6912 68
firewalk 0:aa129e8d6912 69
firewalk 0:aa129e8d6912 70 while(1) {
firewalk 0:aa129e8d6912 71
firewalk 0:aa129e8d6912 72 /*Le os Registradores do Acelerometro*/
firewalk 0:aa129e8d6912 73 i2c_reg_buffer[0] = 0x12;
firewalk 0:aa129e8d6912 74 i2c.write(BMI160_ADDR, i2c_reg_buffer, 1, true);
firewalk 0:aa129e8d6912 75 i2c.read(BMI160_ADDR, (char *)&acc_sample_buffer, sizeof(acc_sample_buffer), false);
firewalk 0:aa129e8d6912 76
firewalk 0:aa129e8d6912 77 /*Le os Registradores do Giroscopio*/
firewalk 0:aa129e8d6912 78 i2c_reg_buffer[0] = 0x0C;
firewalk 0:aa129e8d6912 79 i2c.write(BMI160_ADDR, i2c_reg_buffer, 1, true);
firewalk 0:aa129e8d6912 80 i2c.read(BMI160_ADDR, (char *)&gyr_sample_buffer, sizeof(gyr_sample_buffer), false);
firewalk 0:aa129e8d6912 81
firewalk 0:aa129e8d6912 82 /*Ajusta dados brutos Acelerometro e transforma m/s^2*/
firewalk 0:aa129e8d6912 83 acc_result_buffer[0] = (acc_sample_buffer[0]/16384.0)*9.80665;
firewalk 0:aa129e8d6912 84 acc_result_buffer[1] = (acc_sample_buffer[1]/16384.0)*9.80665;
firewalk 0:aa129e8d6912 85 acc_result_buffer[2] = (acc_sample_buffer[2]/16384.0)*9.80665;
firewalk 0:aa129e8d6912 86
firewalk 0:aa129e8d6912 87 /*Ajusta dados Brutos do Giroscopio e transforma rad/s*/
firewalk 0:aa129e8d6912 88 gyr_result_buffer[0] = (gyr_sample_buffer[0]/16.4)*0.017453;
firewalk 0:aa129e8d6912 89 gyr_result_buffer[1] = (gyr_sample_buffer[1]/16.4)*0.017453;
firewalk 0:aa129e8d6912 90 gyr_result_buffer[2] = (gyr_sample_buffer[2]/16.4)*0.017453;
firewalk 0:aa129e8d6912 91
firewalk 0:aa129e8d6912 92
firewalk 0:aa129e8d6912 93
firewalk 0:aa129e8d6912 94 /*Imprime os dados ACC pre-formatados*/
firewalk 0:aa129e8d6912 95 pc.printf("AccXraw %f ", (acc_result_buffer[0]));
firewalk 0:aa129e8d6912 96 pc.printf("AccYraw %f ", (acc_result_buffer[1]));
firewalk 0:aa129e8d6912 97 pc.printf("AccZraw %f ", (acc_result_buffer[2]));
firewalk 0:aa129e8d6912 98 /*Imprime os dados GYR pre-formatados*/
firewalk 0:aa129e8d6912 99 pc.printf("GYRXraw %f ", (gyr_result_buffer[0]));
firewalk 0:aa129e8d6912 100 pc.printf("GYRYraw %f ", (gyr_result_buffer[1]));
firewalk 0:aa129e8d6912 101 pc.printf("GYRZraw %f\n\r", (gyr_result_buffer[2]));
firewalk 0:aa129e8d6912 102 wait_ms(100);
firewalk 0:aa129e8d6912 103 }
firewalk 0:aa129e8d6912 104 }