From bb6f7926fc7e0ae67e86c1b3caca1c3332396006 Mon Sep 17 00:00:00 2001 From: Fabian Nack Date: Wed, 28 Jan 2015 09:18:17 +0100 Subject: [PATCH] tests: Add test for MPU-9150 9-Axis motion sensor driver --- tests/driver_mpu9150/Makefile | 35 +++++++++++ tests/driver_mpu9150/README.md | 13 ++++ tests/driver_mpu9150/main.c | 106 +++++++++++++++++++++++++++++++++ 3 files changed, 154 insertions(+) create mode 100644 tests/driver_mpu9150/Makefile create mode 100644 tests/driver_mpu9150/README.md create mode 100644 tests/driver_mpu9150/main.c diff --git a/tests/driver_mpu9150/Makefile b/tests/driver_mpu9150/Makefile new file mode 100644 index 0000000000..477bf4fa07 --- /dev/null +++ b/tests/driver_mpu9150/Makefile @@ -0,0 +1,35 @@ +APPLICATION = driver_mpu9150 +include ../Makefile.tests_common + +FEATURES_REQUIRED = periph_i2c + +# Define default mappings for some boards: +ifneq (,$(filter msbiot,$(BOARD))) + export TEST_I2C ?= MPU9150_I2C + export TEST_HW_ADDR ?= MPU9150_HW_ADDR + export TEST_COMP_ADDR ?= MPU9150_COMP_ADDR +endif + +USEMODULE += mpu9150 +USEMODULE += vtimer + +ifneq (,$(TEST_I2C)) + CFLAGS += -DTEST_I2C=$(TEST_I2C) +else + # set random default + CFLAGS += -DTEST_I2C=I2C_0 +endif +ifneq (,$(TEST_HW_ADDR)) + CFLAGS += -DTEST_HW_ADDR=$(TEST_HW_ADDR) +else + # set random default + CFLAGS += -DTEST_HW_ADDR=MPU9150_HW_ADDR_HEX_68 +endif +ifneq (,$(TEST_COMP_ADDR)) + CFLAGS += -DTEST_COMP_ADDR=$(TEST_COMP_ADDR) +else + # set random default + CFLAGS += -DTEST_COMP_ADDR=MPU9150_COMP_ADDR_HEX_0C +endif + +include $(RIOTBASE)/Makefile.include diff --git a/tests/driver_mpu9150/README.md b/tests/driver_mpu9150/README.md new file mode 100644 index 0000000000..a81ac4850c --- /dev/null +++ b/tests/driver_mpu9150/README.md @@ -0,0 +1,13 @@ +# About +This is a test application for the MPU-9150 Nine-Axis Driver. + +# Usage +The application will initialize the MPU-9150 motion sensor with the following parameters: + - Accelerometer: ON + - Gyroscope: ON + - Magnetometer: ON + - Sampling Rate: 200Hz + - Compass Sampling Rate: 100Hz + +After initialization, the application reads accel, gyro, compass and temperature values +every second and prints them to the STDOUT. diff --git a/tests/driver_mpu9150/main.c b/tests/driver_mpu9150/main.c new file mode 100644 index 0000000000..e172774f00 --- /dev/null +++ b/tests/driver_mpu9150/main.c @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2015 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup tests + * @{ + * + * @file + * @brief Test application for the MPU-9150 Nine-Axis driver + * + * @author Fabian Nack + * + * @} + */ + +#ifndef TEST_I2C +#error "TEST_I2C not defined" +#endif +#ifndef TEST_HW_ADDR +#error "TEST_HW_ADDR not defined" +#endif +#ifndef TEST_COMP_ADDR +#error "TEST_COMP_ADDR not defined" +#endif + +#include + +#include "mpu9150.h" +#include "vtimer.h" +#include "board.h" + +#define SLEEP (1000 * 1000u) + +int main(void) +{ + mpu9150_t dev; + mpu9150_results_t measurement; + int32_t temperature; + int result; + + puts("MPU-9150 test application\n"); + + vtimer_init(); + + printf("+------------Initializing------------+\n"); + result = mpu9150_init(&dev, TEST_I2C, TEST_HW_ADDR, TEST_COMP_ADDR); + + if (result == -1) { + puts("[Error] The given i2c is not enabled"); + return 1; + } + else if (result == -2) { + puts("[Error] The compass did not answer correctly on the given address"); + return 1; + } + + mpu9150_set_sample_rate(&dev, 200); + if (dev.conf.sample_rate != 200) { + puts("[Error] The sample rate was not set correctly"); + return 1; + } + mpu9150_set_compass_sample_rate(&dev, 100); + if (dev.conf.compass_sample_rate != 100) { + puts("[Error] The compass sample rate was not set correctly"); + return 1; + } + + printf("Initialization successful\n\n"); + printf("+------------Configuration------------+\n"); + printf("Sample rate: %"PRIu16" Hz\n", dev.conf.sample_rate); + printf("Compass sample rate: %"PRIu8" Hz\n", dev.conf.compass_sample_rate); + printf("Gyro full-scale range: 2000 DPS\n"); + printf("Accel full-scale range: 2 G\n"); + printf("Compass X axis factory adjustment: %"PRIu8"\n", dev.conf.compass_x_adj); + printf("Compass Y axis factory adjustment: %"PRIu8"\n", dev.conf.compass_y_adj); + printf("Compass Z axis factory adjustment: %"PRIu8"\n", dev.conf.compass_z_adj); + + printf("\n+--------Starting Measurements--------+\n"); + while (1) { + /* Get accel data in milli g */ + mpu9150_read_accel(&dev, &measurement); + printf("Accel data [milli g] - X: %d Y: %d Z: %d\n", + measurement.x_axis, measurement.y_axis, measurement.z_axis); + /* Get gyro data in dps */ + mpu9150_read_gyro(&dev, &measurement); + printf("Gyro data [dps] - X: %d Y: %d Z: %d\n", + measurement.x_axis, measurement.y_axis, measurement.z_axis); + /* Get compass data in mikro Tesla */ + mpu9150_read_compass(&dev, &measurement); + printf("Compass data [mikro T] - X: %d Y: %d Z: %d\n", + measurement.x_axis, measurement.y_axis, measurement.z_axis); + /* Get temperature in milli degrees celsius */ + mpu9150_read_temperature(&dev, &temperature); + printf("Temperature [milli deg] : %ld\n", temperature); + printf("\n+-------------------------------------+\n"); + + vtimer_usleep(SLEEP); + } + + return 0; +}