summaryrefslogtreecommitdiff
path: root/lib/bmp280.h
diff options
context:
space:
mode:
authorBernhard Tittelbach <bernhard@tittelbach.org>2016-06-12 06:59:34 +0200
committerBernhard Tittelbach <bernhard@tittelbach.org>2016-06-12 06:59:34 +0200
commit7caffb47d6fc9426b2f65ad6bdd6197b324fb68a (patch)
tree6a41d218320bc1b92ccc6377f00caabe4b940cc6 /lib/bmp280.h
parentbetter lufa detect and reset (diff)
basic bmp280 lib (mostly adafruit reimplementation) and example
Diffstat (limited to 'lib/bmp280.h')
-rw-r--r--lib/bmp280.h107
1 files changed, 107 insertions, 0 deletions
diff --git a/lib/bmp280.h b/lib/bmp280.h
new file mode 100644
index 0000000..22472e3
--- /dev/null
+++ b/lib/bmp280.h
@@ -0,0 +1,107 @@
+/*
+ * spreadspace avr utils
+ *
+ *
+ * Copyright (C) 2016 Bernhard Tittelbach <bernhard@tittelbach.org>
+ * appreciative nod to Adafruit for writing a great example, go buy their stuff
+ *
+ * This file is part of spreadspace avr utils.
+ *
+ * spreadspace avr utils is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * spreadspace avr utils is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef SPREADAVR_bmp280_h_INCLUDED
+#define SPREADAVR_bmp280_h_INCLUDED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BMP280_AVERAGE_SEA_LEVEL_PRESSURE 1013.25
+#define BMP280_LUFA_SPIO_OPTIONS SPI_SPEED_FCPU_DIV_16 | SPI_MODE_MASTER | SPI_ORDER_MSB_FIRST | SPI_SCK_LEAD_RISING | SPI_SAMPLE_LEADING
+
+/*=========================================================================
+ REGISTERS
+ -----------------------------------------------------------------------*/
+ enum
+ {
+ BMP280_REGISTER_DIG_T1 = 0x88,
+ BMP280_REGISTER_DIG_T2 = 0x8A,
+ BMP280_REGISTER_DIG_T3 = 0x8C,
+
+ BMP280_REGISTER_DIG_P1 = 0x8E,
+ BMP280_REGISTER_DIG_P2 = 0x90,
+ BMP280_REGISTER_DIG_P3 = 0x92,
+ BMP280_REGISTER_DIG_P4 = 0x94,
+ BMP280_REGISTER_DIG_P5 = 0x96,
+ BMP280_REGISTER_DIG_P6 = 0x98,
+ BMP280_REGISTER_DIG_P7 = 0x9A,
+ BMP280_REGISTER_DIG_P8 = 0x9C,
+ BMP280_REGISTER_DIG_P9 = 0x9E,
+
+ BMP280_REGISTER_CHIPID = 0xD0,
+ BMP280_REGISTER_VERSION = 0xD1,
+ BMP280_REGISTER_SOFTRESET = 0xE0,
+
+ BMP280_REGISTER_CAL26 = 0xE1, // R calibration stored in 0xE1-0xF0
+
+ BMP280_REGISTER_CONTROL = 0xF4,
+ BMP280_REGISTER_CONFIG = 0xF5,
+ BMP280_REGISTER_PRESSUREDATA = 0xF7,
+ BMP280_REGISTER_TEMPDATA = 0xFA,
+ };
+
+/*=========================================================================*/
+
+
+/*=========================================================================
+ CALIBRATION DATA
+ -----------------------------------------------------------------------*/
+ typedef struct
+ {
+ volatile uint8_t *cs_port;
+ uint8_t cs_pin;
+ uint16_t dig_T1;
+ int16_t dig_T2;
+ int16_t dig_T3;
+
+ uint16_t dig_P1;
+ int16_t dig_P2;
+ int16_t dig_P3;
+ int16_t dig_P4;
+ int16_t dig_P5;
+ int16_t dig_P6;
+ int16_t dig_P7;
+ int16_t dig_P8;
+ int16_t dig_P9;
+
+ uint8_t dig_H1;
+ int16_t dig_H2;
+ uint8_t dig_H3;
+ int16_t dig_H4;
+ int16_t dig_H5;
+ int8_t dig_H6;
+ } bmp280_sensor;
+/*=========================================================================*/
+
+
+//make sure to configure the cs_pin as OUTPUT beforehand
+//make sure to configure SPI beforehand
+void bmp280_init(bmp280_sensor *sensor, volatile uint8_t *cs_port, uint8_t cs_pin);
+float bmp280_readTemp(bmp280_sensor *sensor);
+float bmp280_readPressure(bmp280_sensor *sensor);
+float bmp280_readAltitude(bmp280_sensor *sensor, float sealevelp);
+
+
+#endif \ No newline at end of file