This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git
The following commit(s) were added to refs/heads/master by this push: new dfd1eb067 examples/ads7046: Add new example for ADS7046 ADC dfd1eb067 is described below commit dfd1eb0672b515779e86f7af7285692c2f473b34 Author: Niccolò Maggioni <nicco.maggi...@gmail.com> AuthorDate: Tue Aug 19 17:30:50 2025 +0200 examples/ads7046: Add new example for ADS7046 ADC Add a new example that shows how to read a sample from an ADS7046 ADC sensor registered on the SPI bus. Signed-off-by: Niccolò Maggioni <nicco.maggioni+nu...@gmail.com> --- examples/ads7046/CMakeLists.txt | 35 ++++++++++++++++ examples/ads7046/Kconfig | 36 +++++++++++++++++ examples/ads7046/Make.defs | 25 ++++++++++++ examples/ads7046/Makefile | 36 +++++++++++++++++ examples/ads7046/ads7046_main.c | 90 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 222 insertions(+) diff --git a/examples/ads7046/CMakeLists.txt b/examples/ads7046/CMakeLists.txt new file mode 100644 index 000000000..6e875a149 --- /dev/null +++ b/examples/ads7046/CMakeLists.txt @@ -0,0 +1,35 @@ +# ############################################################################## +# apps/examples/ads7046/CMakeLists.txt +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed to the Apache Software Foundation (ASF) under one or more contributor +# license agreements. See the NOTICE file distributed with this work for +# additional information regarding copyright ownership. The ASF licenses this +# file to you under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# +# ############################################################################## + +if(CONFIG_EXAMPLES_ADS7046) + nuttx_add_application( + NAME + ${CONFIG_EXAMPLES_ADS7046_PROGNAME} + PRIORITY + ${CONFIG_EXAMPLES_ADS7046_PRIORITY} + STACKSIZE + ${CONFIG_EXAMPLES_ADS7046_STACKSIZE} + MODULE + ${CONFIG_EXAMPLES_ADS7046} + SRCS + ads7046_main.c) +endif() diff --git a/examples/ads7046/Kconfig b/examples/ads7046/Kconfig new file mode 100644 index 000000000..c2d825a60 --- /dev/null +++ b/examples/ads7046/Kconfig @@ -0,0 +1,36 @@ +# +# For a description of the syntax of this configuration file, +# see the file kconfig-language.txt in the NuttX tools repository. +# + +config EXAMPLES_ADS7046 + tristate "ADS7046 ADC example" + default n + depends on ADC_ADS7046 + ---help--- + Enable the ADS7046 example + +if EXAMPLES_ADS7046 + +config EXAMPLES_ADS7046_PROGNAME + string "Program name" + default "ads7046" + ---help--- + This is the name of the program that will be used when the NSH ELF + program is installed. + +config EXAMPLES_ADS7046_PRIORITY + int "ADS7046 task priority" + default 100 + +config EXAMPLES_ADS7046_STACKSIZE + int "ADS7046 stack size" + default DEFAULT_TASK_STACKSIZE + +config EXAMPLES_ADS7046_DEVPATH + string "ADS7046 device path" + default "/dev/adc0" + ---help--- + The default path to the ADS7046 ADC device + +endif diff --git a/examples/ads7046/Make.defs b/examples/ads7046/Make.defs new file mode 100644 index 000000000..171c570f4 --- /dev/null +++ b/examples/ads7046/Make.defs @@ -0,0 +1,25 @@ +############################################################################ +# apps/examples/ads7046/Make.defs +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance with the +# License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +############################################################################ + +ifneq ($(CONFIG_EXAMPLES_ADS7046),) +CONFIGURED_APPS += $(APPDIR)/examples/ads7046 +endif diff --git a/examples/ads7046/Makefile b/examples/ads7046/Makefile new file mode 100644 index 000000000..310ccea67 --- /dev/null +++ b/examples/ads7046/Makefile @@ -0,0 +1,36 @@ +############################################################################ +# apps/examples/ads7046/Makefile +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance with the +# License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +############################################################################ + +include $(APPDIR)/Make.defs + +# ADS7046 ADC example built-in application info + +PROGNAME = $(CONFIG_EXAMPLES_ADS7046_PROGNAME) +PRIORITY = $(CONFIG_EXAMPLES_ADS7046_PRIORITY) +STACKSIZE = $(CONFIG_EXAMPLES_ADS7046_STACKSIZE) +MODULE = $(CONFIG_EXAMPLES_ADS7046) + +# ADS7046 ADC example + +MAINSRC = ads7046_main.c + +include $(APPDIR)/Application.mk diff --git a/examples/ads7046/ads7046_main.c b/examples/ads7046/ads7046_main.c new file mode 100644 index 000000000..1b0ca7253 --- /dev/null +++ b/examples/ads7046/ads7046_main.c @@ -0,0 +1,90 @@ +/**************************************************************************** + * apps/examples/ads7046/ads7046_main.c + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> +#include <stdio.h> +#include <fcntl.h> +#include <unistd.h> +#include <sys/ioctl.h> +#include <nuttx/analog/ioctl.h> +#include <nuttx/analog/ads7046.h> + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* As per the datasheet, the ADS7046 returns the following readings: + * INPUT VOLTAGE (AINP - AINM) DESCRIPTION HEX + * -------------------------------------- ------------------------ --- + * <= 1 LSB Negative full-scale code 000 + * 1 LSB to 2 LSB - 001 + * V_REF / 2 to V_REF / 2 + 1 LSB Mid code 7FF + * V_REF / 2 + 1 LSB to V_REF / 2 + 2 LSB - 800 + * >= V_REF - 1 LSB Positive full-scale code FFF + */ + +#define SAMPLE_TO_PCT(sample) (((sample) * 100) / 0xfff) + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: ads7046_main + ****************************************************************************/ + +int main(const int argc, FAR char *argv[]) +{ + UNUSED(argc); + UNUSED(argv); + + int ret; + int fd; + uint16_t sample; + + fd = open(CONFIG_EXAMPLES_ADS7046_DEVPATH, O_RDONLY); + if (fd < 0) + { + printf("Failed to open %s: %s (%d)\n", CONFIG_EXAMPLES_ADS7046_DEVPATH, + strerror(errno), errno); + return EXIT_FAILURE; + } + + ret = ioctl(fd, ANIOC_ADS7046_READ, &sample); + if (ret != OK) + { + perror("Could not ioctl fd"); + close(fd); + return EXIT_FAILURE; + } + + printf("ADS7046: hex=%x, dec=%"PRIu16", adc_percentage=%u%%\n", + sample, sample, SAMPLE_TO_PCT(sample)); + + close(fd); + + return EXIT_SUCCESS; +}