查看ADC的源代码
←
ADC
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
==== 检测电池电压 ==== 用内部 1.1V 基准电压源: <source lang=cpp> analogReference(INTERNAL);use internal 1.1V as Avref //analogReference(DEFAULT); use AVcc as AVref </source> VBAT 接 0.1% 300K - 100K - GND,ADC 脚接两个电阻之间,测量 100K 电阻两端电压。。。 或者选择内部 1.1V 作为 Vref,AREF 脚作为 Vin,反推 Vin: ADC = Vin/Vref * 2^n, n = 10 in 328p <source lang=cpp> #include "Arduino.h" #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) #define ADMUX_VCCWRT1V1 (_BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1)) #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) #define ADMUX_VCCWRT1V1 (_BV(MUX5) | _BV(MUX0)) #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) #define ADMUX_VCCWRT1V1 (_BV(MUX3) | _BV(MUX2)) #else #define ADMUX_VCCWRT1V1 (_BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1)) #endif float Read_Volts(void) { // Read 1.1V reference against AVcc // set the reference to Vcc and the measurement to the internal 1.1V reference if (ADMUX != ADMUX_VCCWRT1V1) { ADMUX = ADMUX_VCCWRT1V1; // Bandgap reference start-up time: max 70us // Wait for Vref to settle. delayMicroseconds(350); } // Start conversion and wait for it to finish. ADCSRA |= _BV(ADSC); while (bit_is_set(ADCSRA,ADSC)) {}; // Result is now stored in ADC. // Calculate Vcc (in V) float vcc = 1.1*1024.0 / ADC; return vcc; } </source> [[文件:328p-admux.png]] [[文件:328p-admux2.png]] 其中REFS1和REFS0用于设置Vref,这里应该配置为01对应Vcc口 [[文件:328p-admux3.png]] MUX3…0用于选择ADC的输入Vin,这里应配置为内部1.1v对应的1110 <br><br>
返回到
ADC
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面