TA的每日心情 | 奋斗 2020-5-27 15:41 |
---|
签到天数: 868 天 连续签到: 1 天 [LV.10]以坛为家III
|
本帖最后由 wambob 于 2016-12-9 13:23 编辑
https://www.cirmall.com/bbs/thread-57695-1-1.html
上篇用模拟驱动了OLED,接着学习ADC采集,并显示到OLED上。
粗心的,导致ADC采集数据不对。
先看看Fireduino上的ADC介绍吧,不能把它当成以前的mcu来看了。- 选择ADC的基准电压(等同于可以输入电压的最大值)。Fireduino只能够选择内部基准电压,并且只有一个基准电压可以选取,为2.56V。
复制代码 例程里的是2.55v。
读取模拟引脚的输入电压测量值(不可大于基准电压)。
Fireduino一共有8个10bit的ADC(逐次逼近型)输入口,分别是A0~A7。调用此函数的时候,ADC会将基准电压分成1024份,然后一份一份的叠加,
直到最接近当前模拟引脚的电压为止,此时叠加的值就是电压测量值。
所以实际上引脚上的电压值为:V = value/1024*Vef(V:实际测量电压值,value为电压测量值,即此函数的返回值,Vef为基准电压,2.56V)。
使用的API这和Arduino的相同。
返回值ADC测量值,取值为0~1023。 获取当前电压值的方法是:当前电压值 = (ADC测量值/1023)* ADC基准电压值。 当输入端悬空时,显示采集出的干扰值。
使用板载的电位器吧,注意不让引出头的电压大于2.55V。
主程序- #include "SSD1306.h"
- char dushu[100] ;
- uint8_t i;
- uint32_t val=0;
- int analogPin = A1;
- void setup()
- { /* add setup code here */
- Serial.begin(9600);
- OLED_pin_Init();
- oled_init();
- }
- void loop()
- {
- /* add main program code here */
- OLED_Clear();
- //memset(dushu,0,100);
- float voltage; // variable for save the voltage of pin A0
- val = analogRead(analogPin); // read the input pin
- //voltage = (float)val / 1023.0 * 2.55;
- sprintf(dushu,"%7.6f" , (float)val / 1023.0 * 2.55);
- //printf("%7.6f", (float)val / 1023.0 * 2.55 );
- OLED_ShowString(0,0,"Fireduino",24);
- //OLED_ShowString(10,25,"Hello World!",16);
- OLED_ShowString(10,30,dushu,16);
- OLED_Refresh_Gram();//更新显示到OLED
- delay(1000);+-
-
-
- }
复制代码 下载代码时,XP系统的串口有时不好使,想死机那样,使用升级模式下载非常好,但是每次都得按Update和reset。
Fireduino_1306.rar
(8.18 KB, 下载次数: 2)
|
评分
-
查看全部评分
|