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 13:66c8e4ce4ff1, committed 2016-04-29
- Comitter:
- Adrian Suciu
- Date:
- Fri Apr 29 16:19:00 2016 +0300
- Parent:
- 11:2e67c719ce37
- Child:
- 14:ca5bf41ced84
- Commit message:
- Added driver for AD7791 and example for CN0216
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/cn0216_example/Makefile Fri Apr 29 16:19:00 2016 +0300 @@ -0,0 +1,90 @@ +# This file was automagically generated by mbed.org. For more information, +# see http://mbed.org/handbook/Exporting-to-GCC-ARM-Embedded + +GCC_BIN = +PROJECT = CN0216-MBED +ADI_LIBRARIES_PATH = ../../libraries +MBED_LIBRARIES_PATH = ../../mbed +OBJECTS = ./main.o $(ADI_LIBRARIES_PATH)/AD7791/AD7791.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)/ad7791 -I$(ADI_LIBRARIES_PATH)/cn0216 -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/cn0216_example/main.cpp Fri Apr 29 16:19:00 2016 +0300 @@ -0,0 +1,118 @@ +/** +* @file main.cpp +* @brief Main file for the CN0357-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-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 "CN0216.h" + +const float CAL_WEIGHT = (150.0); + +Serial pc(USBTX, USBRX); ///< Serial interface to the pc + +void flush_serial_buffer(void) +{ + while (pc.readable()) pc.getc(); + return; +} + +void display_data(uint32_t data, float weight) +{ + pc.printf("\r\nADC Input Voltage input = %f V", data); /* Send valid voltage input value */ + pc.printf("\r\nSensor Input Weight = %f grams", weight); /* Send valid grams value */ + pc.printf("\r\n"); +} + +/** + * Project entry-point - initializes the CN0357 shield, reads the data when the ADC is ready and outputs the sensor + * value in PPM + */ + +//#define SINGLE_CONVERSION +#define CONTINOUS_CONVERSION + +int main() +{ + /* Main variables */ + CN0216 cn0216; +#ifdef SINGLE_CONVERSION + cn0216.init(CAL_WEIGHT); +#elif defined CONTINOUS_CONVERSION + cn0216.init(CAL_WEIGHT, 0x00, 0x07); +#else +#error define SINGLE_CONVERSION or CONTINOUS_CONVERSION, but not both +#endif + /* Calibration sequence */ + + pc.printf("\r\n Calibrating zero scale. Remove all weights from scale. Press any key to begin .."); + while(!pc.readable()); + flush_serial_buffer(); + pc.printf("\r\n Calibrating . . . "); + cn0216.calibrate(CN0216::ZERO_SCALE_CALIBRATION); + pc.printf("done ! "); + + pc.printf("\r\n Calibrating full scale. Put calibration weight on scale. Press any key to begin .."); + while(!pc.readable()); + flush_serial_buffer(); + pc.printf("\r\n Calibrating . . . "); + cn0216.calibrate(CN0216::FULL_SCALE_CALIBRATION); + pc.printf("done ! "); + + pc.printf("\r\n Calibration successful "); + cn0216.calibrate(CN0216::COMPUTE_GRAM_PER_BIT); + + /* Infinite loop */ + 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 + } + } + + + /* Infinite loop, never returns. */ +} +
--- a/examples/drvdiag/Makefile Thu Apr 21 18:01:41 2016 +0300 +++ b/examples/drvdiag/Makefile Fri Apr 29 16:19:00 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)/ad7790_diag.o $(DRIVER_WRAPPER_PATH)/ad5270_diag.o $(ADI_LIBRARIES_PATH)/AD7790/AD7790.o $(ADI_LIBRARIES_PATH)//AD5270/AD5270.o $(ADI_LIBRARIES_PATH)//cn0357/cn0357.o +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 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)/cn0357 -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)/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
--- a/examples/drvdiag/config.h Thu Apr 21 18:01:41 2016 +0300 +++ b/examples/drvdiag/config.h Fri Apr 29 16:19:00 2016 +0300 @@ -45,24 +45,36 @@ * ********************************************************************************/ -#define AD7790_PRESENT -#define AD5270_PRESENT -#define CN0357_PRESENT +#define AD7791_PRESENT +#define CN0216_PRESENT +//#define AD7790_PRESENT +//#define AD5270_PRESENT +//#define CN0357_PRESENT #define SPI_LOW_LEVEL +#ifdef AD7791_PRESENT +#include "AD7791.h" +#include "ad7791_diag.h" +#endif + +#ifdef CN0216_PRESENT +#include "CN0216.h" +#include "cn0216_diag.h" +#endif + #ifdef AD7790_PRESENT #include "AD7790.h" -#include "AD7790_diag.h" +#include "ad7790_diag.h" #endif #ifdef AD5270_PRESENT #include "AD5270.h" -#include "AD5270_diag.h" +#include "ad5270_diag.h" #endif #ifdef CN0357_PRESENT #include "CN0357.h" -#include "CN0357_diag.h" +#include "cn0357_diag.h" #endif using namespace std; @@ -77,6 +89,17 @@ SPI spibus(SPI_MOSI, SPI_MISO, SPI_SCK); #endif +#ifdef AD7791_PRESENT +AD7791 ad7791(1.2, D8); +AD7791_Diag ad7791diag(ad7791); +#endif + +#ifdef CN0216_PRESENT +CN0216 cn0216; +CN0216_Diag cn0216diag(cn0216); +#endif + + #ifdef AD7790_PRESENT AD7790 ad7790(1.2, D8); AD7790_Diag ad7790diag(ad7790); @@ -90,4 +113,4 @@ #ifdef CN0357_PRESENT CN0357 cn0357; CN0357_Diag cn0357diag(cn0357); -#endif \ No newline at end of file +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/drvdiag/driver_wrapper/ad5270_diag.cpp Fri Apr 29 16:19:00 2016 +0300 @@ -0,0 +1,143 @@ +/** +* @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 "ad5270_diag.h" + +#include "mbed.h" +#include <stdio.h> +#include <vector> +#include <string> + +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/ad5270_diag.h Fri Apr 29 16:19:00 2016 +0300 @@ -0,0 +1,81 @@ +/** +* @file ad5270_diag.h +* @brief Header 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. +* +********************************************************************************/ + +#ifndef AD5270_DIAG_H_ +#define AD5270_DIAG_H_ +#include "AD5270.h" + +class AD5270_Diag +{ +public: + AD5270_Diag(AD5270& ad); + void enable_50TP_programming(void); + void store_50TP(void); + void disable_50TP_programming(void); + + void write_RDAC(void); + void read_RDAC(void); + void write_cmd(void); + void set_HiZ(void); + + void read_50TP_last_address(void); + void read_50TP_memory(void); + + void write_ctrl_reg(void); + void read_ctrl_reg(void); + + void reset_RDAC(void); + void change_mode(void); + + void write_wiper_reg(void); + void read_wiper_reg(void); + +private: + AD5270& dut; +}; + + +#endif /* AD5270_DIAG_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/drvdiag/driver_wrapper/ad7790_diag.cpp Fri Apr 29 16:19:00 2016 +0300 @@ -0,0 +1,128 @@ +/** +* @file ad7790_diag.cpp +* @brief Source file for the AD7790 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 "AD7790_diag.h" + +extern Serial pc; +extern vector<string> cmdbuffer; + +AD7790_Diag::AD7790_Diag(AD7790& ad) : dut(ad) +{ + +} + +void AD7790_Diag::init() +{ + +} +void AD7790_Diag::reset() +{ + dut.reset(); + pc.printf("Reseted AD7790"); +} + +void AD7790_Diag::write_mode() +{ + uint8_t regVal = strtol(cmdbuffer[1].c_str(), NULL, 16); + dut.write_mode_reg(regVal); + pc.printf("Wrote mode"); +} +void AD7790_Diag::read_mode() +{ + pc.printf("Mode reg: %x ", dut.read_mode_reg()); +} + +void AD7790_Diag::write_filter() +{ + uint8_t regVal = strtol(cmdbuffer[1].c_str(), NULL, 16); + dut.write_filter_reg(regVal); + pc.printf("Wrote filter"); +} +void AD7790_Diag::read_filter() +{ + pc.printf("Returned: %x ", dut.read_filter_reg()); +} +void AD7790_Diag::read_data() +{ + pc.printf("Data reg: %x ", dut.read_data_reg()); +} + +void AD7790_Diag::read_status() +{ + pc.printf("Status reg: %x ", dut.read_status_reg()); +} + +void AD7790_Diag::read_u16() +{ + pc.printf("Data reg: %x ", dut.read_u16()); +} +void AD7790_Diag::read_voltage() +{ + pc.printf("Voltage: %f ", dut.read_voltage()); +} +void AD7790_Diag::set_continous_mode() +{ + uint8_t regVal = strtol(cmdbuffer[1].c_str(), NULL, 16); + dut.set_conversion_mode(static_cast<AD7790::AD7790Mode_t>(regVal)); + pc.printf("Mode set to %d", regVal); +} +void AD7790_Diag::set_reference_voltage() +{ + float ref = strtof(cmdbuffer[1].c_str(), NULL); + dut.set_reference_voltage(ref); + pc.printf("Reference Voltage set to %f", ref); +} + +void AD7790_Diag::set_channel() +{ + uint8_t regVal = strtol(cmdbuffer[1].c_str(), NULL, 16); + dut.set_channel(static_cast<AD7790::AD7790Channel_t>(regVal)); + pc.printf("Mode set to %d", regVal); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/drvdiag/driver_wrapper/ad7791_diag.cpp Fri Apr 29 16:19:00 2016 +0300 @@ -0,0 +1,134 @@ +/** +* @file AD7791_diag.cpp +* @brief Source file for the AD7791 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 "AD7791_diag.h" + +extern Serial pc; +extern vector<string> cmdbuffer; + +AD7791_Diag::AD7791_Diag(AD7791& ad) : dut(ad) +{ + +} + +void AD7791_Diag::init() +{ + +} +void AD7791_Diag::reset() +{ + dut.reset(); + pc.printf("Reseted AD7791"); +} + +void AD7791_Diag::write_mode() +{ + uint8_t regVal = strtol(cmdbuffer[1].c_str(), NULL, 16); + dut.write_mode_reg(regVal); + pc.printf("Wrote mode"); +} +void AD7791_Diag::read_mode() +{ + pc.printf("Mode reg: %x ", dut.read_mode_reg()); +} + +void AD7791_Diag::write_filter() +{ + uint8_t regVal = strtol(cmdbuffer[1].c_str(), NULL, 16); + dut.write_filter_reg(regVal); + pc.printf("Wrote filter"); +} +void AD7791_Diag::read_filter() +{ + pc.printf("Returned: %x ", dut.read_filter_reg()); +} +void AD7791_Diag::read_data() +{ + pc.printf("Data reg: %x ", dut.read_data_reg()); +} + +void AD7791_Diag::read_status() +{ + pc.printf("Status reg: %x ", dut.read_status_reg()); +} + +void AD7791_Diag::read_u16() +{ + pc.printf("Data reg: %x ", dut.read_u16()); +} + +void AD7791_Diag::read() +{ + pc.printf("Data reg: %x ", dut.read_u32()); +} + +void AD7791_Diag::read_voltage() +{ + pc.printf("Voltage: %f ", dut.read_voltage()); +} +void AD7791_Diag::set_continous_mode() +{ + uint8_t regVal = strtol(cmdbuffer[1].c_str(), NULL, 16); + dut.set_conversion_mode(static_cast<AD7791::AD7791Mode_t>(regVal)); + pc.printf("Mode set to %d", regVal); +} +void AD7791_Diag::set_reference_voltage() +{ + float ref = strtof(cmdbuffer[1].c_str(), NULL); + dut.set_reference_voltage(ref); + pc.printf("Reference Voltage set to %f", ref); +} + +void AD7791_Diag::set_channel() +{ + uint8_t regVal = strtol(cmdbuffer[1].c_str(), NULL, 16); + dut.set_channel(static_cast<AD7791::AD7791Channel_t>(regVal)); + pc.printf("Mode set to %d", regVal); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/drvdiag/driver_wrapper/ad7791_diag.h Fri Apr 29 16:19:00 2016 +0300 @@ -0,0 +1,81 @@ +/** +* @file ad7791_diag.h +* @brief Header file for the AD7791 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 AD7791_DIAG_H_ +#define AD7791_DIAG_H_ + +#include "AD7791.h" + +class AD7791_Diag +{ + +public: + AD7791_Diag(AD7791& ad); + void init(void); + void reset(void); + void write_mode(void); + void write_filter(void); + void read_mode(void); + void read_filter(void); + void read_data(void); + void read_status(void); + void read_u16(void); + void read(); + void read_voltage(void); + void set_continous_mode(void); + void set_reference_voltage(void); + void set_channel(void); + +private: + AD7791& dut; +}; + +/* + +*/ + + + +#endif /* AD7790_DIAG_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/drvdiag/driver_wrapper/cn0216_diag.cpp Fri Apr 29 16:19:00 2016 +0300 @@ -0,0 +1,35 @@ +#include "mbed.h" +#include <stdio.h> +#include <vector> +#include <string> + +#include "cn0216_diag.h" + +extern Serial pc; +extern vector<string> cmdbuffer; + +CN0216_Diag::CN0216_Diag(CN0216& cn) : dut(cn) +{ + +} + +void CN0216_Diag::init(void) +{ + uint16_t weight = strtol(cmdbuffer[1].c_str(), NULL, 10); + pc.printf("CN0216 initialized with %d calibration weight",weight); + dut.init(weight); +} + +void CN0216_Diag::calibrate(void) +{ + uint8_t step = strtol(cmdbuffer[1].c_str(), NULL, 16); + pc.printf("Calibrating step %d ..",step); + dut.calibrate(static_cast<CN0216::CalibrationStep_t>(step)); + pc.printf(".. DONE",step); +} + +void CN0216_Diag::read_weight(void) +{ + pc.printf("Read weight is %f", dut.read_weight()); +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/drvdiag/driver_wrapper/cn0216_diag.h Fri Apr 29 16:19:00 2016 +0300 @@ -0,0 +1,21 @@ + +#ifndef CN0216_DIAG_H_ +#define CN0216_DIAG_H_ +#include "CN0216.h" + +class CN0216_Diag +{ +public: + CN0216_Diag(CN0216& cn); + + void init(void); + void calibrate(void); + void read_weight(void); + + +private: + CN0216& dut; +}; + + +#endif /* CN0216_DIAG_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/drvdiag/driver_wrapper/cn0357_diag.cpp Fri Apr 29 16:19:00 2016 +0300 @@ -0,0 +1,78 @@ +/** +* @file cn0357_diag.cpp +* @brief Source file for the CN0357 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 "CN0357_diag.h" + +extern Serial pc; +extern vector<string> cmdbuffer; + +CN0357_Diag::CN0357_Diag(CN0357& cn) : dut(cn) +{ + +} +void CN0357_Diag::set_RDAC() +{ + float res = strtof(cmdbuffer[1].c_str(), NULL); + dut.set_RDAC_value(res); + pc.printf("Wrote %f", res); + +} +void CN0357_Diag::read_ppm(void) +{ + pc.printf("Wrote %f", dut.read_ppm()); +} + +void CN0357_Diag::set_sensor_param(void) +{ + float range = strtof(cmdbuffer[1].c_str(), NULL); + float sens = strtof(cmdbuffer[2].c_str(), NULL); + sens = sens * pow(10, -9); + pc.printf("Suggested RDAC val: %f ", dut.set_sensor_parameters(range, sens)); +}
--- a/examples/drvdiag/driver_wrapper/cn0357_diag.h Thu Apr 21 18:01:41 2016 +0300 +++ b/examples/drvdiag/driver_wrapper/cn0357_diag.h Fri Apr 29 16:19:00 2016 +0300 @@ -63,4 +63,4 @@ }; -#endif /* AD5270_DIAG_H_ */ +#endif /* CN0357_DIAG_H_ */
--- a/examples/drvdiag/main.cpp Thu Apr 21 18:01:41 2016 +0300 +++ b/examples/drvdiag/main.cpp Fri Apr 29 16:19:00 2016 +0300 @@ -83,7 +83,28 @@ pc.printf("writing 0x%x to SPI", spibyte); pc.printf("\r\nreturned: 0x%x ", spibus.write(spibyte)); }}, #endif - /* #### AD7790 #### */ + +#ifdef AD7791_PRESENT + {"adrst", 0, [](){ad7791diag.reset();}}, + {"adwrm", 1, [](){ad7791diag.write_mode();}}, + {"adrdm", 0, [](){ad7791diag.read_mode();}}, + {"adwrf", 1, [](){ad7791diag.write_filter();}}, + {"adrdf", 0, [](){ad7791diag.read_filter();}}, + {"adrdd", 0, [](){ad7791diag.read_data();}}, + {"adrds", 0, [](){ad7791diag.read_status();}}, + {"adread32", 0, [](){ad7791diag.read();}}, + {"adread", 0, [](){ad7791diag.read_u16();}}, + {"adreadv", 0, [](){ad7791diag.read_voltage();}}, + {"adsetc", 1, [](){ad7791diag.set_continous_mode();}}, + {"adsetref", 1, [](){ad7791diag.set_reference_voltage();}}, + {"adsetch", 1, [](){ad7791diag.set_channel();}}, +#endif + +#ifdef CN0216_PRESENT + {"cninit" , 1, [](){cn0216diag.init();}}, + {"cncal" , 1, [](){cn0216diag.calibrate();}}, + {"cnrdw" , 0, [](){cn0216diag.read_weight();}}, +#endif #ifdef AD7790_PRESENT {"adrst", 0, [](){ad7790diag.reset();}}, @@ -180,9 +201,11 @@ } int main() -{ +{ + ad7791.frequency(100000); pc.printf("\r\n#### DrvDiag ####\r\n"); + while(1) { pc.printf("\r\nTX> "); read_from_console();
--- a/libraries/ad7790/AD7790.cpp Thu Apr 21 18:01:41 2016 +0300 +++ b/libraries/ad7790/AD7790.cpp Fri Apr 29 16:19:00 2016 +0300 @@ -61,7 +61,7 @@ PinName MOSI, PinName MISO, PinName SCK) : - ad7790(MOSI, MISO, SCK), cs(CS), miso(MISO), _vref(reference_voltage), _PGA_gain(1) + miso(MISO), ad7790(MOSI, MISO, SCK), cs(CS), _vref(reference_voltage), _PGA_gain(1) { cs = true; // cs is active low ad7790.format(8, _SPI_MODE);
--- a/libraries/ad7790/AD7790.h Thu Apr 21 18:01:41 2016 +0300 +++ b/libraries/ad7790/AD7790.h Fri Apr 29 16:19:00 2016 +0300 @@ -147,9 +147,10 @@ #endif private: + DigitalIn miso;///< DigitalIn must be initialized before SPI to prevent pin MUX overwrite SPI ad7790; ///< SPI instance of the AD7790 DigitalOut cs; ///< DigitalOut instance for the chipselect of the AD7790 - DigitalIn miso; + float _vref; uint8_t _PGA_gain; bool _continous_conversion;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libraries/ad7791/AD7791.cpp Fri Apr 29 16:19:00 2016 +0300 @@ -0,0 +1,393 @@ +/** +* @file AD7791.cpp +* @brief Source file for AD7791 ADC +* @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: http://www.analog.com/ad7791 +* 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 <stdint.h> +#include "mbed.h" +#include "AD7791.h" + +/** + * @brief AD7791 constructor, sets CS pin and SPI format + * @param CS - (optional)chip select of the AD7791 + * @param MOSI - (optional)pin of the SPI interface + * @param MISO - (optional)pin of the SPI interface + * @param SCK - (optional)pin of the SPI interface + */ +AD7791::AD7791(float reference_voltage, + PinName CS, + PinName MOSI, + PinName MISO, + PinName SCK) : + miso(MISO), ad7791(MOSI, MISO, SCK), cs(CS), _vref(reference_voltage) +{ + cs = true; // cs is active low + ad7791.format(8, _SPI_MODE); + _continous_conversion = true; + _channel = DIFFERENTIAL; +} + +/** + * @brief Set AD7791 SPI frequency + * @param hz - SPI bus frequency in hz + * @return none + */ +void AD7791::frequency(int hz) +{ + ad7791.frequency(hz); +} + +/** + * @brief Resets the AD7791 + * @return none + */ +void AD7791::reset() +{ + ad7791.format(8, _SPI_MODE); + cs = false; + wait_us(_DELAY_TIMING); + ad7791.write(_RESET); + ad7791.write(_RESET); + ad7791.write(_RESET); + ad7791.write(_RESET); + wait_us(_DELAY_TIMING); + cs = true; + _continous_conversion = true; +} + +/** + * Sets the mode register. Also sets continous mode and range based on the value + * written in reg_val + * @param reg_val + */ +void AD7791::write_mode_reg(uint8_t reg_val) +{ + write_reg(MODE_REG, reg_val); + uint8_t continous_mode = (reg_val & 0xC0); + if(continous_mode == 0x00) { + _continous_conversion = true; + } else { + _continous_conversion = false; + } +/* uint8_t range = (reg_val & 0x30); + _PGA_gain = 1 << (range >> 4);*/ + +} + +/** + * Reads the mode register and returns its value + * @return value of the mode register + */ +uint8_t AD7791::read_mode_reg() +{ + return read_reg(MODE_REG); +} + +/** + * Writes the filter register + * @param regValue value to be written. + */ +void AD7791::write_filter_reg(uint8_t reg_val) +{ + write_reg(FILTER_REG, reg_val); +} + +/** + * Reads the filter register and returns its value + * @return the value of the filter register + */ +uint8_t AD7791::read_filter_reg() +{ + return read_reg(FILTER_REG); +} + +/** + * Reads the data register and returns its value + * @return value of the data register + */ +uint32_t AD7791::read_data_reg() +{ + uint32_t data_result; + ad7791.format(8, _SPI_MODE); + cs = false; + ad7791.write(_DATA_READ | (static_cast<uint8_t>(_channel))); + data_result = ((ad7791.write(_DUMMY_BYTE)) << 16); + data_result |= ((ad7791.write(_DUMMY_BYTE)) << 8 ); + data_result |= (ad7791.write(_DUMMY_BYTE)); + cs = true; + return data_result; +} + +/** + * Reads the status register of the ADC and returns its value + * @return value of the status reg + */ +uint8_t AD7791::read_status_reg() +{ + return read_reg(STATUS_REG); +} + + +/** + * @brief Enables/disables continous_conversion mode + * In Single Conversion mode, read_u16 method will read the MODE register of the ADC, + * then write the Start single conversion bit and wait for the DOUT/RDY pin to go low, + * When the pin is driven low, data register is read back from the ADC. + * + * In Continous conversion mode, read_u16 method will poll the DOUT/RDY pin, if it is low, + * the data register is read back from the ADC. + * + * @param mode + * true - continous conversion mode enabled + * false - single conversion mode enabled + */ +void AD7791::set_conversion_mode(AD7791Mode_t mode) +{ + uint8_t mode_reg_val; + mode_reg_val = read_mode_reg() & 0x3F; + mode_reg_val = mode_reg_val | (static_cast<uint8_t>(mode)); + write_mode_reg(mode); +} + +/** + * - From mbed AnalogIn API - + * @brief Read the input voltage, represented as an unsigned short in the range [0x0, 0xFFFF] + * Depending on the conversion mode, this method will have different behavior. Conversion mode is set using + * set_continous_conversion_mode(bool). + * + * In Single Conversion mode, read_u16 method will read the MODE register of the ADC, + * then write the Start single conversion bit and wait for the DOUT/RDY pin to go low, + * When the pin is driven low, data register is read back from the ADC. + * + * In Continous conversion mode, read_u16 method will poll the DOUT/RDY pin, if it is low, + * the data register is read back from the ADC. + * + * @return 16-bit unsigned short representing the current input voltage, normalised to a 16-bit value + * returns -1 (0xFFFF) along with a debug message if conversion failed. + */ +uint32_t AD7791::read_u32(void) +{ + uint32_t data_result = 0; + ad7791.format(8, _SPI_MODE); + cs = false; + uint16_t timeout_cnt = 0; + if(_continous_conversion == false) { + + uint8_t mode_reg = read_mode_reg(); + wait_us(_DELAY_TIMING); + + cs = false; + mode_reg = (mode_reg & 0x3F) | MD1; // mask single conversion bits + ad7791.write((MODE_REG << 4) | (static_cast<uint8_t>(_channel))); // start single conversion + ad7791.write(mode_reg); + timeout_cnt = _SINGLE_CONVERSION_TIMEOUT; // starts timeout + } else { + timeout_cnt = _CONTINOUS_CONVERSION_TIMEOUT; // starts timeout + } + + while(miso) { // wait for the MISO pin to go low. + if(timeout_cnt) { + timeout_cnt--; + } else { + cs = true; +#ifdef AD7791_DEBUG_MODE + printf("timeout occurred reading the AD7791. "); // error, MISO line didn't toggle +#endif + return -1; // ERROR + } + wait_us(10); + } + + ad7791.write(_DATA_READ | (static_cast<uint8_t>(_channel))); + data_result = ((ad7791.write(_DUMMY_BYTE)) << 16); + data_result |= ((ad7791.write(_DUMMY_BYTE)) << 8 ); + data_result |= (ad7791.write(_DUMMY_BYTE)); + cs = true; + return data_result; +} + +uint16_t AD7791::read_u16(void) +{ + uint32_t data = read_u32(); + return static_cast<uint16_t>((data & 0xffff00) >> 8); +} + +/** + * @brief Reads a register of the AD7791 + * @param address - address of the register + * @return value of the register + */ +uint16_t AD7791::read_reg(AD7791Register_t address) +{ + uint16_t data = address << 12; + data |= _DUMMY_BYTE; + data |= _READ_FLAG; + data |= (static_cast<uint8_t>(_channel) << 8); + return write_spi(data); +} + +/** + * @brief Writes a register of the AD7791 + * @param address - address of the register + * @param reg_val - value to be written + * @return none + * + */ +void AD7791::write_reg(AD7791Register_t address, uint8_t reg_val) +{ + uint16_t spi_data = address << 12; + spi_data |= reg_val; + spi_data |= (static_cast<uint8_t>(_channel) << 8); + write_spi(spi_data); +} + +/** + * @brief Writes 16bit data to the AD7791 SPI interface + * @param reg_val to be written + * @return data returned by the AD7791 + */ +uint16_t AD7791::write_spi(uint16_t reg_val) +{ + uint16_t data_result; + uint8_t upper_byte = (reg_val >> 8) & 0xFF; + uint8_t lower_byte = reg_val & 0xFF; + ad7791.format(8, _SPI_MODE); + cs = false; + data_result = (ad7791.write(upper_byte) << 8); + data_result |= ad7791.write(lower_byte); + cs = true; + return data_result; +} + +/** + * Sets the reference voltage of the AD7790 + * @param ref reference voltage to be set + */ +void AD7791::set_reference_voltage(float ref) +{ + _vref = ref; +} + +/** + * Gets the reference voltage of the AD7790 + * @return reference voltage + */ +float AD7791::get_reference_voltage(void) +{ + return _vref; +} + +/** + * Reads the data register of the ADC and converts the result to volts + * Gain needs to be correctly set using set_gain in order to get accurate results + * @return voltage of the ADC input + */ +float AD7791::read_voltage(void) +{ + return data_to_voltage(read_u32()); +} + +/** + * Converts an uint16_t to voltage. + * Gain needs to be correctly set using set_gain in order to get accurate results + * @param data in uint16_t format + * @return float value of voltage (in V) + */ +float AD7791::data_to_voltage(uint32_t data) +{ + return ((data / static_cast<float>(_RESOLUTION / 2)) - 1) * (_vref ); +} + +/** + * Converts voltage to an uint16_t. + * Gain needs to be correctly set using set_gain in order to get accurate results + * @param voltage to be converted + * @return data in uint16_t format + */ +uint32_t AD7791::voltage_to_data(float voltage) +{ + return (((voltage / _vref) + 1) * static_cast<float>(_RESOLUTION / 2)); +} + +/** + * Sets the conversion channel. + * @param channel + */ +void AD7791::set_channel(AD7791Channel_t channel) +{ + _channel = channel; +} + +/** + * - From mbed AnalogIn API - + * Read the input voltage, represented as a float in the range [0.0, 1.0] - uses the read_u16 method + * @returns A floating-point value representing the current input voltage, measured as a percentage + * returns 1.0 along with a debug message if the conversion failed + */ +float AD7791::read(void) +{ + float percent; + uint32_t data; + data = read_u32(); + percent = (data / static_cast<float>(_RESOLUTION) ); // translate bipolar conversion to [0.0, 1.0] domain + return percent; +} + +#ifdef MBED_OPERATORS + +/** + * - From mbed AnalogIn API - + * An operator shorthand for read() + * The float() operator can be used as a shorthand for read() to simplify common code sequences + */ +AD7791::operator float() +{ + return read(); +} + +#endif + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libraries/ad7791/AD7791.h Fri Apr 29 16:19:00 2016 +0300 @@ -0,0 +1,176 @@ +/** +* @file AD7791.h +* @brief Header file for AD7791 ADC +* @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: http://www.analog.com/ad7791 +* 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 AD7791_H +#define AD7791_H + +#include "mbed.h" + +/** + * Comment this line if you want to turn off the debug mode. + * The debug mode will send a message if an exception occurs within AD7791 driver + */ + +#define AD7791_DEBUG_MODE + +/** + * @brief Analog Devices AD7791 SPI 16-bit Buffered Sigma-Delta ADC + */ +class AD7791 +{ +public: + /// AD7791 registers + typedef enum { + COMMUNICATION_REG = 0, ///< Communication register + STATUS_REG = 0, ///< Status register + MODE_REG, ///< Mode register + FILTER_REG, ///< Filter Register + DATA_REG ///< Data register + } AD7791Register_t; + + /// AD7791 channel configuration + typedef enum { + DIFFERENTIAL = 0, ///< AIN(+)-AIN(-) + RESERVED, ///< reserved + SHORT, ///< AIN(-)-AIN(-) + VDDMONITOR ///< Monitor VDD + } AD7791Channel_t; + + typedef enum { + CONTINOUS_CONVERSION_MODE = 0, + SINGLE_CONVERSION_MODE = 0x80, + SHUTDOWN_MODE = 0xC0 + } AD7791Mode_t; + + typedef enum { + MD1 = 0x80, ///< Mode Select Bit 1 + MD0 = 0x40, ///< Mode Select Bit 0 +// G1 = 0x20, ///< Range bit 1 +// G0 = 0x10, ///< Range bit 0 + BO = 0x08, ///< Burnout Current Enable bit + UB = 0x04, ///< Unipolar/Bipolar bit + BUF = 0x02, ///< Buffered mode bit + } ModeRegisterBits_t; + + typedef enum { + CLKDIV1 = 0x40, ///< Clock divider bit 1 + CLKDIV0 = 0x20, ///< Clock divider bit 0 + FS2 = 0x04, ///< Update rate bit 2 + FS1 = 0x02, ///< Update rate bit 1 + FS0 = 0x01, ///< Update rate bit 0 + } FilterRegisterBits_t; + +/* typedef enum { + RANGE_VREF = 0, + RANGE_VREF_DIV_2, + RANGE_VREF_DIV_4, + RANGE_VREF_DIV_8, + } AnalogInputRange_t; +*/ + /** SPI configuration & constructor */ + AD7791( float reference_voltage, 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); + + /** Register access methods*/ + void set_channel(AD7791Channel_t channel); + void set_conversion_mode(AD7791Mode_t mode); + uint32_t read_data_reg(); + uint8_t read_status_reg(void); + void write_filter_reg(uint8_t regVal); + uint8_t read_filter_reg(void); + void write_mode_reg(uint8_t regVal); + uint8_t read_mode_reg(void); +// void set_range(AnalogInputRange_t range); +// AnalogInputRange_t get_range(void); + + /** Reference voltage methods */ + void set_reference_voltage(float ref); + float get_reference_voltage(void); + + /** Voltage read methods */ + float read_voltage(void); + float data_to_voltage(uint32_t data); + uint32_t voltage_to_data(float voltage); + + /** AnalogIn API */ + float read(void); + uint32_t read_u32(void); + uint16_t read_u16(void); + +#ifdef MBED_OPERATORS + operator float(); +#endif + +private: + DigitalIn miso; + SPI ad7791; ///< SPI instance of the AD7791 + DigitalOut cs; ///< DigitalOut instance for the chipselect of the AD7791 + + float _vref; +// uint8_t _PGA_gain; + bool _continous_conversion; + AD7791Channel_t _channel; + + void write_reg(AD7791Register_t regAddress, uint8_t regValue); + uint16_t write_spi(uint16_t data); + uint16_t read_reg (AD7791Register_t regAddress); + + const static uint16_t _SINGLE_CONVERSION_TIMEOUT = 0xFFFF; // in 10us = 100ms + const static uint16_t _CONTINOUS_CONVERSION_TIMEOUT = 0xFFFF; + const static uint32_t _RESOLUTION = 0xFFFFFF; + const static uint8_t _RESET = 0xFF; + const static uint8_t _DUMMY_BYTE = 0xFF; + const static uint16_t _READ_FLAG = 0x0800; + const static uint8_t _DATA_READ = 0x38; // Read from the Data Register + const static uint8_t _DELAY_TIMING = 0x02; + const static uint8_t _SPI_MODE = 3; +}; + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libraries/cn0216/CN0216.cpp Fri Apr 29 16:19:00 2016 +0300 @@ -0,0 +1,130 @@ +/** +* @file cn0216.cpp +* @brief Source file for CN0216 +* @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-CN0216-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 "AD7791.h" +#include "CN0216.h" +extern Serial pc; + + CN0216::CN0216(PinName CSAD7791, PinName MOSI, PinName MISO, PinName SCK) : ad7791(1.2, CSAD7791, MOSI, MISO, SCK) + { + _cal_weight = 0; + _zero_scale_value = 0; + _full_scale_value = 0; + _grams_per_bit = 0; + + } + void CN0216::init(float cal_weight, uint8_t mode_val, uint8_t filter_val) + { + _cal_weight = cal_weight; + ad7791.frequency(500000); + wait_ms(50); + ad7791.reset(); + wait_ms(50); + ad7791.write_mode_reg(mode_val); + wait_us(2); + ad7791.write_filter_reg(filter_val); + wait_ms(50); + } + + void CN0216::calibrate(CalibrationStep_t cal) + { + uint64_t sum = 0; + uint32_t min = 0xFFFFFFFF; + uint32_t sample = 0; + switch(cal) + { + case ZERO_SCALE_CALIBRATION: + case FULL_SCALE_CALIBRATION: + for(int i = 0;i < _NUMBER_OF_SAMPLES;i++) + { + sample = ad7791.read_u32(); + min = (min<sample) ? min : sample; + sum += ad7791.read_u32(); + wait_us(5); + } + if(cal == ZERO_SCALE_CALIBRATION) + { + // pc.printf("ZERO SCALE VALUE = %x",sum); + _zero_scale_value = min; + } + else + { + // pc.printf("FULL SCALE VALUE = %x",sum); + sum = sum / _NUMBER_OF_SAMPLES; + _full_scale_value = sum; + } + break; + + case COMPUTE_GRAM_PER_BIT: + _grams_per_bit = _cal_weight / (static_cast<float> (_full_scale_value - _zero_scale_value)); /* Calculate number of grams per LSB */ + // pc.printf("GRAMS/LSB = %f", _grams_per_bit); + break; + default: + break; + } + + } + + float CN0216::compute_weight(uint32_t data) + { +// pc.printf("\r\nFULL_SCALE_VALUE = %x\r\nZERO_SCALE_VALUE = %x\r\nDATA READ = %x\r\nGRAMS/LSB = %f\r\n",_full_scale_value,data,_zero_scale_value,_grams_per_bit); + if(data<_zero_scale_value) + data = _zero_scale_value; // clamp data to 0 + float weight_in_grams = (static_cast<float>((data) - _zero_scale_value)) * _grams_per_bit; /* Calculate weight */ + return weight_in_grams; + } + uint32_t CN0216::read_u32() + { + return ad7791.read_u32(); + } + float CN0216::read_weight() + { + uint32_t weight = read_u32(); + return compute_weight(weight); + } +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libraries/cn0216/CN0216.h Fri Apr 29 16:19:00 2016 +0300 @@ -0,0 +1,40 @@ + +#include "mbed.h" +#include "AD7791.h" + +#ifndef CN0216_H_ +#define CN0216_H_ + +class CN0216 +{ +public: + typedef enum + { + ZERO_SCALE_CALIBRATION, + FULL_SCALE_CALIBRATION, + COMPUTE_GRAM_PER_BIT + } CalibrationStep_t; + + CN0216(PinName CSAD7791 = D8, PinName MOSI = SPI_MOSI, PinName MISO = SPI_MISO, PinName SCK = SPI_SCK); + void init(float cal_weight = _DEFAULT_CAL_WEIGHT, uint8_t mode_val = _DEFAULT_MODE_VAL, uint8_t filter_val = _DEFAULT_FILTER_VAL); + void calibrate(CalibrationStep_t cal); + float compute_weight(uint32_t data); + uint32_t read_u32(); + float read_weight() ; + +private: + + const static int _DEFAULT_MODE_VAL = AD7791::MD1 | AD7791::MD0; // POWERDOWN MODE + const static int _DEFAULT_FILTER_VAL = AD7791::FS0 | AD7791::FS1 | AD7791::FS2; + const static int _NUMBER_OF_SAMPLES = 50; + const static int _DEFAULT_CAL_WEIGHT = 1000.0; + + AD7791 ad7791; + float _cal_weight; + uint32_t _zero_scale_value; + uint32_t _full_scale_value; + float _grams_per_bit; + +}; + +#endif