Complete Firmware of Geodynamic Seismograph
Dependencies: TI_ADS1220 ESP8266 mbed
Fork of BMI160Test by
main.cpp@0:aa129e8d6912, 2016-09-22 (annotated)
- 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?
User | Revision | Line number | New 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 | } |