diff options
| author | Grant Miller <[email protected]> | 2022-10-23 16:31:10 -0500 |
|---|---|---|
| committer | Grant Miller <[email protected]> | 2022-10-24 04:00:29 -0500 |
| commit | 545cc9326b47efc27549a60b3539e93ea0d04d70 (patch) | |
| tree | 275a01869a94a07c513d90795633cbde44b4fe1e /examples | |
| parent | ce1cba761c2942b7faa27f4098487c6468784729 (diff) | |
stm32/adc: Remove voltage and temperature conversions
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/stm32f1/src/bin/adc.rs | 12 | ||||
| -rw-r--r-- | examples/stm32f4/src/bin/adc.rs | 27 | ||||
| -rw-r--r-- | examples/stm32f7/src/bin/adc.rs | 12 |
3 files changed, 45 insertions, 6 deletions
diff --git a/examples/stm32f1/src/bin/adc.rs b/examples/stm32f1/src/bin/adc.rs index 2d6b4a0e9..3521d06bd 100644 --- a/examples/stm32f1/src/bin/adc.rs +++ b/examples/stm32f1/src/bin/adc.rs | |||
| @@ -17,10 +17,18 @@ async fn main(_spawner: Spawner) { | |||
| 17 | let mut pin = p.PB1; | 17 | let mut pin = p.PB1; |
| 18 | 18 | ||
| 19 | let mut vref = adc.enable_vref(&mut Delay); | 19 | let mut vref = adc.enable_vref(&mut Delay); |
| 20 | adc.calibrate(&mut vref); | 20 | let vref_sample = adc.read(&mut vref); |
| 21 | let convert_to_millivolts = |sample| { | ||
| 22 | // From http://www.st.com/resource/en/datasheet/CD00161566.pdf | ||
| 23 | // 5.3.4 Embedded reference voltage | ||
| 24 | const VREF_MV: u32 = 1200; | ||
| 25 | |||
| 26 | (u32::from(sample) * VREF_MV / u32::from(vref_sample)) as u16 | ||
| 27 | }; | ||
| 28 | |||
| 21 | loop { | 29 | loop { |
| 22 | let v = adc.read(&mut pin); | 30 | let v = adc.read(&mut pin); |
| 23 | info!("--> {} - {} mV", v, adc.to_millivolts(v)); | 31 | info!("--> {} - {} mV", v, convert_to_millivolts(v)); |
| 24 | Timer::after(Duration::from_millis(100)).await; | 32 | Timer::after(Duration::from_millis(100)).await; |
| 25 | } | 33 | } |
| 26 | } | 34 | } |
diff --git a/examples/stm32f4/src/bin/adc.rs b/examples/stm32f4/src/bin/adc.rs index 1d030f7dc..5e036bb44 100644 --- a/examples/stm32f4/src/bin/adc.rs +++ b/examples/stm32f4/src/bin/adc.rs | |||
| @@ -24,19 +24,40 @@ async fn main(_spawner: Spawner) { | |||
| 24 | // Startup delay can be combined to the maximum of either | 24 | // Startup delay can be combined to the maximum of either |
| 25 | delay.delay_us(Temperature::start_time_us().max(VrefInt::start_time_us())); | 25 | delay.delay_us(Temperature::start_time_us().max(VrefInt::start_time_us())); |
| 26 | 26 | ||
| 27 | let vref_sample = adc.read_internal(&mut vrefint); | ||
| 28 | |||
| 29 | let convert_to_millivolts = |sample| { | ||
| 30 | // From http://www.st.com/resource/en/datasheet/DM00071990.pdf | ||
| 31 | // 6.3.24 Reference voltage | ||
| 32 | const VREF_MILLIVOLTS: u32 = 1210; // mV | ||
| 33 | |||
| 34 | (u32::from(sample) * VREF_MILLIVOLTS / u32::from(vref_sample)) as u16 | ||
| 35 | }; | ||
| 36 | |||
| 37 | let convert_to_celcius = |sample| { | ||
| 38 | // From http://www.st.com/resource/en/datasheet/DM00071990.pdf | ||
| 39 | // 6.3.22 Temperature sensor characteristics | ||
| 40 | const V25: i32 = 760; // mV | ||
| 41 | const AVG_SLOPE: f32 = 2.5; // mV/C | ||
| 42 | |||
| 43 | let sample_mv = convert_to_millivolts(sample) as i32; | ||
| 44 | |||
| 45 | (sample_mv - V25) as f32 / AVG_SLOPE + 25.0 | ||
| 46 | }; | ||
| 47 | |||
| 27 | loop { | 48 | loop { |
| 28 | // Read pin | 49 | // Read pin |
| 29 | let v = adc.read(&mut pin); | 50 | let v = adc.read(&mut pin); |
| 30 | info!("PC1: {} ({} mV)", v, adc.to_millivolts(v)); | 51 | info!("PC1: {} ({} mV)", v, convert_to_millivolts(v)); |
| 31 | 52 | ||
| 32 | // Read internal temperature | 53 | // Read internal temperature |
| 33 | let v = adc.read_internal(&mut temp); | 54 | let v = adc.read_internal(&mut temp); |
| 34 | let celcius = Temperature::to_celcius(adc.to_millivolts(v)); | 55 | let celcius = convert_to_celcius(v); |
| 35 | info!("Internal temp: {} ({} C)", v, celcius); | 56 | info!("Internal temp: {} ({} C)", v, celcius); |
| 36 | 57 | ||
| 37 | // Read internal voltage reference | 58 | // Read internal voltage reference |
| 38 | let v = adc.read_internal(&mut vrefint); | 59 | let v = adc.read_internal(&mut vrefint); |
| 39 | info!("VrefInt: {} ({} mV)", v, adc.to_millivolts(v)); | 60 | info!("VrefInt: {} ({} mV)", v, convert_to_millivolts(v)); |
| 40 | 61 | ||
| 41 | Timer::after(Duration::from_millis(100)).await; | 62 | Timer::after(Duration::from_millis(100)).await; |
| 42 | } | 63 | } |
diff --git a/examples/stm32f7/src/bin/adc.rs b/examples/stm32f7/src/bin/adc.rs index 80fad8c41..d932f8b31 100644 --- a/examples/stm32f7/src/bin/adc.rs +++ b/examples/stm32f7/src/bin/adc.rs | |||
| @@ -16,9 +16,19 @@ async fn main(_spawner: Spawner) { | |||
| 16 | let mut adc = Adc::new(p.ADC1, &mut Delay); | 16 | let mut adc = Adc::new(p.ADC1, &mut Delay); |
| 17 | let mut pin = p.PA3; | 17 | let mut pin = p.PA3; |
| 18 | 18 | ||
| 19 | let mut vref = adc.enable_vrefint(); | ||
| 20 | let vref_sample = adc.read_internal(&mut vref); | ||
| 21 | let convert_to_millivolts = |sample| { | ||
| 22 | // From http://www.st.com/resource/en/datasheet/DM00273119.pdf | ||
| 23 | // 6.3.27 Reference voltage | ||
| 24 | const VREF_MV: u32 = 1210; | ||
| 25 | |||
| 26 | (u32::from(sample) * VREF_MV / u32::from(vref_sample)) as u16 | ||
| 27 | }; | ||
| 28 | |||
| 19 | loop { | 29 | loop { |
| 20 | let v = adc.read(&mut pin); | 30 | let v = adc.read(&mut pin); |
| 21 | info!("--> {} - {} mV", v, adc.to_millivolts(v)); | 31 | info!("--> {} - {} mV", v, convert_to_millivolts(v)); |
| 22 | Timer::after(Duration::from_millis(100)).await; | 32 | Timer::after(Duration::from_millis(100)).await; |
| 23 | } | 33 | } |
| 24 | } | 34 | } |
