popopupa 发表于 2017-5-12 22:21:24

LGT 8F328P ADC学习笔记

本帖最后由 popopupa 于 2017-5-12 22:23 编辑

1. LGT 8F328P QFP32 有8个ADC输入引脚,A0-A7,与Arduino UNO相同。
2. 支持12位ADC,UNO是10位。analogRead的范围是0-4095
3. 关于参考电压:可以使用电源参考、外部Vref输入、内部1.024V、
   内部2.048V、内部4.096V共五种参考模式,使用时比UNO灵活很多。
4. 以UNO为例,当使用电源参考时 测量电压 V = value * 5000 / 1024 (mV)
   当使用8F328P时,如5V供电    测量电压 V = value * 5000 / 4096 (mV)
5. 当使用内部参考时,事情变得非常简单
   1.024V ----> V = value * 1024 / 4096 = value / 4(mV)
   2.048V ----> V = value * 2048 / 4096 = value / 2(mV)
   4.096V ----> V = value * 4096 / 4096 = value    (mV)
6. 选择合适的参考电压,可以提高测量精度,比如1.024V参考可得到
   0.25mV的测量分辨率。而4.096V参考电压对应的分辨率为1mV。
7. 官方给出的内部参考电压精度是±0.5%,比电源电压精度高,也比从1117
   得到的3.3V更精确,所以当使用8F328P的ADC时,尽量用内部参考电源。
int   value;               // ADC转换输出
float voltage;               // 电压测量值
void setup() {
//analogReference(INTERNAL1V024);
analogReference(INTERNAL2V048);
//analogReference(INTERNAL4V096);       // 使用VCC作为参考时,不需要这句
Serial.begin(57600);
}
void loop() {
value = analogRead(A1);
Serial.print("value = ");
Serial.print(value);
voltage = 0.5 * value;      // 2.048内部参考时的换算公式
Serial.print("------>");
Serial.print(voltage);
Serial.println("mV");
delay(10);
}

有疏漏和错误请大家及时指出,以免误导更多人。

弘毅 发表于 2017-5-12 22:23:45

8F328P这里就比较人性化。。。1.024 2.048 4.096除以10位或者12位。。都是整除

Zeye_Pendragon 发表于 2017-5-13 11:46:32

ALPHA 8F328P-U开发板A6 A7 DAC1和PE4没引出来。。。

弘毅 发表于 2017-5-13 13:11:52

Zeye_Pendragon 发表于 2017-5-13 11:46
ALPHA 8F328P-U开发板A6 A7 DAC1和PE4没引出来。。。

8F328P芯片现在只有一路DAC了吧,PD4,也就是D4管脚。其他的非UNO使用管脚。。。。没引出来,这个版本主要就是管脚完全兼容UNO。引出更多管脚的呢,得等后期了,因为得修改管脚配置。工作量不小。

Zeye_Pendragon 发表于 2017-5-14 10:13:48

弘毅 发表于 2017-5-13 13:11
8F328P芯片现在只有一路DAC了吧,PD4,也就是D4管脚。其他的非UNO使用管脚。。。。没引出来,这个版本主 ...

binary.h和standard目录下pins_arduino.h关于B0~B7的定义冲突了,在arduino IDE 1.8.2下编译时 。 1.8.1没有这个问题

D19TCI 发表于 2017-5-16 09:45:27

我在ocrobot0.1.1中上传后ACD变成10位的,如何使用12位设置?

popopupa 发表于 2017-5-18 06:21:35

D19TCI 发表于 2017-5-16 09:45
我在ocrobot0.1.1中上传后ACD变成10位的,如何使用12位设置?

等待ocrobot版本更新,据说下个版本就会有设置了
页: [1]
查看完整版本: LGT 8F328P ADC学习笔记