A collection of Analog Devices drivers for the mbed platform
For additional information check out the mbed page of the Analog Devices wiki: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
Revision 19:fb92949e59c9, committed 2016-05-17
- Comitter:
- Adrian Suciu
- Date:
- Tue May 17 14:21:17 2016 +0300
- Parent:
- 17:b8356808e8ad
- Child:
- 20:9790e53d6e26
- Commit message:
- Added ADXL362 driver & reference project
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/adxl362_example/Makefile Tue May 17 14:21:17 2016 +0300 @@ -0,0 +1,91 @@ +# This file was automagically generated by mbed.org. For more information, +# see http://mbed.org/handbook/Exporting-to-GCC-ARM-Embedded + +GCC_BIN = +PROJECT = adxl362-MBED +ADI_LIBRARIES_PATH = ../../libraries +MBED_LIBRARIES_PATH = ../../mbed +OBJECTS = ./main.o ./lcd.o $(ADI_LIBRARIES_PATH)/ADXL362/ADXL362.o +# $(ADI_LIBRARIES_PATH)/CN0216/CN0216.o +SYS_OBJECTS = $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_flash_ramfunc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/board.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/cmsis_nvic.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/hal_tick.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/mbed_overrides.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/retarget.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/startup_stm32f411xe.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_adc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_adc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_can.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cec.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cortex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_crc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cryp.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cryp_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dac.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dac_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dcmi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dcmi_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dma.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dma2d.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dma_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dsi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_eth.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_flash.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_flash_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_fmpi2c_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_fmpi2c.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_msp_template.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_gpio.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_hash.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_hash_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_hcd.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2c.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2c_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2s.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2s_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_irda.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_iwdg.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_lptim.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_ltdc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_ltdc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_smartcard.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_nand.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_nor.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pccard.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pcd.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pcd_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pwr.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pwr_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_qspi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rcc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rcc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rng.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rtc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rtc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sai.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sai_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sd.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sdram.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_spdifrx.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_spi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sram.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_tim.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_tim_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_uart.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_usart.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_wwdg.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_fmc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_fsmc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_sdmmc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_usb.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/system_stm32f4xx.o +INCLUDE_PATHS = -I. -I$(MBED_LIBRARIES_PATH) -I$(ADI_LIBRARIES_PATH) -I$(ADI_LIBRARIES_PATH)/adxl362 -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM/TARGET_STM32F4 -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F411RE -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM +LIBRARY_PATHS = -L$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM +LIBRARIES = -lmbed +LINKER_SCRIPT = $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/STM32F411XE.ld + +############################################################################### +AS = $(GCC_BIN)arm-none-eabi-as +CC = $(GCC_BIN)arm-none-eabi-gcc +CPP = $(GCC_BIN)arm-none-eabi-g++ +LD = $(GCC_BIN)arm-none-eabi-gcc +OBJCOPY = $(GCC_BIN)arm-none-eabi-objcopy +OBJDUMP = $(GCC_BIN)arm-none-eabi-objdump +SIZE = $(GCC_BIN)arm-none-eabi-size + +ifeq ($(HARDFP),1) + FLOAT_ABI = hard +else + FLOAT_ABI = softfp +endif + + +CPU = -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=$(FLOAT_ABI) +CC_FLAGS = $(CPU) -c -g -fno-common -fmessage-length=0 -Wall -Wextra -fno-exceptions -ffunction-sections -fdata-sections -fomit-frame-pointer -MMD -MP +CC_SYMBOLS = -DTARGET_RTOS_M4_M7 -DTARGET_FF_ARDUINO -DTOOLCHAIN_GCC_ARM -DTARGET_NUCLEO_F411RE -D__CORTEX_M4 -DTARGET_LIKE_MBED -DTARGET_CORTEX_M -D__FPU_PRESENT=1 -DTARGET_LIKE_CORTEX_M4 -DMBED_BUILD_TIMESTAMP=1458639619.11 -DTARGET_M4 -D__MBED__=1 -DTARGET_STM -DTARGET_STM32F4 -DTARGET_FF_MORPHO -DTOOLCHAIN_GCC -DTARGET_STM32F411RE -DARM_MATH_CM4 + +LD_FLAGS = $(CPU) -Wl,--gc-sections --specs=nano.specs -u _printf_float -u _scanf_float -Wl,--wrap,main -Wl,-Map=$(PROJECT).map,--cref +LD_SYS_LIBS = -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys + + +ifeq ($(DEBUG), 1) + CC_FLAGS += -DDEBUG -O0 +else + CC_FLAGS += -DNDEBUG -Os +endif + +.PHONY: all clean lst size + +all: $(PROJECT).bin $(PROJECT).hex size + + +clean: + rm -f $(PROJECT).bin $(PROJECT).elf $(PROJECT).hex $(PROJECT).map $(PROJECT).lst $(OBJECTS) $(DEPS) + + +.asm.o: + $(CC) $(CPU) -c -x assembler-with-cpp -o $@ $< +.s.o: + $(CC) $(CPU) -c -x assembler-with-cpp -o $@ $< +.S.o: + $(CC) $(CPU) -c -x assembler-with-cpp -o $@ $< + +.c.o: + $(CC) $(CC_FLAGS) $(CC_SYMBOLS) -std=gnu99 $(INCLUDE_PATHS) -o $@ $< + +.cpp.o: + $(CPP) $(CC_FLAGS) $(CC_SYMBOLS) -std=gnu++98 -fno-rtti $(INCLUDE_PATHS) -o $@ $< + + + +$(PROJECT).elf: $(OBJECTS) $(SYS_OBJECTS) + $(LD) $(LD_FLAGS) -T$(LINKER_SCRIPT) $(LIBRARY_PATHS) -o $@ $^ $(LIBRARIES) $(LD_SYS_LIBS) $(LIBRARIES) $(LD_SYS_LIBS) + + +$(PROJECT).bin: $(PROJECT).elf + $(OBJCOPY) -O binary $< $@ + +$(PROJECT).hex: $(PROJECT).elf + @$(OBJCOPY) -O ihex $< $@ + +$(PROJECT).lst: $(PROJECT).elf + @$(OBJDUMP) -Sdh $< > $@ + +lst: $(PROJECT).lst + +size: $(PROJECT).elf + $(SIZE) $(PROJECT).elf + +DEPS = $(OBJECTS:.o=.d) $(SYS_OBJECTS:.o=.d) +-include $(DEPS) + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/adxl362_example/lcd.cpp Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,328 @@
+/**
+ ******************************************************************************
+ * @file Lcd.c
+ * @brief Source file for ST7565R LCD control.
+ * @author ADI
+ * @date March 2016
+ *
+ *******************************************************************************
+ * Copyright 2015(c) Analog Devices, Inc.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * - Neither the name of Analog Devices, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * - The use of this software may or may not infringe the patent rights
+ * of one or more patent holders. This license does not release you
+ * from the requirement that you obtain separate licenses from these
+ * patent holders to use this software.
+ * - Use of the software either in source or binary form, must be run
+ * on or directly connected to an Analog Devices Inc. component.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *******************************************************************************
+ **/
+
+/******************************************************************************/
+/***************************** Include Files **********************************/
+/******************************************************************************/
+#include "mbed.h"
+#include "lcd.h"
+
+
+
+Lcd::Lcd(PinName rst_pin, PinName a0_pin, PinName bl_pin,
+ PinName cs_pin, PinName MOSI,
+ PinName MISO, PinName SCK) :
+
+ rst(rst_pin), a0(a0_pin), bl(bl_pin), cs(cs_pin), lcd_spi(MOSI, MISO, SCK)
+{
+ rst = 1;
+}
+
+/**
+ @brief Initialization of LCD screen
+ @return none
+ **/
+
+void Lcd::write_cmd(uint8_t cmd)
+{
+ cs = 0;
+ a0 = 0;
+ lcd_spi.write(cmd);
+ cs = 1;
+}
+
+void Lcd::write_data(uint8_t data)
+{
+ cs = 0;
+ a0 = 1;
+ lcd_spi.write(data);
+ cs = 1;
+}
+
+void Lcd::bl_enable()
+{
+ bl = 1;
+}
+
+void Lcd::bl_disable()
+{
+ bl = 0;
+}
+
+void Lcd::init(void)
+{
+
+ write_cmd(CMD_DISPLAY_OFF);
+ write_cmd(CMD_SET_BIAS_7);
+ write_cmd(CMD_SET_ADC_NORMAL);
+ write_cmd(CMD_SET_COM_REVERSE);
+ write_cmd((CMD_SET_RESISTOR_RATIO | 0x02));
+ write_cmd(CMD_SET_VOLUME_FIRST);
+ write_cmd((CMD_SET_VOLUME_SECOND | 0x04));
+ write_cmd((CMD_SET_POWER_CONTROL | 0x07));
+ fill_pages(0, 8, 0x00);
+
+}
+
+/**
+ @brief Displays a string at the specified position for with 5x7 font size.
+ @return none
+ **/
+void Lcd::display_string(uint8_t ui8row, uint8_t ui8col, int8_t *pi8str)
+{
+ uint8_t ui8x;
+ uint8_t ui8i;
+ uint8_t ui8ch;
+ uint8_t ui8data;
+
+ ui8ch = 0;
+ ui8x = ui8col;
+
+ while ((pi8str[ui8ch] != 0) && (ui8col < LCD_COLUMNS)) {
+ set_cursor(ui8row, ui8x); /* Set cursor position */
+
+ for (ui8i = 0; ui8i < 5; ui8i++) { /* Symbol matrix column loop */
+ ui8data = pui8font5x7[pi8str[ui8ch] - OFFS_ASCII][ui8i];
+
+ write_data(ui8data);
+ }
+
+ ui8x += 6; /* Increase column counter with 6 pixels */
+ ui8ch++; /* Increment counter */
+ }
+ write_cmd(CMD_DISPLAY_ON);
+
+}
+
+/**
+ @brief Displays a symbol (8 x width) at the specified position on the LCD.
+ @param ui8row - row number
+ @param ui8col - column number
+ @param ui8width - symbol width
+ @param pui8symbol - symbol to display
+ @return none
+ **/
+
+void Lcd::display_symbol(uint8_t ui8row, uint8_t ui8col, uint8_t ui8width,
+ const uint8_t *pui8symbol)
+{
+ uint8_t ui8i;
+ uint8_t ui8data;
+
+ set_cursor(ui8row, ui8col); /* Set cursor position */
+ for (ui8i = 0; ui8i < ui8width; ui8i++) { /* Symbol matrix column loop */
+ ui8data = pui8symbol[ui8i];
+ write_data(ui8data);
+ }
+ write_cmd(CMD_DISPLAY_ON);
+}
+
+/**
+ @brief Fills the selected LCD pages with the data specified.
+ @param ui8start - start element
+ @param ui8num - elements numbers to fill
+ @param ui8Data - data to fill
+ @return none
+ **/
+
+void Lcd::fill_pages(uint8_t ui8start, uint8_t ui8num, uint8_t ui8Data)
+{
+
+ uint8_t ui8p;
+ uint8_t ui8c;
+
+ for (ui8p = ui8start; ui8p < (ui8start + ui8num); ui8p++) {
+ set_cursor(ui8p, 0);
+
+ for (ui8c = 0; ui8c < LCD_COLUMNS; ui8c++) {
+ write_data(ui8Data);
+ }
+ }
+
+ write_cmd(CMD_DISPLAY_ON);
+}
+
+/**
+ @brief Sets the start line of the LCD.
+ @param ui8line - line to start with
+ @return none
+ **/
+
+void Lcd::set_line(uint8_t ui8line)
+{
+
+ uint8_t ui8Cmd;
+ ui8Cmd = CMD_SET_DISP_START_LINE | (ui8line & 0x3F); /* Set start line */
+ write_cmd(ui8Cmd);
+
+}
+
+
+/**
+ @brief Sets the cursor position at which data will be written.
+ @param ui8PA - page number
+ @param ui8CA - column number
+ @return none
+ **/
+
+void Lcd::set_cursor(uint8_t ui8PA, uint8_t ui8CA)
+{
+ uint8_t ui8Cmd;
+
+ ui8Cmd = 0xB0 | (ui8PA & 0x0F); /* Set page address */
+ write_cmd(ui8Cmd);
+
+ ui8Cmd = ui8CA & 0x0F; /* Set column address LSB CA[3:0] */
+ write_cmd(ui8Cmd);
+
+ ui8Cmd = 0x10 | (ui8CA >> 4); /* Set column address MSB CA[7:4] */
+ write_cmd(ui8Cmd);
+}
+
+
+const uint8_t Lcd::pui8Rec8x8[8] = {
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+};
+const uint8_t Lcd::pui8RecInv8x8[8] = {
+ 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF
+};
+
+const uint8_t Lcd::pui8font5x7[96][5] = {
+ {0x00, 0x00, 0x00, 0x00, 0x00}, /* 32 */
+ {0x00, 0x00, 0x4F, 0x00, 0x00}, /* ! 33 */
+ {0x00, 0x07, 0x00, 0x07, 0x00}, /* " 34 */
+ {0x14, 0x7F, 0x14, 0x7F, 0x14}, /* # 35 */
+ {0x24, 0x2A, 0x7F, 0x2A, 0x12}, /* $ 36 */
+ {0x23, 0x13, 0x08, 0x64, 0x62}, /* % 37 */
+ {0x36, 0x49, 0x55, 0x22, 0x50}, /* & 38 */
+ {0x00, 0x05, 0x03, 0x00, 0x00}, /* ' 39 */
+ {0x00, 0x1C, 0x22, 0x41, 0x00}, /* ( 40 */
+ {0x00, 0x41, 0x22, 0x1C, 0x00}, /* ) 41 */
+ {0x14, 0x08, 0x3E, 0x08, 0x14}, /* * 42 */
+ {0x08, 0x08, 0x3E, 0x08, 0x08}, /* + 43 */
+ {0x00, 0x50, 0x30, 0x00, 0x00}, /* , 44 */
+ {0x08, 0x08, 0x08, 0x08, 0x08}, /* - 45 */
+ {0x00, 0x60, 0x60, 0x00, 0x00}, /* . 46 */
+ {0x20, 0x10, 0x08, 0x04, 0x02}, /* / 47 */
+ {0x3E, 0x51, 0x49, 0x45, 0x3E}, /* 0 48 */
+ {0x00, 0x42, 0x7F, 0x40, 0x00}, /* 1 49 */
+ {0x42, 0x61, 0x51, 0x49, 0x46}, /* 2 50 */
+ {0x21, 0x41, 0x45, 0x4B, 0x31}, /* 3 51 */
+ {0x18, 0x14, 0x12, 0x7F, 0x10}, /* 4 52 */
+ {0x27, 0x45, 0x45, 0x45, 0x39}, /* 5 53 */
+ {0x3C, 0x4A, 0x49, 0x49, 0x30}, /* 6 54 */
+ {0x01, 0x71, 0x09, 0x05, 0x03}, /* 7 55 */
+ {0x36, 0x49, 0x49, 0x49, 0x36}, /* 8 56 */
+ {0x06, 0x49, 0x49, 0x29, 0x1E}, /* 9 57 */
+ {0x36, 0x36, 0x00, 0x00, 0x00}, /* : 58 */
+ {0x56, 0x36, 0x00, 0x00, 0x00}, /* ; 59 */
+ {0x08, 0x14, 0x22, 0x41, 0x00}, /* < 60 */
+ {0x14, 0x14, 0x14, 0x14, 0x14}, /* = 61 */
+ {0x00, 0x41, 0x22, 0x14, 0x08}, /* > 62 */
+ {0x02, 0x01, 0x51, 0x09, 0x06}, /* ? 63 */
+ {0x30, 0x49, 0x79, 0x41, 0x3E}, /* @ 64 */
+ {0x7E, 0x11, 0x11, 0x11, 0x7E}, /* A 65 */
+ {0x7F, 0x49, 0x49, 0x49, 0x36}, /* B 66 */
+ {0x3E, 0x41, 0x41, 0x41, 0x22}, /* C 67 */
+ {0x7F, 0x41, 0x41, 0x22, 0x1C}, /* D 68 */
+ {0x7F, 0x49, 0x49, 0x49, 0x41}, /* E 69 */
+ {0x7F, 0x09, 0x09, 0x09, 0x01}, /* F 70 */
+ {0x3E, 0x41, 0x49, 0x49, 0x7A}, /* G 71 */
+ {0x7F, 0x08, 0x08, 0x08, 0x7F}, /* H 72 */
+ {0x00, 0x41, 0x7F, 0x41, 0x00}, /* I 73 */
+ {0x20, 0x40, 0x41, 0x3F, 0x01}, /* J 74 */
+ {0x7F, 0x08, 0x14, 0x22, 0x41}, /* K 75 */
+ {0x7F, 0x40, 0x40, 0x40, 0x40}, /* L 76 */
+ {0x7F, 0x02, 0x0C, 0x02, 0x7F}, /* M 77 */
+ {0x7F, 0x04, 0x08, 0x10, 0x7F}, /* N 78 */
+ {0x3E, 0x41, 0x41, 0x41, 0x3E}, /* O 79 */
+ {0x7F, 0x09, 0x09, 0x09, 0x06}, /* P 80 */
+ {0x3E, 0x41, 0x51, 0x21, 0x5E}, /* Q 81 */
+ {0x7F, 0x09, 0x19, 0x29, 0x46}, /* R 82 */
+ {0x46, 0x49, 0x49, 0x49, 0x31}, /* S 83 */
+ {0x01, 0x01, 0x7F, 0x01, 0x01}, /* T 84 */
+ {0x3F, 0x40, 0x40, 0x40, 0x3F}, /* U 85 */
+ {0x1F, 0x20, 0x40, 0x20, 0x1F}, /* V 86 */
+ {0x3F, 0x40, 0x30, 0x40, 0x3F}, /* W 87 */
+ {0x63, 0x14, 0x08, 0x14, 0x63}, /* X 88 */
+ {0x07, 0x08, 0x70, 0x08, 0x07}, /* Y 89 */
+ {0x61, 0x51, 0x49, 0x45, 0x43}, /* Z 90 */
+ {0x00, 0x7F, 0x41, 0x41, 0x00}, /* [ 91 */
+ {0x02, 0x04, 0x08, 0x10, 0x20}, /* \ 92 */
+ {0x00, 0x41, 0x41, 0x7F, 0x00}, /* ] 93 */
+ {0x04, 0x02, 0x01, 0x02, 0x04}, /* ^ 94 */
+ {0x40, 0x40, 0x40, 0x40, 0x40}, /* _ 95 */
+ {0x00, 0x01, 0x02, 0x04, 0x00}, /* ` 96 */
+ {0x20, 0x54, 0x54, 0x54, 0x78}, /* a 97 */
+ {0x7F, 0x50, 0x48, 0x48, 0x30}, /* b 98 */
+ {0x38, 0x44, 0x44, 0x44, 0x20}, /* c 99 */
+ {0x38, 0x44, 0x44, 0x48, 0x7F}, /* d 100 */
+ {0x38, 0x54, 0x54, 0x54, 0x18}, /* e 101 */
+ {0x08, 0x7E, 0x09, 0x01, 0x02}, /* f 102 */
+ {0x0C, 0x52, 0x52, 0x52, 0x3E}, /* g 103 */
+ {0x7F, 0x08, 0x04, 0x04, 0x78}, /* h 104 */
+ {0x00, 0x44, 0x7D, 0x40, 0x00}, /* i 105 */
+ {0x20, 0x40, 0x44, 0x3D, 0x00}, /* j 106 */
+ {0x7F, 0x10, 0x28, 0x44, 0x00}, /* k 107 */
+ {0x00, 0x41, 0x7F, 0x40, 0x00}, /* l 108 */
+ {0x78, 0x04, 0x18, 0x04, 0x78}, /* m 109 */
+ {0x7C, 0x08, 0x04, 0x04, 0x78}, /* n 110 */
+ {0x38, 0x44, 0x44, 0x44, 0x38}, /* o 111 */
+ {0x7C, 0x14, 0x14, 0x14, 0x08}, /* p 112 */
+ {0x08, 0x14, 0x14, 0x18, 0x7C}, /* q 113 */
+ {0x7C, 0x08, 0x04, 0x04, 0x08}, /* r 114 */
+ {0x48, 0x54, 0x54, 0x54, 0x20}, /* s 115 */
+ {0x04, 0x3F, 0x44, 0x40, 0x20}, /* t 116 */
+ {0x3C, 0x40, 0x40, 0x20, 0x7C}, /* u 117 */
+ {0x1C, 0x20, 0x40, 0x20, 0x1C}, /* v 118 */
+ {0x3C, 0x40, 0x30, 0x40, 0x3C}, /* w 119 */
+ {0x44, 0x28, 0x10, 0x28, 0x44}, /* x 120 */
+ {0x0C, 0x50, 0x50, 0x50, 0x3C}, /* y 121 */
+ {0x44, 0x64, 0x54, 0x4C, 0x44}, /* z 122 */
+ {0x00, 0x08, 0x36, 0x41, 0x00}, /* { 123 */
+ {0x00, 0x00, 0x7F, 0x00, 0x00}, /* | 124 */
+ {0x00, 0x41, 0x36, 0x08, 0x00}, /* } 125 */
+ {0x0C, 0x02, 0x0C, 0x10, 0x0C}, /* ~ 126 */
+ {0x00, 0x00, 0x00, 0x00, 0x00} /* 127 */
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/adxl362_example/lcd.h Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,138 @@
+/**
+ ******************************************************************************
+ * @file Lcd.c
+ * @brief Header file for ST7565R LCD control.
+ * @author ADI
+ * @date March 2016
+ *
+ *******************************************************************************
+ * Copyright 2015(c) Analog Devices, Inc.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * - Neither the name of Analog Devices, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * - The use of this software may or may not infringe the patent rights
+ * of one or more patent holders. This license does not release you
+ * from the requirement that you obtain separate licenses from these
+ * patent holders to use this software.
+ * - Use of the software either in source or binary form, must be run
+ * on or directly connected to an Analog Devices Inc. component.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *******************************************************************************
+ **/
+#ifndef LCD_H_
+#define LCD_H_
+
+
+/******************************************************************************/
+/***************************** Include Files **********************************/
+/******************************************************************************/
+#include <stdio.h>
+#include "mbed.h"
+
+class Lcd
+{
+public:
+
+ const static uint8_t pui8Rec8x8[8];
+ const static uint8_t pui8RecInv8x8[8];
+ const static uint8_t pui8font5x7[96][5]; ///< Symbol matrix structure: Font (8x14)
+
+ Lcd(PinName rst = D3, PinName a0 = D5, PinName bl = D8, PinName cs = D6,
+ PinName MOSI = SPI_MOSI, PinName MISO = SPI_MISO, PinName SCK =
+ SPI_SCK);
+ void init(void);
+ void display_string(uint8_t ui8row, uint8_t ui8col, int8_t *pi8str);
+ void display_symbol(uint8_t ui8row, uint8_t ui8col, uint8_t ui8width,
+ const uint8_t *pui8symbol);
+ void fill_pages(uint8_t ui8start, uint8_t ui8num, uint8_t ui8Data);
+ void set_line(uint8_t ui8line);
+ void set_cursor(uint8_t ui8PA, uint8_t ui8CA);
+ void bl_enable();
+ void bl_disable();
+
+ void write_cmd(uint8_t cmd);
+ void write_data(uint8_t data);
+
+
+ typedef enum {
+ CMD_DISPLAY_OFF = 0xAE,
+ CMD_DISPLAY_ON = 0xAF,
+ CMD_SET_DISP_START_LINE = 0x40,
+ CMD_SET_PAGE = 0xB0,
+ CMD_SET_COLUMN_UPPER = 0x10,
+ CMD_SET_COLUMN_LOWER = 0x00,
+ CMD_SET_ADC_NORMAL = 0xA0,
+ CMD_SET_ADC_REVERSE = 0xA1,
+ CMD_SET_DISP_NORMAL = 0xA6,
+ CMD_SET_DISP_REVERSE = 0xA7,
+ CMD_SET_ALLPTS_NORMAL = 0xA4,
+ CMD_SET_ALLPTS_ON = 0xA5,
+ CMD_SET_BIAS_9 = 0xA2,
+ CMD_SET_BIAS_7 = 0xA3,
+ CMD_RMW = 0xE0,
+ CMD_RMW_CLEAR = 0xEE,
+ CMD_INTERNAL_RESET = 0xE2,
+ CMD_SET_COM_NORMAL = 0xC0,
+ CMD_SET_COM_REVERSE = 0xC8,
+ CMD_SET_POWER_CONTROL = 0x28,
+ CMD_SET_RESISTOR_RATIO = 0x20,
+ CMD_SET_VOLUME_FIRST = 0x81,
+ CMD_SET_VOLUME_SECOND = 0,
+ CMD_SET_STATIC_OFF = 0xAC,
+ CMD_SET_STATIC_ON = 0xAD,
+ CMD_SET_STATIC_REG = 0x0,
+ CMD_SET_BOOSTER_FIRST = 0xF8,
+ CMD_SET_BOOSTER_234 = 0,
+ CMD_SET_BOOSTER_5 = 1,
+ CMD_SET_BOOSTER_6 = 3,
+ CMD_NOP = 0xE3,
+ CMD_TEST = 0xF0,
+ } lcd_commands_t;
+
+ static const uint8_t LCD_COLUMNS = 128u;
+ static const uint8_t LCD_PAGES = 4u;
+ static const uint8_t LCD_LINES = 64u;
+ static const uint8_t UP_X = 112;
+ static const uint8_t LEFT_X = 104;
+ static const uint8_t RIGHT_X = 120;
+ static const uint8_t DOWN_X = 112;
+ static const uint8_t CENTER_X = 112;
+ static const uint8_t ACC_LIMIT = 80;
+ static const uint8_t FONT_Y_SIZE = 8; ///< Font size for Y
+ static const uint8_t OFFS_ASCII = 32; ///< ASCII offset
+
+ static const float ACC_TEMP_BIAS = 350 ; ///< Accelerometer temperature bias(in ADC codes) at 25 Deg C
+ static const float ACC_TEMP_SENSITIVITY = 0.065; ///< Accelerometer temperature sensitivity from datasheet (DegC per Code)
+
+private:
+
+ DigitalOut rst, a0, bl, cs;
+ SPI lcd_spi;
+
+
+
+};
+
+#endif /* LCD_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/adxl362_example/main.cpp Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,239 @@
+/**
+ * @file main.cpp
+ * @brief Main file for the ADXL362-example project
+ * @author Analog Devices Inc.
+ *
+ * For support please go to:
+ * Github: https://github.com/analogdevicesinc/mbed-adi
+ * Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
+ * Product: www.analog.com/EVAL-ADXL362-ARDZ
+ * More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
+
+ ********************************************************************************
+ * Copyright 2016(c) Analog Devices, Inc.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * - Neither the name of Analog Devices, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * - The use of this software may or may not infringe the patent rights
+ * of one or more patent holders. This license does not release you
+ * from the requirement that you obtain separate licenses from these
+ * patent holders to use this software.
+ * - Use of the software either in source or binary form, must be run
+ * on or directly connected to an Analog Devices Inc. component.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ********************************************************************************/
+#include "mbed.h"
+#include "ADXL362.h"
+#include "lcd.h"
+
+Serial pc(USBTX, USBRX); ///< Serial interface to the pc
+Lcd lcd;
+ADXL362 adxl362(D9);
+
+static const uint16_t INACT_VAL = 50;
+static const uint16_t INACT_TIMER = 10 * 100;
+static const uint16_t ACT_VAL = 50;
+static const uint8_t ACT_TIMER = 100;
+static const uint16_t SCAN_SENSOR_TIME = 500;
+
+void flush_serial_buffer(void)
+{
+ while (pc.readable())
+ pc.getc();
+ return;
+}
+
+int main()
+{
+ uint8_t ui8s[22];
+ uint8_t ui8xu = 0;
+ uint8_t ui8xd = 0;
+ uint8_t ui8yu = 0;
+ uint8_t ui8yd = 0;
+ uint8_t ui8all = 0;
+
+ lcd.init();
+ adxl362.reset();
+ wait_us(500);
+ adxl362.set_activity_threshold(ACT_VAL);
+ adxl362.set_activity_time(ACT_TIMER / 10);
+
+ adxl362.set_inactivity_threshold(INACT_VAL);
+ adxl362.set_inactivity_time(INACT_TIMER);
+ adxl362.set_act_inact_ctl_reg(0x3f);
+#if(ADXL_INT_SEL == INTACC_PIN_1)
+ adxl362.set_polling_interrupt1_pin(D2, 0x40);
+#elif(ADXL_INT_SEL == INTACC_PIN_2)
+ adxl362.set_polling_interrupt2_pin(D2, 0x40); /* Map the awake status to INT2 pin */
+#endif
+ // interrupt ?
+
+ adxl362.set_mode(ADXL362::MEASUREMENT);
+
+ uint8_t ui8awake = 0;
+
+ /* Infinite loop */
+ while (1) {
+#if(ADXL_INT_SEL == INTACC_PIN_1)
+ if (adxl362.get_int1()) {
+#elif(ADXL_INT_SEL == INTACC_PIN_2)
+ if(adxl362.get_int2()) {
+#endif
+ if (ui8awake == 0) {
+ ui8awake = 1;
+
+ /* Set BLLCD pin - turn on LCD backlight */
+ lcd.bl_enable();
+
+ lcd.display_string(0, 60, (int8_t *) "[mG]");
+ lcd.display_string(1, 60, (int8_t *) "[mG]");
+ lcd.display_string(2, 60, (int8_t *) "[mG]");
+
+#if TEMP_ADC == 1
+ lcd.display_string(3, 60, (int8_t *)"[ADC]");
+#else
+ lcd.display_string(3, 60, (int8_t *) "[C]");
+#endif
+ ui8xu = 0;
+ ui8xd = 0;
+ ui8yu = 0;
+ ui8yd = 0;
+ ui8all = 0;
+
+ lcd.display_symbol(0, Lcd::UP_X, 8, Lcd::pui8RecInv8x8);
+ lcd.display_symbol(1, Lcd::LEFT_X, 8, Lcd::pui8RecInv8x8);
+ lcd.display_symbol(1, Lcd::RIGHT_X, 8, Lcd::pui8RecInv8x8);
+ lcd.display_symbol(2, Lcd::DOWN_X, 8, Lcd::pui8RecInv8x8);
+ lcd.display_symbol(1, Lcd::CENTER_X, 8, Lcd::pui8RecInv8x8);
+ }
+
+ } else {
+ if (ui8awake == 1) {
+ ui8awake = 0;
+
+ /* Clear BLLCD pin - turn off LCD backlight */
+ lcd.bl_disable();
+
+ /* Clear screen */
+ lcd.fill_pages(0, 4, 0x00);
+ }
+ }
+
+ if (ui8awake == 1) {
+ wait_ms(100);
+ uint64_t acc = adxl362.scan();
+ int16_t i16SensorX = static_cast<uint16_t>((acc & 0xffff000000000000) >> 48);
+ int16_t i16SensorY = static_cast<uint16_t>((acc & 0x0000ffff00000000) >> 32);
+ int16_t i16SensorZ = static_cast<uint16_t>((acc & 0x00000000ffff0000) >> 16);
+ int16_t i16SensorT = static_cast<uint16_t> (acc & 0x000000000000ffff);
+
+ sprintf((char *) ui8s, "x = % 5d", i16SensorX);
+ lcd.display_string(0, 0, (int8_t *) ui8s);
+
+ sprintf((char *) ui8s, "y = % 5d", i16SensorY);
+ lcd.display_string(1, 0, (int8_t *) ui8s);
+
+ sprintf((char *) ui8s, "z = % 5d", i16SensorZ);
+ lcd.display_string(2, 0, (int8_t *) ui8s);
+
+#if TEMP_ADC == 1
+ sprintf((char *)ui8s, "t = % 5d", i16SensorT);
+ lcd.display_string(3, 0, (int8_t *)ui8s);
+#else
+ float f32temp = ((float) i16SensorT + Lcd::ACC_TEMP_BIAS)
+ / (1 / Lcd::ACC_TEMP_SENSITIVITY); // -34.625
+ sprintf((char *) ui8s, "t = % 4.1f", f32temp);
+ lcd.display_string(3, 0, (int8_t *) ui8s);
+#endif
+
+ if (i16SensorY > Lcd::ACC_LIMIT) {
+ if (ui8xu == 0) {
+ ui8xu = 1;
+ lcd.display_symbol(0, Lcd::UP_X, 8, Lcd::pui8Rec8x8);
+ }
+
+ } else {
+ if (ui8xu == 1) {
+ ui8xu = 0;
+ lcd.display_symbol(0, Lcd::UP_X, 8, Lcd::pui8RecInv8x8);
+ }
+ }
+
+ if (i16SensorY < -Lcd::ACC_LIMIT) {
+ if (ui8xd == 0) {
+ ui8xd = 1;
+ lcd.display_symbol(2, Lcd::DOWN_X, 8, Lcd::pui8Rec8x8);
+ }
+
+ } else {
+ if (ui8xd == 1) {
+ ui8xd = 0;
+ lcd.display_symbol(2, Lcd::DOWN_X, 8, Lcd::pui8RecInv8x8);
+ }
+ }
+
+ if (i16SensorX > Lcd::ACC_LIMIT) {
+ if (ui8yu == 0) {
+ ui8yu = 1;
+ lcd.display_symbol(1, Lcd::RIGHT_X, 8, Lcd::pui8Rec8x8);
+ }
+
+ } else {
+ if (ui8yu == 1) {
+ ui8yu = 0;
+ lcd.display_symbol(1, Lcd::RIGHT_X, 8, Lcd::pui8RecInv8x8);
+ }
+ }
+
+ if (i16SensorX < -Lcd::ACC_LIMIT) {
+ if (ui8yd == 0) {
+ ui8yd = 1;
+ lcd.display_symbol(1, Lcd::LEFT_X, 8, Lcd::pui8Rec8x8);
+ }
+
+ } else {
+ if (ui8yd == 1) {
+ ui8yd = 0;
+ lcd.display_symbol(1, Lcd::LEFT_X, 8, Lcd::pui8RecInv8x8);
+ }
+ }
+
+ if ((ui8xu == 0) && (ui8xd == 0) && (ui8yu == 0) && (ui8yd == 0)) {
+ if (ui8all == 0) {
+ ui8all = 1;
+ lcd.display_symbol(1, Lcd::CENTER_X, 8, Lcd::pui8Rec8x8);
+ }
+
+ } else {
+ if (ui8all == 1) {
+ ui8all = 0;
+ lcd.display_symbol(1, Lcd::CENTER_X, 8, Lcd::pui8RecInv8x8);
+ }
+ }
+ }
+ }
+
+ }
+
--- a/examples/cn0216_example/main.cpp Fri Apr 29 17:34:07 2016 +0300
+++ b/examples/cn0216_example/main.cpp Tue May 17 14:21:17 2016 +0300
@@ -47,7 +47,8 @@
#include "mbed.h"
#include "CN0216.h"
-const float CAL_WEIGHT = (150.0);
+const float CAL_WEIGHT = (500.0);
+
Serial pc(USBTX, USBRX); ///< Serial interface to the pc
@@ -57,10 +58,15 @@
return;
}
-void display_data(uint32_t data, float weight)
+void display_data(uint32_t data, float weight, uint64_t timer)
{
- pc.printf("\r\nADC Input Voltage input = %f V", data); /* Send valid voltage input value */
+ pc.printf("\r\nADC Input Voltage input = %x V", data); /* Send valid voltage input value */
pc.printf("\r\nSensor Input Weight = %f grams", weight); /* Send valid grams value */
+
+
+ /* pc.printf("%d ",timer);
+ pc.printf("%x ",data);
+ pc.printf("%f ",weight);*/
pc.printf("\r\n");
}
@@ -69,17 +75,18 @@
* value in PPM
*/
-//#define SINGLE_CONVERSION
-#define CONTINOUS_CONVERSION
+#define SINGLE_CONVERSION
+//#define CONTINOUS_CONVERSION
int main()
{
/* Main variables */
+ //t.start();
CN0216 cn0216;
#ifdef SINGLE_CONVERSION
cn0216.init(CAL_WEIGHT);
#elif defined CONTINOUS_CONVERSION
- cn0216.init(CAL_WEIGHT, 0x00, 0x07);
+ cn0216.init(CAL_WEIGHT, 0x08, 0x07);
#else
#error define SINGLE_CONVERSION or CONTINOUS_CONVERSION, but not both
#endif
@@ -103,13 +110,15 @@
cn0216.calibrate(CN0216::COMPUTE_UNITS_PER_BIT);
/* Infinite loop */
+ uint64_t timer = 0;
while (1) {
wait_ms(1000);
- {
- uint32_t data = cn0216.read_u32();
- float weight = cn0216.compute_weight(data); // Convert ADC data to voltage
- display_data(data, weight); // Display data thru UART
- }
+
+ uint32_t data = cn0216.read_u32();
+ float weight = cn0216.compute_weight(data); // Convert ADC data to voltage
+ display_data(data, weight, timer); // Display data thru UART
+
+ timer++;
}
--- a/examples/drvdiag/Makefile Fri Apr 29 17:34:07 2016 +0300 +++ b/examples/drvdiag/Makefile Tue May 17 14:21:17 2016 +0300 @@ -6,9 +6,9 @@ ADI_LIBRARIES_PATH = ../../libraries MBED_LIBRARIES_PATH = ../../mbed DRIVER_WRAPPER_PATH = ./driver_wrapper -OBJECTS = ./main.o $(DRIVER_WRAPPER_PATH)/cn0357_diag.o $(DRIVER_WRAPPER_PATH)/cn0216_diag.o $(DRIVER_WRAPPER_PATH)/ad7790_diag.o $(DRIVER_WRAPPER_PATH)/ad7791_diag.o $(DRIVER_WRAPPER_PATH)/ad5270_diag.o $(ADI_LIBRARIES_PATH)/AD7790/AD7790.o $(ADI_LIBRARIES_PATH)/AD7791/AD7791.o $(ADI_LIBRARIES_PATH)/AD5270/AD5270.o $(ADI_LIBRARIES_PATH)/cn0357/CN0357.o $(ADI_LIBRARIES_PATH)/cn0216/CN0216.o +OBJECTS = ./main.o $(ADI_LIBRARIES_PATH)/ADXL362/ADXL362.o $(DRIVER_WRAPPER_PATH)/adxl362_diag.o $(DRIVER_WRAPPER_PATH)/cn0357_diag.o $(DRIVER_WRAPPER_PATH)/cn0216_diag.o $(DRIVER_WRAPPER_PATH)/ad7790_diag.o $(DRIVER_WRAPPER_PATH)/ad7791_diag.o $(DRIVER_WRAPPER_PATH)/ad5270_diag.o $(ADI_LIBRARIES_PATH)/AD7790/AD7790.o $(ADI_LIBRARIES_PATH)/AD7791/AD7791.o $(ADI_LIBRARIES_PATH)/AD5270/AD5270.o $(ADI_LIBRARIES_PATH)/cn0357/CN0357.o $(ADI_LIBRARIES_PATH)/cn0216/CN0216.o SYS_OBJECTS = $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_flash_ramfunc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/board.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/cmsis_nvic.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/hal_tick.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/mbed_overrides.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/retarget.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/startup_stm32f411xe.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_adc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_adc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_can.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cec.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cortex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_crc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cryp.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_cryp_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dac.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dac_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dcmi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dcmi_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dma.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dma2d.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dma_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_dsi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_eth.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_flash.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_flash_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_fmpi2c_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_fmpi2c.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_msp_template.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_gpio.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_hash.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_hash_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_hcd.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2c.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2c_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2s.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_i2s_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_irda.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_iwdg.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_lptim.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_ltdc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_ltdc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_smartcard.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_nand.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_nor.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pccard.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pcd.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pcd_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pwr.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_pwr_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_qspi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rcc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rcc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rng.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rtc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_rtc_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sai.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sai_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sd.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sdram.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_spdifrx.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_spi.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_sram.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_tim.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_tim_ex.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_uart.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_usart.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_hal_wwdg.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_fmc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_fsmc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_sdmmc.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/stm32f4xx_ll_usb.o $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/system_stm32f4xx.o -INCLUDE_PATHS = -I. -I$(MBED_LIBRARIES_PATH) -I$(ADI_LIBRARIES_PATH) -I$(ADI_LIBRARIES_PATH)/ad5270 -I$(ADI_LIBRARIES_PATH)/ad7790 -I$(ADI_LIBRARIES_PATH)/ad7791 -I$(ADI_LIBRARIES_PATH)/cn0357 -I$(ADI_LIBRARIES_PATH)/cn0216 -I$(DRIVER_WRAPPER_PATH) -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM/TARGET_STM32F4 -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F411RE -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM +INCLUDE_PATHS = -I. -I$(MBED_LIBRARIES_PATH) -I$(ADI_LIBRARIES_PATH) -I$(ADI_LIBRARIES_PATH)/adxl362 -I$(ADI_LIBRARIES_PATH)/ad5270 -I$(ADI_LIBRARIES_PATH)/ad7790 -I$(ADI_LIBRARIES_PATH)/ad7791 -I$(ADI_LIBRARIES_PATH)/cn0357 -I$(ADI_LIBRARIES_PATH)/cn0216 -I$(DRIVER_WRAPPER_PATH) -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM/TARGET_STM32F4 -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F411RE -I$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM LIBRARY_PATHS = -L$(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM LIBRARIES = -lmbed LINKER_SCRIPT = $(MBED_LIBRARIES_PATH)/TARGET_NUCLEO_F411RE/TOOLCHAIN_GCC_ARM/STM32F411XE.ld @@ -38,9 +38,9 @@ ifeq ($(DEBUG), 1) - CC_FLAGS += -DDEBUG -O0 + CC_FLAGS += -DDEBUG -Og else - CC_FLAGS += -DNDEBUG -Os + CC_FLAGS += -DNDEBUG -Og endif .PHONY: all clean lst size
--- a/examples/drvdiag/config.h Fri Apr 29 17:34:07 2016 +0300 +++ b/examples/drvdiag/config.h Tue May 17 14:21:17 2016 +0300 @@ -45,11 +45,12 @@ * ********************************************************************************/ -#define AD7791_PRESENT -#define CN0216_PRESENT +//#define AD7791_PRESENT +//#define CN0216_PRESENT //#define AD7790_PRESENT //#define AD5270_PRESENT //#define CN0357_PRESENT +#define ADXL362_PRESENT #define SPI_LOW_LEVEL #ifdef AD7791_PRESENT @@ -77,6 +78,11 @@ #include "cn0357_diag.h" #endif +#ifdef ADXL362_PRESENT +#include "ADXL362.h" +#include "adxl362_diag.h" +#endif + using namespace std; //------------------------------------ // Hyperterminal configuration @@ -84,7 +90,8 @@ //------------------------------------ #ifdef SPI_LOW_LEVEL -DigitalOut CSA_pin(D8); // cs adc +//DigitalOut CSA_pin(D8); // cs adc +DigitalOut CSA_pin(D9); // cs accel DigitalOut CSR_pin(D6); // cs rdac SPI spibus(SPI_MOSI, SPI_MISO, SPI_SCK); #endif @@ -114,3 +121,9 @@ CN0357 cn0357; CN0357_Diag cn0357diag(cn0357); #endif + + +#ifdef ADXL362_PRESENT +ADXL362 adxl362(D9); +ADXL362_Diag adxl362diag(adxl362); +#endif
--- a/examples/drvdiag/driver_wrapper/AD5270_diag.cpp Fri Apr 29 17:34:07 2016 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/**
-* @file ad5270_diag.cpp
-* @brief Source file for the AD5270 wrapper used by the driver diag
-* @author Analog Devices Inc.
-*
-* For support please go to:
-* Github: https://github.com/analogdevicesinc/mbed-adi
-* Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
-* More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
-
-********************************************************************************
-* Copyright 2016(c) Analog Devices, Inc.
-*
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-* - Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* - Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in
-* the documentation and/or other materials provided with the
-* distribution.
-* - Neither the name of Analog Devices, Inc. nor the names of its
-* contributors may be used to endorse or promote products derived
-* from this software without specific prior written permission.
-* - The use of this software may or may not infringe the patent rights
-* of one or more patent holders. This license does not release you
-* from the requirement that you obtain separate licenses from these
-* patent holders to use this software.
-* - Use of the software either in source or binary form, must be run
-* on or directly connected to an Analog Devices Inc. component.
-*
-* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
-* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
-* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-* IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-* LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-********************************************************************************/
-
-#include "mbed.h"
-#include <stdio.h>
-#include <vector>
-#include <string>
-#include "AD5270_diag.h"
-
-extern Serial pc;
-extern vector<string> cmdbuffer;
-
-AD5270_Diag::AD5270_Diag(AD5270& ad) : dut(ad)
-{
-
-}
-void AD5270_Diag::enable_50TP_programming()
-{
- dut.enable_50TP_programming();
- pc.printf("Enabled 50TP prog");
-
-}
-void AD5270_Diag::store_50TP()
-{
- dut.store_50TP();
- pc.printf("50TP stored");
-}
-void AD5270_Diag::disable_50TP_programming()
-{
- dut.disable_50TP_programming();
- pc.printf("Disabled 50TP prog");
-}
-
-void AD5270_Diag::write_RDAC()
-{
- float res = strtof(cmdbuffer[1].c_str(), NULL);
- dut.write_RDAC(res);
- pc.printf("Wrote %f", res);
-}
-void AD5270_Diag::read_RDAC()
-{
- pc.printf("Read %f", dut.read_RDAC());
-}
-void AD5270_Diag::write_cmd()
-{
- uint8_t reg = strtol(cmdbuffer[1].c_str(), NULL, 16);
- uint8_t regVal = strtol(cmdbuffer[2].c_str(), NULL, 16);
- pc.printf("Returned %x: ", dut.write_cmd(reg, regVal));
-}
-
-void AD5270_Diag::set_HiZ()
-{
- pc.printf("SDO set to HiZ");
- dut.set_SDO_HiZ();
-}
-
-void AD5270_Diag::read_50TP_last_address(void)
-{
- pc.printf("Returned %x:", dut.read_50TP_last_address());
-}
-void AD5270_Diag::read_50TP_memory(void)
-{
- uint8_t reg = strtol(cmdbuffer[1].c_str(), NULL, 16);
- pc.printf("Returned %x", dut.read_50TP_memory(reg));
-}
-
-void AD5270_Diag::write_ctrl_reg(void)
-{
- uint8_t val = strtol(cmdbuffer[1].c_str(), NULL, 16);
- dut.write_ctrl_reg(val);
- pc.printf("Wrote %x to ctrl_reg", val );
-}
-void AD5270_Diag::read_ctrl_reg(void)
-{
- pc.printf("Read %x from ctrl_reg", dut.read_ctrl_reg());
-}
-
-void AD5270_Diag::reset_RDAC(void)
-{
- dut.reset_RDAC();
- pc.printf("Resetted rdac");
-}
-void AD5270_Diag::change_mode(void)
-{
- uint8_t val = strtol(cmdbuffer[1].c_str(), NULL, 16);
- dut.change_mode(static_cast<AD5270::AD5270Modes_t>(val));
- pc.printf("Changed mode to %x", val);
-}
-
-void AD5270_Diag::write_wiper_reg(void)
-{
- uint16_t val = strtol(cmdbuffer[1].c_str(), NULL, 16);
- dut.write_wiper_reg(val);
- pc.printf("Wrote %x to wiper", val);
-}
-void AD5270_Diag::read_wiper_reg(void)
-{
- pc.printf("Read %x from wiper", dut.read_wiper_reg());
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/drvdiag/driver_wrapper/adxl362_diag.cpp Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,148 @@
+/**
+ * @file ADXL362_diag.cpp
+ * @brief Source file for the ADXL362 wrapper used by the driver diag
+ * @author Analog Devices Inc.
+ *
+ * For support please go to:
+ * Github: https://github.com/analogdevicesinc/mbed-adi
+ * Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
+ * More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
+
+ ********************************************************************************
+ * Copyright 2016(c) Analog Devices, Inc.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * - Neither the name of Analog Devices, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * - The use of this software may or may not infringe the patent rights
+ * of one or more patent holders. This license does not release you
+ * from the requirement that you obtain separate licenses from these
+ * patent holders to use this software.
+ * - Use of the software either in source or binary form, must be run
+ * on or directly connected to an Analog Devices Inc. component.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ********************************************************************************/
+
+#include "mbed.h"
+#include <stdio.h>
+#include <vector>
+#include <string>
+#include "ADXL362.h"
+#include "ADXL362_diag.h"
+
+extern Serial pc;
+extern vector<string> cmdbuffer;
+volatile bool awake;
+
+ADXL362_Diag::ADXL362_Diag(ADXL362& ad) :
+ dut(ad)
+{
+
+}
+
+/** Low level SPI bus comm methods */
+void ADXL362_Diag::reset(void)
+{
+ dut.reset();
+ pc.printf("Reseted ADXL362");
+}
+
+void ADXL362_Diag::write_reg(void)
+{
+ uint8_t reg = strtol(cmdbuffer[1].c_str(), NULL, 16);
+ uint8_t data = strtol(cmdbuffer[2].c_str(), NULL, 16);
+ dut.write_reg(static_cast<ADXL362::ADXL362_register_t>(reg), data);
+ pc.printf("Wrote reg");
+}
+
+void ADXL362_Diag::read_reg(void)
+{
+ uint8_t reg = strtol(cmdbuffer[1].c_str(), NULL, 16);
+ uint8_t data = dut.read_reg(static_cast<ADXL362::ADXL362_register_t>(reg));
+ pc.printf("Read %x ", data);
+}
+
+void ADXL362_Diag::scan(void)
+{
+ uint64_t data;
+ data = dut.scan();
+ pc.printf("Data: %x", data);
+}
+
+void ADXL362_Diag::read_status(void)
+{
+ uint8_t data = dut.read_status();
+ pc.printf("Status - %x reg", data);
+}
+
+void ADXL362_Diag::write_ctl(void)
+{
+ uint8_t data = strtol(cmdbuffer[1].c_str(), NULL, 16);
+
+ dut.set_power_ctl_reg(data);
+ pc.printf("Wrote reg %x", data);
+}
+
+void ADXL362_Diag::write_ftl(void)
+{
+ uint8_t data = strtol(cmdbuffer[1].c_str(), NULL, 16);
+
+ dut.set_filter_ctl_reg(data);
+ pc.printf("Wrote reg %x", data);
+}
+
+void ADXL362_Diag::fifo_read_nr_of_entries(void)
+{
+ uint16_t data = dut.fifo_read_nr_of_entries();
+ pc.printf("fifo entries - %d ", data);
+}
+void ADXL362_Diag::fifo_setup(void)
+{
+ uint8_t data = strtol(cmdbuffer[1].c_str(), NULL, 10);
+ uint16_t entry = strtol(cmdbuffer[2].c_str(), NULL, 10);
+ dut.fifo_setup(static_cast<bool>(data & 0x04),
+ static_cast<ADXL362::ADXL362_FIFO_modes_t>(data & 0x03), entry);
+ pc.printf("Wrote reg");
+}
+void ADXL362_Diag::fifo_read_u16(void)
+{
+ uint16_t data = dut.fifo_read_u16();
+ pc.printf("fifo entry - %x ", data);
+}
+void ADXL362_Diag::fifo_scan(void)
+{
+ uint64_t data = dut.fifo_scan();
+ pc.printf("fifo scan - %x ", data);
+}
+
+void rising_adxl362()
+{
+ awake = true;
+}
+void falling_adxl362()
+{
+ awake = false;
+
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/drvdiag/driver_wrapper/adxl362_diag.h Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,76 @@
+/**
+* @file adxl362_diag.h
+* @brief Header file for the ADXL362 wrapper used by the driver diag
+* @author Analog Devices Inc.
+*
+* For support please go to:
+* Github: https://github.com/analogdevicesinc/mbed-adi
+* Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
+* More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
+
+********************************************************************************
+* Copyright 2016(c) Analog Devices, Inc.
+*
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+* - Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in
+* the documentation and/or other materials provided with the
+* distribution.
+* - Neither the name of Analog Devices, Inc. nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+* - The use of this software may or may not infringe the patent rights
+* of one or more patent holders. This license does not release you
+* from the requirement that you obtain separate licenses from these
+* patent holders to use this software.
+* - Use of the software either in source or binary form, must be run
+* on or directly connected to an Analog Devices Inc. component.
+*
+* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+* IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+********************************************************************************/
+#ifndef ADXL362_DIAG_H_
+#define ADXL362_DIAG_H_
+
+#include "ADXL362.h"
+
+class ADXL362_Diag
+{
+
+public:
+ ADXL362_Diag(ADXL362& ad);
+ /** Low level SPI bus comm methods */
+ void reset(void);
+ void write_reg(void);
+ void read_reg(void);
+ void scan(void);
+ void read_status(void);
+ void write_ctl(void);
+ void write_ftl(void);
+ void fifo_read_nr_of_entries(void);
+ void fifo_setup(void);
+ void fifo_read_u16(void);
+ void fifo_scan(void);
+
+
+private:
+ ADXL362& dut;
+};
+void rising_adxl362();
+void falling_adxl362();
+
+#endif /* ADXL362_DIAG_H_ */
--- a/examples/drvdiag/main.cpp Fri Apr 29 17:34:07 2016 +0300
+++ b/examples/drvdiag/main.cpp Tue May 17 14:21:17 2016 +0300
@@ -55,6 +55,12 @@
Serial pc(SERIAL_TX, SERIAL_RX);
vector<string> cmdbuffer;
+static const uint16_t INACT_VAL = 50;
+static const uint16_t INACT_TIMER = 25 * 10;
+static const uint16_t ACT_VAL = 50;
+static const uint8_t ACT_TIMER = 100;
+static const uint16_t SCAN_SENSOR_TIME = 500;
+
class commands
{
public:
@@ -145,6 +151,54 @@
{"cnparam" , 2, [](){cn0357diag.set_sensor_param();}}
#endif
+#ifdef ADXL362_PRESENT
+ {"xlrst" , 0, [](){adxl362diag.reset();}},
+ {"xlscan" , 0, [](){adxl362diag.scan();}},
+ {"xlwr" , 2, [](){adxl362diag.write_reg();}},
+ {"xlrd" , 1, [](){adxl362diag.read_reg();}},
+ {"xlstat", 0 , [](){adxl362diag.read_status();}},
+ {"xlctl", 1 , [](){adxl362diag.write_ctl(); }},
+ {"xlftl", 1 , [](){adxl362diag.write_ftl(); }},
+
+ {"xlfrn", 0, [](){adxl362diag.fifo_read_nr_of_entries(); }},
+ {"xlfset", 2, [](){adxl362diag.fifo_setup(); }},
+ {"xlfr16", 0, [](){adxl362diag.fifo_read_u16(); }},
+ {"xlfrs", 0, [](){adxl362diag.fifo_scan(); }},
+ {"xlintinit",0,[](){
+ adxl362.reset();
+ pc.printf("adxl362 reset\r\n");
+ wait_ms(500);
+ adxl362.set_activity_threshold(ACT_VAL);
+ adxl362.set_activity_time(ACT_TIMER / 10);
+
+ adxl362.set_inactivity_threshold(INACT_VAL);
+ adxl362.set_inactivity_time(INACT_TIMER);
+ adxl362.set_act_inact_ctl_reg(0x3f);
+
+ pc.printf("adxl362 set activity/inactivity\r\n");
+
+ adxl362.disable_interrupt2();
+ adxl362.set_interrupt2_pin(D2,0x40,&rising_adxl362,&falling_adxl362);
+ extern bool awake;
+ awake = true;
+
+ pc.printf("adxl362 set interrupt\r\n");
+ adxl362.enable_interrupt2();
+ adxl362.set_mode(ADXL362::MEASUREMENT);
+ pc.printf("adxl362 measurement started\r\n");
+
+ }},
+ {
+ "xlawake",0,[](){
+ extern bool awake;
+ if(awake) pc.printf("awaken");
+ else pc.printf("asleep");
+ }
+ },
+
+
+#endif
+
};
// *INDENT-ON*
@@ -203,7 +257,7 @@
int main()
{
- ad7791.frequency(100000);
+ // ad7791.frequency(100000);
pc.printf("\r\n#### DrvDiag ####\r\n");
while(1) {
--- a/libraries/CN0357/CN0357.cpp Fri Apr 29 17:34:07 2016 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,229 +0,0 @@
-/**
-* @file cn0357.cpp
-* @brief Source file for CN0357
-* @author Analog Devices Inc.
-*
-* For support please go to:
-* Github: https://github.com/analogdevicesinc/mbed-adi
-* Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
-* Product: www.analog.com/EVAL-CN0357-ARDZ
-* More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
-
-********************************************************************************
-* Copyright 2016(c) Analog Devices, Inc.
-*
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-* - Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* - Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in
-* the documentation and/or other materials provided with the
-* distribution.
-* - Neither the name of Analog Devices, Inc. nor the names of its
-* contributors may be used to endorse or promote products derived
-* from this software without specific prior written permission.
-* - The use of this software may or may not infringe the patent rights
-* of one or more patent holders. This license does not release you
-* from the requirement that you obtain separate licenses from these
-* patent holders to use this software.
-* - Use of the software either in source or binary form, must be run
-* on or directly connected to an Analog Devices Inc. component.
-*
-* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
-* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
-* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-* IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-* LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-********************************************************************************/
-
-#include "mbed.h"
-#include "AD7790.h"
-#include "AD5270.h"
-#include "CN0357.h"
-
-/**
- * @brief CN0357 constructor
- * @param CSAD7790 - (optional)chip select of the AD7790
- * @param CSAD5270 - (optional)chip select of the AD5270
- * @param MOSI - (optional)pin of the SPI interface
- * @param MISO - (optional)pin of the SPI interface
- * @param SCK - (optional)pin of the SPI interface
- */
-CN0357::CN0357(PinName CSAD7790, PinName CSAD5270, PinName MOSI, PinName MISO,
- PinName SCK) :
- _vref(1.2), _sensor_sensitivity(0), _sensor_range(0), _RDACvalue(0),
- ad7790(_vref, CSAD7790, MOSI, MISO, SCK), ad5270(CSAD5270, 20000.0, MOSI, MISO, SCK)
-
-{
-}
-
-/**
- * @brief initializes the AD7790 and the AD5270
- * @param range - range of the sensor used (in ppm)
- * @param sensitivity - sensitivity of the sensor (A/ppm)
- * @param jp - (optional)jumper configuration of the CN0357
- * @param mode_val - (optional)if jp is set to InternalADC, configures the mode register of the Internal ADC
- * @param filter_val - (optional)if jp is set to InternalADC, configures the filter register of the Internal ADC
- */
-void CN0357::init(float range, float sensitivity, JumperConfig_t jp, uint8_t mode_val, uint8_t filter_val)
-{
- ad5270.frequency(500000);
- ad7790.frequency(500000);
-
- float resistance = set_sensor_parameters(range, sensitivity);
-
- if(jp == INTERNAL_AD7790) {
- _AD7790_init(mode_val, filter_val);
- }
- _rdac_init(resistance);
-}
-
-/**
- * @brief initializes the RDAC and sets SDO to HiZ
- * @param resistance - resistance value to initialize the RDAC
- * @return
- */
-void CN0357::_rdac_init(float resistance)
-{
- /* RDAC initialization*/
- /* Compute for the nearest RDAC value from given resistance and save data to the structure */
- set_RDAC_value(resistance);
- /* Set AD5270 SDO to Hi-Z */
- ad5270.set_SDO_HiZ();
-}
-
-/**
- * @brief initializes the AD7790
- * @param mode_val - configures the mode register of the Internal ADC
- * @param filter_val - configures the filter register of the Internal ADC
- */
-void CN0357::_AD7790_init(uint8_t mode_val, uint8_t filter_val)
-{
- ad7790.reset();
- wait_ms(50);
-
- ad7790.write_mode_reg(mode_val);
- wait_us(2);
-
- ad7790.write_filter_reg(filter_val);
- wait_ms(50);
-}
-
-/**
- * @brief reads the status register of the AD7790
- * @return status register value
- */
-uint8_t CN0357::read_adc_status(void)
-{
- return ad7790.read_status_reg();
-}
-
-/**
- * @brief reads the ADC and computes the sensor voltage
- * @return sensor voltage
- */
-float CN0357::read_sensor_voltage(void)
-{
- return ad7790.read_voltage();
-}
-
-/**
- * @brief reads the data register of the AD7790
- * @return data register value
- */
-uint16_t CN0357::read_sensor(void)
-{
- return ad7790.read_u16();
-}
-
-/**
- * @brief reads and computes the sensor reading in PPM
- * @return value of the sensor reading in PPM
- */
-float CN0357::read_ppm()
-{
- return calc_ppm(ad7790.read_voltage()); /* Convert voltage to Gas concentration*/
-}
-
-/**
- * @brief computes a value in PPM from a reading received as a param
- * @param adcVoltage - voltage to be converted to PPM
- * @return sensor value in PPM
- */
-float CN0357::calc_ppm(float adcVoltage)
-{
- float fConcentration = 0;
- fConcentration = (fabs(adcVoltage) / _RDACvalue) / _sensor_sensitivity;
- return fConcentration;
-}
-
-/**
- * @brief computes voltage from a 16 bit ADC value received as a parameter
- * @param data - ADC value
- * @return sensor voltage
- */
-float CN0357::data_to_voltage(uint16_t data)
-{
- return ad7790.data_to_voltage(data);
-}
-
-/**
- * @brief sets a new value for the RDAC
- * @param resistance new value for the resistance
- * @return none
- */
-void CN0357::set_RDAC_value(float resistance)
-{
- _RDACvalue = ad5270.write_RDAC(resistance);
-}
-
-/**
- * @brief getter method for RDAC value
- * @return value of the RDAC in ohms
- */
-float CN0357::get_RDAC_value()
-{
- return _RDACvalue;
-}
-
-/**
- * @brief set sensor range and sensitivity
- * sets sensor range, sensitivity
- * returns suggested resistance value for feedback resistor
- * @param range - range of the sensor used (in ppm)
- * @param sensitivity - sensitivity of the sensor (in A/ppm)
- * @return suggested resistance value for feedback resistor
- */
-float CN0357::set_sensor_parameters(float range, float sensitivity)
-{
- _sensor_sensitivity = static_cast<float>(sensitivity);
- _sensor_range = range;
- return (_vref / (static_cast<float>(_sensor_range * _sensor_sensitivity)));
-}
-
-/**
- * @brief getter method for sensor sensitivity
- * @return sensor sensitivity (in A/ppm)
- */
-float CN0357::get_sensor_sensitivity()
-{
- return _sensor_sensitivity;
-}
-
-/**
- * @brief getter method for sensor range
- * @return sensor range (in ppm)
- */
-float CN0357::get_sensor_range()
-{
- return _sensor_range;
-}
--- a/libraries/CN0357/CN0357.h Fri Apr 29 17:34:07 2016 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/**
-* @file cn0357.h
-* @brief Header file for CN0357
-* @author Analog Devices Inc.
-*
-* For support please go to:
-* Github: https://github.com/analogdevicesinc/mbed-adi
-* Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
-* Product: www.analog.com/EVAL-CN0357-ARDZ
-* More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
-
-********************************************************************************
-* Copyright 2016(c) Analog Devices, Inc.
-*
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-* - Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* - Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in
-* the documentation and/or other materials provided with the
-* distribution.
-* - Neither the name of Analog Devices, Inc. nor the names of its
-* contributors may be used to endorse or promote products derived
-* from this software without specific prior written permission.
-* - The use of this software may or may not infringe the patent rights
-* of one or more patent holders. This license does not release you
-* from the requirement that you obtain separate licenses from these
-* patent holders to use this software.
-* - Use of the software either in source or binary form, must be run
-* on or directly connected to an Analog Devices Inc. component.
-*
-* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
-* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
-* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-* IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-* LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-********************************************************************************/
-
-#ifndef CN0357_H
-#define CN0357_H
-
-#include "mbed.h"
-#include "AD7790.h"
-#include "AD5270.h"
-
-/**
- * @brief EVAL-CN0357 toxic gas sensor shield
- */
-class CN0357
-{
-public:
-
-private:
- float _vref;
- float _sensor_sensitivity;
- float _sensor_range;
- float _RDACvalue;
-public:
- AD7790 ad7790; ///< AD7790 instance - can be used for manual overriding
- AD5270 ad5270; ///< AD5270 instance - can be used for manual overriding
-
- /// CN0357 shield jumper configuration
- typedef enum {
- INTERNAL_AD7790 = 0, ///< The shield's AD7790 is used
- EXTERNAL_ADC ///< Sensor analog output is routed to A1 pin of the shield
- } JumperConfig_t;
-
- CN0357(PinName CSAD7790 = D8, PinName CSAD5270 = D6, PinName MOSI = SPI_MOSI, PinName MISO = SPI_MISO, PinName SCK = SPI_SCK);
- void init(float range, float sensitivity, JumperConfig_t jp = INTERNAL_AD7790, uint8_t mode_val = _DEFAULT_MODE_VAL, uint8_t filter_val = _DEFAULT_FILTER_VAL);
-
- uint8_t read_adc_status(void);
- uint16_t read_sensor(void);
- float read_sensor_voltage(void);
- float data_to_voltage(uint16_t data);
- float calc_ppm(float adcVoltage);
- float read_ppm(void);
-
- void set_RDAC_value(float resistor_val);
- float get_RDAC_value(void);
- float set_sensor_parameters(float range, float sensitivity);
- float get_sensor_range(void);
- float get_sensor_sensitivity(void);
-
-private:
- const static int _RESET = 0xff;
- const static int _DEFAULT_MODE_VAL = AD7790::MD1 | AD7790::MD0; // POWERDOWN MODE
- const static int _DEFAULT_FILTER_VAL = AD7790::FS0 | AD7790::FS1 | AD7790::FS2;
- void _rdac_init(float resistanceValue);
- void _AD7790_init(uint8_t mode_val, uint8_t filter_val);
-
-};
-
-#endif // CN0357_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libraries/adxl362/ADXL362.cpp Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,352 @@
+#include <stdint.h>
+#include "mbed.h"
+#include "ADXL362.h"
+
+ADXL362::ADXL362(PinName CS, PinName MOSI, PinName MISO, PinName SCK) :
+ adxl362(MOSI, MISO, SCK), cs(CS), int1(NULL), int2(NULL), int1_poll(NC), int2_poll(
+ NC)
+{
+ cs = true; // cs is active low
+ adxl362.format(8, _SPI_MODE);
+ temp_stored_in_fifo = false;
+ int1_act_low = true;
+ int2_act_low = true;
+}
+
+void ADXL362::frequency(int hz)
+{
+ adxl362.frequency(hz);
+}
+
+void ADXL362::reset()
+{
+ adxl362.format(8, _SPI_MODE);
+ cs = false;
+ // Writing Code 0x52 (representing the letter, R, in ASCII or unicode) to this register immediately resets the ADXL362.
+ write_reg(SOFT_RESET, 0x52);
+ cs = true;
+ // A latency of approximately 0.5 ms is required after soft reset.
+}
+
+void ADXL362::write_reg(ADXL362_register_t reg, uint8_t data)
+{
+ adxl362.format(8, _SPI_MODE);
+ cs = false;
+ adxl362.write(WRITE_REG_CMD);
+ adxl362.write(static_cast<uint8_t>(reg));
+ adxl362.write(static_cast<uint8_t>(data));
+ cs = true;
+}
+
+uint8_t ADXL362::read_reg(ADXL362_register_t reg)
+{
+ uint8_t ret_val;
+ adxl362.format(8, _SPI_MODE);
+ cs = false;
+ adxl362.write(READ_REG_CMD);
+ adxl362.write(static_cast<uint8_t>(reg));
+ ret_val = adxl362.write(DUMMY_BYTE);
+ cs = true;
+ return ret_val;
+}
+
+void ADXL362::write_reg_u16(ADXL362_register_t reg, uint16_t data)
+{
+ adxl362.format(8, _SPI_MODE);
+
+ cs = false;
+ adxl362.write(WRITE_REG_CMD);
+ adxl362.write(static_cast<uint8_t>(reg));
+ adxl362.write(static_cast<uint8_t>(data & 0xff));
+ adxl362.write(static_cast<uint8_t>((data & 0xff00) >> 8));
+
+ cs = true;
+}
+uint16_t ADXL362::read_reg_u16(ADXL362_register_t reg)
+{
+ uint16_t ret_val = 0;
+ adxl362.format(8, _SPI_MODE);
+
+ cs = false;
+ adxl362.write(READ_REG_CMD);
+ adxl362.write(static_cast<uint8_t>(reg));
+ ret_val = adxl362.write(DUMMY_BYTE);
+ ret_val = ret_val | (adxl362.write(DUMMY_BYTE) << 8);
+ cs = true;
+
+ return ret_val;
+}
+
+uint64_t ADXL362::scan()
+{
+ uint64_t ret_val = 0;
+ uint16_t x, y, z, t = 0;
+
+ adxl362.format(8, _SPI_MODE);
+ cs = false;
+ adxl362.write(READ_REG_CMD);
+ adxl362.write(static_cast<uint8_t>(XDATA_L));
+
+ x = adxl362.write(DUMMY_BYTE);
+ x = x | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
+ y = adxl362.write(DUMMY_BYTE);
+ y = y | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
+ z = adxl362.write(DUMMY_BYTE);
+ z = z | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
+ t = adxl362.write(DUMMY_BYTE);
+ t = t | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
+ // format xxyyzztt
+ ret_val = static_cast<uint64_t>(x) << 48;
+ ret_val |= static_cast<uint64_t>(y) << 32;
+ ret_val |= static_cast<uint64_t>(z) << 16;
+ ret_val |= static_cast<uint64_t>(t);
+ cs = true;
+ return ret_val;
+}
+
+uint8_t ADXL362::scanx_u8()
+{
+ return read_reg(XDATA);
+}
+uint16_t ADXL362::scanx()
+{
+ return read_reg_u16(XDATA_L);
+}
+uint8_t ADXL362::scany_u8()
+{
+ return read_reg(YDATA);
+}
+
+uint16_t ADXL362::scany()
+{
+ return read_reg_u16(YDATA_L);
+}
+uint8_t ADXL362::scanz_u8()
+{
+ return read_reg(ZDATA);
+}
+
+uint16_t ADXL362::scanz()
+{
+ return read_reg_u16(ZDATA_L);
+}
+uint16_t ADXL362::scant()
+{
+ return read_reg_u16(TEMP_L);
+}
+
+void ADXL362::set_mode(ADXL362_modes_t mode)
+{
+ uint8_t reg_val;
+ reg_val = read_reg(POWER_CTL);
+ reg_val = reg_val | static_cast<uint8_t>(mode);
+ write_reg(POWER_CTL, reg_val);
+}
+
+void ADXL362::set_activity_threshold(uint16_t threshold)
+{
+ write_reg_u16(THRESH_ACT_L, threshold);
+}
+void ADXL362::set_activity_time(uint8_t time)
+{
+ write_reg(TIME_ACT, time);
+}
+void ADXL362::set_inactivity_threshold(uint16_t threshold)
+{
+ write_reg_u16(THRESH_INACT_L, threshold);
+}
+void ADXL362::set_inactivity_time(uint16_t time)
+{
+ write_reg_u16(TIME_INACT_L, time);
+}
+
+void ADXL362::set_polling_interrupt1_pin(PinName in, uint8_t data,
+ PinMode pull)
+{
+ if ((data & 0x7F) != 0) {
+ write_reg(INTMAP1, data);
+ int1_poll = DigitalIn(in);
+ int1_poll.mode(pull);
+ if (data & 0x80) {
+ int1_act_low = true;
+ } else {
+ int1_act_low = false;
+ }
+ }
+}
+
+void ADXL362::set_polling_interrupt2_pin(PinName in, uint8_t data,
+ PinMode pull)
+{
+ if ((data & 0x7F) != 0) {
+ write_reg(INTMAP2, data);
+ int2_poll = DigitalIn(in);
+ int2_poll.mode(pull);
+ if (data & 0x80) {
+ int2_act_low = true;
+ } else {
+ int2_act_low = false;
+ }
+ }
+}
+
+bool ADXL362::get_int1()
+{
+ return (int1_poll.read() != int1_act_low); // boolean XOR
+}
+
+bool ADXL362::get_int2()
+{
+ return (int1_poll.read() != int1_act_low); // boolean XOR
+}
+
+void ADXL362::set_interrupt1_pin(PinName in, uint8_t data,
+ void (*callback_rising)(void), void (*callback_falling)(void), PinMode pull)
+{
+ if ((data & 0x7F) != 0) {
+ write_reg(INTMAP1, data);
+ //int1 = InterruptIn(in);
+ delete int1;
+ int1 = new InterruptIn(in);
+ int1->mode(pull);
+ if(callback_falling != NULL) int1->fall(callback_falling);
+ if(callback_rising != NULL) int1->rise(callback_rising);
+ if (data & 0x80) {
+ int1_act_low = true;
+ } else {
+ int1_act_low = false;
+ }
+ }
+}
+void ADXL362::set_interrupt2_pin(PinName in, uint8_t data,
+ void (*callback_rising)(void), void (*callback_falling)(void), PinMode pull)
+{
+ if ((data & 0x7F) != 0) {
+ write_reg(INTMAP2, data);
+ delete int2;
+ int2 = new InterruptIn(in);
+ int2->mode(pull);
+ if(callback_falling != NULL) int2->fall(callback_falling);
+ if(callback_rising != NULL) int2->rise(callback_rising);
+ if (data & 0x80) {
+ int2_act_low = true;
+ } else {
+ int2_act_low = false;
+ }
+ }
+}
+
+void ADXL362::enable_interrupt1()
+{
+ int1->enable_irq();
+}
+
+void ADXL362::enable_interrupt2()
+{
+ int2->enable_irq();
+}
+
+void ADXL362::disable_interrupt1()
+{
+ int1->disable_irq();
+}
+
+void ADXL362::disable_interrupt2()
+{
+ int2->disable_irq();
+}
+
+void ADXL362::set_act_inact_ctl_reg(uint8_t data)
+{
+ write_reg(ACT_INACT_CTL, data);
+}
+
+void ADXL362::set_power_ctl_reg(uint8_t data)
+{
+ write_reg(POWER_CTL, data);
+}
+
+void ADXL362::set_filter_ctl_reg(uint8_t data)
+{
+ write_reg(FILTER_CTL, data);
+}
+
+uint8_t ADXL362::read_status()
+{
+ return read_reg(STATUS);
+}
+
+uint16_t ADXL362::fifo_read_nr_of_entries()
+{
+ return read_reg_u16(FIFO_ENTRIES_L);
+}
+
+void ADXL362::fifo_setup(bool store_temp, ADXL362_FIFO_modes_t mode, uint16_t nr_of_entries)
+{
+ uint8_t fifo_ctl = static_cast<uint8_t>(mode);
+ temp_stored_in_fifo = store_temp;
+
+ fifo_ctl = fifo_ctl | (static_cast<uint8_t>(temp_stored_in_fifo) << 2);
+
+ if (nr_of_entries > 0xff) {
+ fifo_ctl = fifo_ctl | static_cast<uint8_t>(AH);
+ }
+ write_reg(FIFO_CONTROL, fifo_ctl);
+ write_reg(FIFO_SAMPLES, static_cast<uint8_t>(nr_of_entries & 0xff));
+
+}
+
+uint16_t ADXL362::fifo_read_u16()
+{
+ uint16_t ret_val = 0;
+ adxl362.format(8, _SPI_MODE);
+
+ cs = false;
+ adxl362.write(READ_FIFO_CMD);
+ ret_val = adxl362.write(DUMMY_BYTE);
+ ret_val = (ret_val) | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
+ cs = true;
+
+ return ret_val;
+}
+
+uint64_t ADXL362::fifo_scan()
+{
+
+ uint64_t ret_val = 0;
+ uint16_t x = 0, y = 0, z = 0, dummy, t = 0, sample_type;
+
+ adxl362.format(8, _SPI_MODE);
+ cs = false;
+ adxl362.write(READ_FIFO_CMD);
+ uint8_t samples = (temp_stored_in_fifo) ? 4 : 3;
+ for(uint8_t i = 0; i < samples; i++) {
+ dummy = adxl362.write(DUMMY_BYTE);
+ dummy = dummy | static_cast<uint16_t>(adxl362.write(DUMMY_BYTE) << 8);
+ sample_type = (dummy & 0xc000) >> 14;
+ dummy = dummy & 0x3fff;
+ switch(sample_type) {
+ case 0: // x
+ x = dummy;
+ break;
+ case 1: // y
+ y = dummy;
+ break;
+ case 2: // z
+ z = dummy;
+ break;
+ case 3: // temp
+ t = dummy;
+ break;
+ }
+
+ }
+
+ // format xxyyzztt
+ ret_val = static_cast<uint64_t> (x) << 48;
+ ret_val |= static_cast<uint64_t>(y) << 32;
+ ret_val |= static_cast<uint64_t>(z) << 16;
+ ret_val |= static_cast<uint64_t>(t);
+ cs = true;
+ return ret_val;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libraries/adxl362/ADXL362.h Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,211 @@
+#ifndef ADXL362_H_
+#define ADXL362_H_
+
+#include "mbed.h"
+
+class ADXL362
+{
+public:
+
+ /* Temperature parameters */
+ typedef enum {
+ DEVID_AD = 0x00,
+ DEVID_MST = 0x01,
+ PARTID = 0x02,
+ REVID = 0x03,
+ XDATA = 0x08,
+ YDATA = 0x09,
+ ZDATA = 0x0A,
+ STATUS = 0x0B,
+ FIFO_ENTRIES_L = 0x0C,
+ FIFO_ENTRIES_H = 0x0D,
+ XDATA_L = 0x0E,
+ XDATA_H = 0x0F,
+ YDATA_L = 0x10,
+ YDATA_H = 0x11,
+ ZDATA_L = 0x12,
+ ZDATA_H = 0x13,
+ TEMP_L = 0x14,
+ TEMP_H = 0x15,
+ // Reserved = 0x16;
+ // Reserved = 0x17;
+ SOFT_RESET = 0x1F,
+ THRESH_ACT_L = 0x20,
+ THRESH_ACT_H = 0x21,
+ TIME_ACT = 0x22,
+ THRESH_INACT_L = 0x23,
+ THRESH_INACT_H = 0x24,
+ TIME_INACT_L = 0x25,
+ TIME_INACT_H = 0x26,
+ ACT_INACT_CTL = 0x27,
+ FIFO_CONTROL = 0x28,
+ FIFO_SAMPLES = 0x29,
+ INTMAP1 = 0x2A,
+ INTMAP2 = 0x2B,
+ FILTER_CTL = 0x2C,
+ POWER_CTL = 0x2D,
+ SELF_TEST = 0x2E,
+ } ADXL362_register_t;
+
+ typedef enum {
+ STANDBY = 0x00,
+ MEASUREMENT = 0x02
+ } ADXL362_modes_t;
+
+ typedef enum {
+ ERR_USER_REGS = 0x80,
+ AWAKE = 0x40,
+ INACT = 0x20,
+ ACT = 0x10,
+ FIFO_OVERRUN = 0x08,
+ FIFO_WATERMARK = 0x04,
+ FIFO_READY = 0x02,
+ DATA_READY = 0x01
+ } ADXL362_STATUS_reg_bits_t;
+
+ typedef enum {
+ LINKLOOP1 = 0x20,
+ LINKLOOP0 = 0x10,
+ DEFAULTMODE = 0x00,
+ LINKED_MODE = 0x10,
+ LOOP_MODE = 0x30,
+ INACT_REF = 0x08,
+ INACT_EN = 0x04,
+ ACT_REF = 0x02,
+ ACT_EN = 0x01
+ } ADXL362_ACT_INACT_CTL_reg_bits_t;
+
+ typedef enum {
+ AH = 0x08,
+ FIFO_TEMP = 0x04,
+ FIFO_MODE1 = 0x02,
+ FIFO_MODE = 0x01,
+ } ADXL362_FIFO_CONTROL_reg_bits_t;
+
+ typedef enum {
+ FIFO_DISABLED = 0x00,
+ FIFO_OLDEST = 0x01,
+ FIFO_STREAM = 0x02,
+ FIFO_TRIGGERED = 0x03,
+ } ADXL362_FIFO_modes_t;
+
+ typedef enum {
+ INT_LOW = 0x80,
+ INT_AWAKE = 0x40,
+ INT_INACT = 0x20,
+ INT_ACT = 0x10,
+ INT_FIFO_OVERRUN = 0x08,
+ INT_FIFO_WATERMARK = 0x04,
+ INT_FIFO_READY = 0x02,
+ INT_DATA_READY = 0x01
+ } ADXL362_INTMAP_reg_bits_t;
+
+ typedef enum {
+ RANGE1 = 0x80,
+ RANGE0 = 0x40,
+ RANGE2G = 0x00,
+ RANGE4G = 0x40,
+ RANGE8G = 0x80,
+ HALF_BW = 0x10,
+ EXT_SAMPLE = 0x08,
+ ODR2 = 0x04,
+ ODR1 = 0x02,
+ ODR0 = 0x01,
+ ODR12HZ = 0x00,
+ ODR25HZ = 0x01,
+ ODR50Hz = 0x02,
+ ODR100HZ = 0x03,
+ ODR200Hz = 0x04,
+ ODR400HZ = 0x07
+ } ADXL362_FILTER_CTL_reg_bits_t;
+
+ typedef enum {
+ EXT_CLK = 0x40,
+ LOW_NOISE1 = 0x20,
+ LOW_NOISE0 = 0x10,
+ NORMAL_OPERATION = 0x00,
+ LOW_NOISE = 0x10,
+ ULTRALOW_NOISE = 0x20,
+ WAKEUP = 0x08,
+ AUTOSLEEP = 0x04,
+ MEASURE1 = 0x02,
+ MEASURE0 = 0x01,
+ } ADXL362_POWER_CTL_reg_bits_t;
+
+ /** SPI configuration & constructor */
+ ADXL362(PinName CS = SPI_CS, PinName MOSI = SPI_MOSI, PinName MISO =
+ SPI_MISO, PinName SCK = SPI_SCK);
+ void frequency(int hz);
+
+ /** Low level SPI bus comm methods */
+ void reset(void);
+ void write_reg(ADXL362_register_t reg, uint8_t data);
+ uint8_t read_reg(ADXL362_register_t reg);
+ uint64_t scan();
+
+ void set_power_ctl_reg(uint8_t data);
+ void set_filter_ctl_reg(uint8_t data);
+
+ uint8_t scanx_u8();
+ uint16_t scanx();
+ uint8_t scany_u8();
+ uint16_t scany();
+ uint8_t scanz_u8();
+ uint16_t scanz();
+ uint16_t scant();
+
+ uint8_t read_status();
+ void set_mode(ADXL362_modes_t mode);
+
+ void set_activity_threshold(uint16_t threshold);
+ void set_activity_time(uint8_t time);
+ void set_inactivity_threshold(uint16_t threshold);
+ void set_inactivity_time(uint16_t time);
+ void set_act_inact_ctl_reg(uint8_t data);
+
+ void set_interrupt1_pin(PinName in, uint8_t data, void (*callback_rising)(void), void (*callback_falling)(void), PinMode pull = PullNone);
+ void set_interrupt2_pin(PinName in, uint8_t data, void (*callback_rising)(void), void (*callback_falling)(void), PinMode pull = PullNone);
+ void enable_interrupt1();
+ void enable_interrupt2();
+ void disable_interrupt1();
+ void disable_interrupt2();
+
+ void set_polling_interrupt1_pin(PinName in, uint8_t data, PinMode pull = PullNone);
+ void set_polling_interrupt2_pin(PinName in, uint8_t data, PinMode pull = PullNone);
+
+ bool get_int1();
+ bool get_int2();
+
+
+ uint16_t fifo_read_nr_of_entries();
+ void fifo_setup(bool store_temp, ADXL362_FIFO_modes_t mode, uint16_t nr_of_entries);
+ uint16_t fifo_read_u16();
+ uint64_t fifo_scan();
+
+
+
+
+
+private:
+
+ SPI adxl362; ///< SPI instance of the AD7791
+ DigitalOut cs; ///< DigitalOut instance for the chipselect of the AD7791
+ uint16_t read_reg_u16(ADXL362_register_t reg);
+ InterruptIn *int1;
+ InterruptIn *int2;
+ DigitalIn int1_poll;
+ DigitalIn int2_poll;
+ bool int1_act_low;
+ bool int2_act_low;
+ bool temp_stored_in_fifo;
+
+ void write_reg_u16(ADXL362_register_t reg, uint16_t data);
+
+ const static uint8_t DUMMY_BYTE = 0xAA;
+ const static uint8_t WRITE_REG_CMD = 0x0A; // write register
+ const static uint8_t READ_REG_CMD = 0x0B; // read register
+ const static uint8_t READ_FIFO_CMD = 0x0D; // read FIFO
+ const static uint8_t _SPI_MODE = 0;
+};
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libraries/cn0357/CN0357.cpp Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,229 @@
+/**
+* @file cn0357.cpp
+* @brief Source file for CN0357
+* @author Analog Devices Inc.
+*
+* For support please go to:
+* Github: https://github.com/analogdevicesinc/mbed-adi
+* Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
+* Product: www.analog.com/EVAL-CN0357-ARDZ
+* More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
+
+********************************************************************************
+* Copyright 2016(c) Analog Devices, Inc.
+*
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+* - Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in
+* the documentation and/or other materials provided with the
+* distribution.
+* - Neither the name of Analog Devices, Inc. nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+* - The use of this software may or may not infringe the patent rights
+* of one or more patent holders. This license does not release you
+* from the requirement that you obtain separate licenses from these
+* patent holders to use this software.
+* - Use of the software either in source or binary form, must be run
+* on or directly connected to an Analog Devices Inc. component.
+*
+* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+* IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+********************************************************************************/
+
+#include "mbed.h"
+#include "AD7790.h"
+#include "AD5270.h"
+#include "CN0357.h"
+
+/**
+ * @brief CN0357 constructor
+ * @param CSAD7790 - (optional)chip select of the AD7790
+ * @param CSAD5270 - (optional)chip select of the AD5270
+ * @param MOSI - (optional)pin of the SPI interface
+ * @param MISO - (optional)pin of the SPI interface
+ * @param SCK - (optional)pin of the SPI interface
+ */
+CN0357::CN0357(PinName CSAD7790, PinName CSAD5270, PinName MOSI, PinName MISO,
+ PinName SCK) :
+ _vref(1.2), _sensor_sensitivity(0), _sensor_range(0), _RDACvalue(0),
+ ad7790(_vref, CSAD7790, MOSI, MISO, SCK), ad5270(CSAD5270, 20000.0, MOSI, MISO, SCK)
+
+{
+}
+
+/**
+ * @brief initializes the AD7790 and the AD5270
+ * @param range - range of the sensor used (in ppm)
+ * @param sensitivity - sensitivity of the sensor (A/ppm)
+ * @param jp - (optional)jumper configuration of the CN0357
+ * @param mode_val - (optional)if jp is set to InternalADC, configures the mode register of the Internal ADC
+ * @param filter_val - (optional)if jp is set to InternalADC, configures the filter register of the Internal ADC
+ */
+void CN0357::init(float range, float sensitivity, JumperConfig_t jp, uint8_t mode_val, uint8_t filter_val)
+{
+ ad5270.frequency(500000);
+ ad7790.frequency(500000);
+
+ float resistance = set_sensor_parameters(range, sensitivity);
+
+ if(jp == INTERNAL_AD7790) {
+ _AD7790_init(mode_val, filter_val);
+ }
+ _rdac_init(resistance);
+}
+
+/**
+ * @brief initializes the RDAC and sets SDO to HiZ
+ * @param resistance - resistance value to initialize the RDAC
+ * @return
+ */
+void CN0357::_rdac_init(float resistance)
+{
+ /* RDAC initialization*/
+ /* Compute for the nearest RDAC value from given resistance and save data to the structure */
+ set_RDAC_value(resistance);
+ /* Set AD5270 SDO to Hi-Z */
+ ad5270.set_SDO_HiZ();
+}
+
+/**
+ * @brief initializes the AD7790
+ * @param mode_val - configures the mode register of the Internal ADC
+ * @param filter_val - configures the filter register of the Internal ADC
+ */
+void CN0357::_AD7790_init(uint8_t mode_val, uint8_t filter_val)
+{
+ ad7790.reset();
+ wait_ms(50);
+
+ ad7790.write_mode_reg(mode_val);
+ wait_us(2);
+
+ ad7790.write_filter_reg(filter_val);
+ wait_ms(50);
+}
+
+/**
+ * @brief reads the status register of the AD7790
+ * @return status register value
+ */
+uint8_t CN0357::read_adc_status(void)
+{
+ return ad7790.read_status_reg();
+}
+
+/**
+ * @brief reads the ADC and computes the sensor voltage
+ * @return sensor voltage
+ */
+float CN0357::read_sensor_voltage(void)
+{
+ return ad7790.read_voltage();
+}
+
+/**
+ * @brief reads the data register of the AD7790
+ * @return data register value
+ */
+uint16_t CN0357::read_sensor(void)
+{
+ return ad7790.read_u16();
+}
+
+/**
+ * @brief reads and computes the sensor reading in PPM
+ * @return value of the sensor reading in PPM
+ */
+float CN0357::read_ppm()
+{
+ return calc_ppm(ad7790.read_voltage()); /* Convert voltage to Gas concentration*/
+}
+
+/**
+ * @brief computes a value in PPM from a reading received as a param
+ * @param adcVoltage - voltage to be converted to PPM
+ * @return sensor value in PPM
+ */
+float CN0357::calc_ppm(float adcVoltage)
+{
+ float fConcentration = 0;
+ fConcentration = (fabs(adcVoltage) / _RDACvalue) / _sensor_sensitivity;
+ return fConcentration;
+}
+
+/**
+ * @brief computes voltage from a 16 bit ADC value received as a parameter
+ * @param data - ADC value
+ * @return sensor voltage
+ */
+float CN0357::data_to_voltage(uint16_t data)
+{
+ return ad7790.data_to_voltage(data);
+}
+
+/**
+ * @brief sets a new value for the RDAC
+ * @param resistance new value for the resistance
+ * @return none
+ */
+void CN0357::set_RDAC_value(float resistance)
+{
+ _RDACvalue = ad5270.write_RDAC(resistance);
+}
+
+/**
+ * @brief getter method for RDAC value
+ * @return value of the RDAC in ohms
+ */
+float CN0357::get_RDAC_value()
+{
+ return _RDACvalue;
+}
+
+/**
+ * @brief set sensor range and sensitivity
+ * sets sensor range, sensitivity
+ * returns suggested resistance value for feedback resistor
+ * @param range - range of the sensor used (in ppm)
+ * @param sensitivity - sensitivity of the sensor (in A/ppm)
+ * @return suggested resistance value for feedback resistor
+ */
+float CN0357::set_sensor_parameters(float range, float sensitivity)
+{
+ _sensor_sensitivity = static_cast<float>(sensitivity);
+ _sensor_range = range;
+ return (_vref / (static_cast<float>(_sensor_range * _sensor_sensitivity)));
+}
+
+/**
+ * @brief getter method for sensor sensitivity
+ * @return sensor sensitivity (in A/ppm)
+ */
+float CN0357::get_sensor_sensitivity()
+{
+ return _sensor_sensitivity;
+}
+
+/**
+ * @brief getter method for sensor range
+ * @return sensor range (in ppm)
+ */
+float CN0357::get_sensor_range()
+{
+ return _sensor_range;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libraries/cn0357/CN0357.h Tue May 17 14:21:17 2016 +0300
@@ -0,0 +1,102 @@
+/**
+* @file cn0357.h
+* @brief Header file for CN0357
+* @author Analog Devices Inc.
+*
+* For support please go to:
+* Github: https://github.com/analogdevicesinc/mbed-adi
+* Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
+* Product: www.analog.com/EVAL-CN0357-ARDZ
+* More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
+
+********************************************************************************
+* Copyright 2016(c) Analog Devices, Inc.
+*
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+* - Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in
+* the documentation and/or other materials provided with the
+* distribution.
+* - Neither the name of Analog Devices, Inc. nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+* - The use of this software may or may not infringe the patent rights
+* of one or more patent holders. This license does not release you
+* from the requirement that you obtain separate licenses from these
+* patent holders to use this software.
+* - Use of the software either in source or binary form, must be run
+* on or directly connected to an Analog Devices Inc. component.
+*
+* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+* IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+********************************************************************************/
+
+#ifndef CN0357_H
+#define CN0357_H
+
+#include "mbed.h"
+#include "AD7790.h"
+#include "AD5270.h"
+
+/**
+ * @brief EVAL-CN0357 toxic gas sensor shield
+ */
+class CN0357
+{
+public:
+
+private:
+ float _vref;
+ float _sensor_sensitivity;
+ float _sensor_range;
+ float _RDACvalue;
+public:
+ AD7790 ad7790; ///< AD7790 instance - can be used for manual overriding
+ AD5270 ad5270; ///< AD5270 instance - can be used for manual overriding
+
+ /// CN0357 shield jumper configuration
+ typedef enum {
+ INTERNAL_AD7790 = 0, ///< The shield's AD7790 is used
+ EXTERNAL_ADC ///< Sensor analog output is routed to A1 pin of the shield
+ } JumperConfig_t;
+
+ CN0357(PinName CSAD7790 = D8, PinName CSAD5270 = D6, PinName MOSI = SPI_MOSI, PinName MISO = SPI_MISO, PinName SCK = SPI_SCK);
+ void init(float range, float sensitivity, JumperConfig_t jp = INTERNAL_AD7790, uint8_t mode_val = _DEFAULT_MODE_VAL, uint8_t filter_val = _DEFAULT_FILTER_VAL);
+
+ uint8_t read_adc_status(void);
+ uint16_t read_sensor(void);
+ float read_sensor_voltage(void);
+ float data_to_voltage(uint16_t data);
+ float calc_ppm(float adcVoltage);
+ float read_ppm(void);
+
+ void set_RDAC_value(float resistor_val);
+ float get_RDAC_value(void);
+ float set_sensor_parameters(float range, float sensitivity);
+ float get_sensor_range(void);
+ float get_sensor_sensitivity(void);
+
+private:
+ const static int _RESET = 0xff;
+ const static int _DEFAULT_MODE_VAL = AD7790::MD1 | AD7790::MD0; // POWERDOWN MODE
+ const static int _DEFAULT_FILTER_VAL = AD7790::FS0 | AD7790::FS1 | AD7790::FS2;
+ void _rdac_init(float resistanceValue);
+ void _AD7790_init(uint8_t mode_val, uint8_t filter_val);
+
+};
+
+#endif // CN0357_H
CN0357 - Toxic gas measurement
CN0216 - Weight Scale