测试了一下Arduino的AD功能,不同于我之前用过的自己设计的产品,还需要自己去开发很多驱动,Arduino的风格很明显——开箱即用!
先看一下相应的资源分配:

我手头的板子中有6路AD。
尝试实现相应的代码:
const int arduino_ad_pin0 = 0;
const int arduino_ad_pin1 = 1;
const int arduino_ad_pin2 = 2;
const int arduino_ad_pin3 = 3;
const int arduino_ad_pin4 = 4;
const int arduino_ad_pin5 = 5;
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop()
{
int ad_ret_val;
// put your main code here, to run repeatedly:
/* ad0 */
ad_ret_val = analogRead(arduino_ad_pin0);
Serial.print("AD0: ");
Serial.print(ad_ret_val);
Serial.print("\t");
Serial.print(ad_ret_val * 5000.0f / 1024.0f);
Serial.println("mv");
delay(100);
/* ad1 */
ad_ret_val = analogRead(arduino_ad_pin1);
Serial.print("AD1: ");
Serial.print(ad_ret_val);
Serial.print("\t");
Serial.print(ad_ret_val * 5000.0f / 1024.0f);
Serial.println("mv");
delay(100);
/* ad2 */
ad_ret_val = analogRead(arduino_ad_pin2);
Serial.print("AD2: ");
Serial.print(ad_ret_val);
Serial.print("\t");
Serial.print(ad_ret_val * 5000.0f / 1024.0f);
Serial.println("mv");
delay(100);
/* ad3 */
ad_ret_val = analogRead(arduino_ad_pin3);
Serial.print("AD3: ");
Serial.print(ad_ret_val);
Serial.print("\t");
Serial.print(ad_ret_val * 5000.0f / 1024.0f);
Serial.println("mv");
delay(100);
/* ad4 */
ad_ret_val = analogRead(arduino_ad_pin4);
Serial.print("AD4: ");
Serial.print(ad_ret_val);
Serial.print("\t");
Serial.print(ad_ret_val * 5000.0f / 1024.0f);
Serial.println("mv");
delay(100);
/* ad5 */
ad_ret_val = analogRead(arduino_ad_pin5);
Serial.print("AD5: ");
Serial.print(ad_ret_val);
Serial.print("\t");
Serial.print(ad_ret_val * 5000.0f / 1024.0f);
Serial.println("mv");
delay(100);
Serial.println("-------------------------------------------------------------");
delay(1000);
}
运行效果:

比较有意思的是默认全都不是0,不知道这个电压是如何来的,回头可以再用示波器测试一次。为了查看ADC是否工作正常,AD0,我直接接上5V:

看上去,至少第一路还是正确的。第二路收到了影响?再次测试AD1:

也有类似的效果,直接测试一下AD2,这次直接接地:

看上去也是正确的,但是为什么有这么大的偏差还是有点没弄明白。难道还得配置pin脚的模式?
增加配置:
void setup()
{
// put your setup code here, to run once:
pinMode(arduino_ad_pin0 , INPUT);
pinMode(arduino_ad_pin1 , INPUT);
pinMode(arduino_ad_pin2 , INPUT);
pinMode(arduino_ad_pin3 , INPUT);
pinMode(arduino_ad_pin4 , INPUT);
pinMode(arduino_ad_pin5 , INPUT);
Serial.begin(9600);
}
测试的效果还是没有改进,测试效果如下:

效果不知很好,但是大致的效果还是的看到了。
















