Skip to content

Commit 051a2b6

Browse files
pcurtkartben
authored andcommitted
samples: drivers: adc: example to use AD4114 on stm32f3_disco
This examples shows how to use the AD4114 ADC on a stm32f3_disco board. As the AD4114 is a 24bits ADC resolution we need to be able to pass 32bits buffer to get the samples. CONFIG_SEQUENCE_RESOLUTION is set to 12 instead of 24, and the gain zephyr,vref-mv is adapted to avoid overflows using the exisiting adc_raw_to_millivolts function. Signed-off-by: Pierrick Curt <[email protected]>
1 parent 8250cc6 commit 051a2b6

File tree

5 files changed

+159
-0
lines changed

5 files changed

+159
-0
lines changed

samples/drivers/adc/adc_sequence/Kconfig

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,8 @@ config SEQUENCE_RESOLUTION
99
int "Set the resolution of the sequence readings."
1010
default 12
1111

12+
config SEQUENCE_32BITS_REGISTERS
13+
bool "ADC data sequences are on 32bits"
14+
default n
15+
1216
source "Kconfig.zephyr"
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# A4114 driver can only acquire one sequence sample
2+
CONFIG_SEQUENCE_SAMPLES=1
3+
CONFIG_SEQUENCE_RESOLUTION=12
4+
CONFIG_SEQUENCE_32BITS_REGISTERS=y
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
/*
2+
* Copyright (c) 2024 Pierrick Curt
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
/ {
8+
aliases {
9+
adc0 = &adc_ad4114;
10+
};
11+
};
12+
13+
&spi1 {
14+
pinctrl-0 = <&spi1_nss_pa4 &spi1_sck_pa5
15+
&spi1_miso_pa6 &spi1_mosi_pa7>;
16+
pinctrl-names = "default";
17+
status = "okay";
18+
19+
adc_ad4114: adc_ad4114@0 {
20+
compatible = "adi,ad4114-adc";
21+
spi-max-frequency = <DT_FREQ_M(1)>;
22+
status = "okay";
23+
reg = <0>;
24+
#io-channel-cells = <1>;
25+
#address-cells = <1>;
26+
#size-cells = <0>;
27+
28+
/* INPUTx mapping bits [9:0] for CH0 to CH15 */
29+
map-inputs = <0x10 0x30 0x50 0x70 0x90 0xB0 0xD0 0xF0 0x110 \
30+
0x130 0x150 0x170 0x190 0x1B0 0x1D0 0x1F0>;
31+
32+
33+
channel@0 {
34+
reg = <0x0>;
35+
zephyr,gain = "ADC_GAIN_1";
36+
zephyr,reference = "ADC_REF_EXTERNAL0";
37+
zephyr,vref-mv = <8>;
38+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
39+
};
40+
channel@1 {
41+
reg = <1>;
42+
zephyr,gain = "ADC_GAIN_1";
43+
zephyr,reference = "ADC_REF_EXTERNAL0";
44+
zephyr,vref-mv = <8>;
45+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
46+
};
47+
channel@2 {
48+
reg = <2>;
49+
zephyr,gain = "ADC_GAIN_1";
50+
zephyr,reference = "ADC_REF_EXTERNAL0";
51+
zephyr,vref-mv = <8>;
52+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
53+
};
54+
channel@3 {
55+
reg = <3>;
56+
zephyr,gain = "ADC_GAIN_1";
57+
zephyr,reference = "ADC_REF_EXTERNAL0";
58+
zephyr,vref-mv = <8>;
59+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
60+
};
61+
channel@4 {
62+
reg = <4>;
63+
zephyr,gain = "ADC_GAIN_1";
64+
zephyr,reference = "ADC_REF_EXTERNAL0";
65+
zephyr,vref-mv = <8>;
66+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
67+
};
68+
channel@5 {
69+
reg = <5>;
70+
zephyr,gain = "ADC_GAIN_1";
71+
zephyr,reference = "ADC_REF_EXTERNAL0";
72+
zephyr,vref-mv = <8>;
73+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
74+
};
75+
channel@6 {
76+
reg = <6>;
77+
zephyr,gain = "ADC_GAIN_1";
78+
zephyr,reference = "ADC_REF_EXTERNAL0";
79+
zephyr,vref-mv = <8>;
80+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
81+
};
82+
channel@7 {
83+
reg = <7>;
84+
zephyr,gain = "ADC_GAIN_1";
85+
zephyr,reference = "ADC_REF_EXTERNAL0";
86+
zephyr,vref-mv = <8>;
87+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
88+
};
89+
channel@8 {
90+
reg = <8>;
91+
zephyr,gain = "ADC_GAIN_1";
92+
zephyr,reference = "ADC_REF_EXTERNAL0";
93+
zephyr,vref-mv = <8>;
94+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
95+
};
96+
channel@9 {
97+
reg = <9>;
98+
zephyr,gain = "ADC_GAIN_1";
99+
zephyr,reference = "ADC_REF_EXTERNAL0";
100+
zephyr,vref-mv = <8>;
101+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
102+
};
103+
channel@a {
104+
reg = <0xa>;
105+
zephyr,gain = "ADC_GAIN_1";
106+
zephyr,reference = "ADC_REF_EXTERNAL0";
107+
zephyr,vref-mv = <8>;
108+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
109+
};
110+
channel@b {
111+
reg = <0xb>;
112+
zephyr,gain = "ADC_GAIN_1";
113+
zephyr,reference = "ADC_REF_EXTERNAL0";
114+
zephyr,vref-mv = <8>;
115+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
116+
};
117+
channel@c {
118+
reg = <0xc>;
119+
zephyr,gain = "ADC_GAIN_1";
120+
zephyr,reference = "ADC_REF_EXTERNAL0";
121+
zephyr,vref-mv = <8>;
122+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
123+
};
124+
channel@d {
125+
reg = <0xd>;
126+
zephyr,gain = "ADC_GAIN_1";
127+
zephyr,reference = "ADC_REF_EXTERNAL0";
128+
zephyr,vref-mv = <8>;
129+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
130+
};
131+
channel@e {
132+
reg = <0xe>;
133+
zephyr,gain = "ADC_GAIN_1";
134+
zephyr,reference = "ADC_REF_EXTERNAL0";
135+
zephyr,vref-mv = <8>;
136+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
137+
};
138+
channel@f {
139+
reg = <0xf>;
140+
zephyr,gain = "ADC_GAIN_1";
141+
zephyr,reference = "ADC_REF_EXTERNAL0";
142+
zephyr,vref-mv = <8>;
143+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
144+
};
145+
};
146+
};

samples/drivers/adc/adc_sequence/sample.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ tests:
1313
- nrf54h20dk/nrf54h20/cpuapp
1414
- ucans32k1sic
1515
- frdm_mcxc242
16+
- stm32f3_disco
1617
integration_platforms:
1718
- nrf52840dk/nrf52840
1819
harness: console

samples/drivers/adc/adc_sequence/src/main.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ int main(void)
3030
{
3131
int err;
3232
uint32_t count = 0;
33+
#ifdef CONFIG_SEQUENCE_32BITS_REGISTERS
34+
uint32_t channel_reading[CONFIG_SEQUENCE_SAMPLES][CHANNEL_COUNT];
35+
#else
3336
uint16_t channel_reading[CONFIG_SEQUENCE_SAMPLES][CHANNEL_COUNT];
37+
#endif
3438

3539
/* Options for the sequence sampling. */
3640
const struct adc_sequence_options options = {

0 commit comments

Comments
 (0)