Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 /* 00002 * mbed Application program / Simple Digital Volt-meter 00003 * on Nucleo-L152RE 00004 * 00005 * Copyright (c) 2016 Kenji Arai / JH1PJL 00006 * http://www.page.sannet.ne.jp/kenjia/index.html 00007 * http://mbed.org/users/kenjiArai/ 00008 * Created: Nobember 15th, 2016 00009 * Revised: Nobember 16th, 2016 00010 * 00011 * 00012 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 00013 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00014 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 00015 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 00016 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 00017 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR 00018 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. 00019 */ 00020 00021 #define VOLTMETER 00022 //#define CALC_VDD 00023 //#define READ_VREF_TEMP 00024 00025 #include "mbed.h" 00026 00027 #if defined(VOLTMETER) 00028 00029 /* Use R1 & R2 divider 00030 | Nucleo-L152RE 00031 V_INPUT <-- R1 -.-----| A0(PA_0) 00032 | | 00033 R2 | 00034 |_____| GND 00035 | 00036 */ 00037 #define R1 (3332.4f) // target 3.3K Ohm 00038 #define R2 (987.54f) // target 1K Ohm 00039 00040 AnalogIn v_input(A0); 00041 AnalogIn vref(ADC_VREF); 00042 Timer tmr; 00043 00044 int main() { 00045 double v_in, vdd; 00046 double v_in_actual; 00047 00048 while(true) { 00049 tmr.reset(); 00050 tmr.start(); 00051 vdd = (1.224f) / vref.read(); 00052 v_in = v_input.read(); 00053 v_in_actual = v_in * vdd * ( R1 + R2) / R2; 00054 printf("V IN : %5.3f [V]\r\n", v_in_actual); 00055 wait_ms(500 - tmr.read_ms()); // 0.5sec interval 00056 } 00057 } 00058 #endif 00059 00060 #if defined(CALC_VDD) 00061 00062 AnalogIn vref(ADC_VREF); 00063 DigitalOut myled(LED1); 00064 Timer tmr; 00065 00066 /* 00067 Calculate Voltage data 00068 00069 Vdd: CPU Vdd line voltage 00070 (If VREF+ connected Vdd and VREF- connected GND) 00071 dt_adc: ADC data (12bit) 00072 VREFINT: Internal bandgap voltage 00073 1.202V(min), 1.224V(typ), 1.242V(max) 00074 VREFINT_CAL Raw data acquired at temperature of 30 °C, 00075 Vdd = 3 V Addr: 0x1FF80078-0x1FF80079 00076 00077 VREFINT_CAL = 3000 * VREF(Factory) / 4096 [V] 00078 Vdd = VREFINT_CAL / VREFINT(ADC float) [V] 00079 00080 reference: 00081 en.CD00277537.pdf page 56/133 (April 2016 DocID17659 Rev 12) 00082 en.CD00240193.pdf page 287/908 (September 2016 DocID15965 Rev 14) 00083 */ 00084 int main() { 00085 double vdd; 00086 double vdd_calibed; 00087 double vref_calibed; 00088 double vref_f; 00089 uint16_t vref_u16; 00090 uint16_t vref_cal; 00091 00092 vref_cal = *(__IO uint16_t *)((uint32_t)0x1ff800f8); 00093 while(true) { 00094 tmr.reset(); 00095 tmr.start(); 00096 myled = 1; 00097 wait(0.2f); 00098 myled = 0; 00099 wait(0.6f); 00100 vref_f = vref.read(); 00101 vref_u16 = vref.read_u16(); 00102 printf("Vref(f): %f, Vref : %u, Vref_CAL : %u,", 00103 vref_f, vref_u16, vref_cal); 00104 vref_calibed = 3.0f * (double)vref_cal / 4096.0f; 00105 vdd_calibed = vref_calibed / vref_f; 00106 vdd = 1.224f / vref_f; 00107 printf(" Vref(Calibrated) : %f, VDD(Calibrated) : %f, VDD : %f,", 00108 vref_calibed, vdd_calibed, vdd); 00109 printf(" VDD(measured my Nucleo) : 3.3163\r\n"); 00110 wait_ms(1000 - tmr.read_ms()); // 1sec interval 00111 } 00112 } 00113 #endif 00114 00115 #if defined(READ_VREF_TEMP) 00116 00117 AnalogIn vrefint(ADC_VREF); 00118 AnalogIn tempint(ADC_TEMP); 00119 00120 int main() { 00121 while(true) { 00122 printf("Vref(f): %f, Vref : %u, Temperature : %u\r\n", 00123 vrefint.read(), vrefint.read_u16(), tempint.read_u16()); 00124 wait(1.0f); 00125 } 00126 } 00127 #endif
Generated on Wed Jul 13 2022 01:34:38 by
1.7.2