NRF51822---AD采样(连载5)

  • 前言
  • AD简介
  • 框图
  • 代码
  • 实际采样图片
  • 代码获取

前言

IIC协议已经讲完了,屏幕也亮了,也就是说显示没问题了。手柄除了显示数据,还要采集数据。采集数据就要用到AD了。所以,AD还是很关键的。今天就来讲讲AD的相关知识、

AD简介

AD全称Analog to Digital Converter,顾名思义…(打开有道翻译一下就是a/d转换器)。A是模拟量,D是数字量。恩,原来是将模拟量转换成数字量的意思、

框图

这个框图还是比较好理解的,结合下面的寄存器释义更加容易明白。具体流程如下:
首先配置CONFIG.PSEL设定ADC的采样通道,之后配置CONFIG.INPSEL设定输入是用0-7通道还是直接用VDD作为输入通道。如果使用VDD则有两种,一种VDD的2/3作为输入通道,一种是VDD的1/3作为输入通道。如果是用0-7通道作为输入则有3种选择。一种是通道直接作为输入,不进行分频、第二种是0-7通道输入值×2/3,第三种是0-7通道输入值×1/3。通道选择好后就是设定采样分辨率了。通过设定CONFIG.RES可以分别设置成8.9.10bit三种分辨率,一般选择10bit。
右侧则为参考电压设定。设定CONFIG.REFSEL可配置参考电压为外部电压、内部电压或者是VDD电压。如果选用外部电压还要通过配置CONFIG.EXTREFSEL设定选用外部哪一路外部电压,

代码

寄存器基本上没啥讲的,直接上代码吧,很简单。结合上一节讲的OLED,这节实现的功能是采样电压显示到oled上、
//ADC_res  分辨率   ADC_input_selection 通道   ADC_interrupt_enabled  使能位
void adc_init(unsigned char ADC_res,unsigned char ADC_input_selection,unsigned char ADC_interrupt_enabled)
{//设置CONFIG寄存器if(ADC_input_selection <= 7){                    NRF_ADC->CONFIG = ADC_res << ADC_CONFIG_RES_Pos |  ADC_CONFIG_INPSEL_AnalogInputOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos |ADC_CONFIG_REFSEL_SupplyOneThirdPrescaling << ADC_CONFIG_REFSEL_Pos | (1 << ADC_input_selection) << ADC_CONFIG_PSEL_Pos;NRF_ADC->ENABLE = 1;  }
}//读取数据
unsigned int nrf_adc_read(void)
{unsigned int adc_data;NRF_ADC->TASKS_START = 1;while(NRF_ADC->EVENTS_END == 0);NRF_ADC->EVENTS_END = 0;adc_data = NRF_ADC->RESULT;return adc_data;
}

贴一张CONFIG寄存器的说明,很简单,就这一个寄存器就ok了。

int main(void)
{char aa[10];char bb[10];unsigned int num,num1;nrf_gpio_cfg_output(21); //配置P021引脚为输出SCLnrf_gpio_cfg_output(22);    //配置P022引脚为输出nrf_gpio_pin_set(21);nrf_delay_ms(20);nrf_gpio_pin_set(22);nrf_delay_ms(800);OLED_Init();nrf_delay_ms(200);OLED_Clear();adc_init(2,adc,0);//adc初始化while(1){num=nrf_adc_read(); num1 = num*330/1024;                      //扩大100倍,10位adcnrf_delay_ms(100);OLED_ShowString(0,0,"sampling value:",12);    //采样值sprintf(aa,"%d",num);sprintf(bb,"%d",num1);OLED_ShowString(20,2,aa,12);OLED_ShowString(0,4,"voltage values:",12);    //转换成电压值OLED_ShowString(20,6,bb,12);OLED_ShowString(60,6,"*0.01V",12);            //扩大100倍
//      OLED_ShowString(0,8,"D_SEngineer",12);}
}

实际采样图片

采样还是挺准的,实际测量电压为2.1V,扩大了100倍显示210。

代码获取

代码领取方式,复制下面关键字到公众号回复 ,即可领取源码。NRF51822外设先讲这么多,下一步开始画手柄了。

nrf51822外设--adc

NRF51822---AD采样(连载5)相关推荐

  1. 算术平均值滤波matlab程序,基于S7-1200 AD采样的高效数字滤波算法的设计与实践...

    在工业控制中,常常会伴随大量的模拟量数据采样.模拟量采样时,由于待采量本身.传感器和传输过程中的外界干扰,特别是非稳态干扰信号等因素的影响,采样值中通常含有各种周期性和非周期性的噪声和干扰.为得到稳定 ...

  2. c语言ad采样程序思路,单片机AD采样程序及其寄存器讲解

    描述 ad采样的步骤:首先将外部的信号,通过电路或者已有的AD芯片转换成 主CPU能接受的电压 信号.但是此电压信号必须转换成8.10 .12位或更高位数的数字才能进一步做计算.另外转换成位数多少表明 ...

  3. AD采样不准解决措施

    1:参考电压需要足够精确,推荐使用外部高精准参考电压.  2:如果PGA可调,增益系数一般是越小噪声越低.  3:一般最好用到满量程,此时AD精度不浪费.  4:如果有偏置,需要进行自校.  5:请注 ...

  4. ad采样做按键开关_电池应用中的电流采样电阻设计

    在电池充放电管理.电池管理保护以及电池电量计应用场合中,一般都会使用到电流采样电阻,进行电池充放电电流的检测.其原理是在电池充放电回路中放置一个采样电阻R, 电流流经采样电阻产生压差,采样电阻两端电压 ...

  5. AD采样的平均值滤波

    基本问题:单片机ad采样,连续采样十次,对这十次数据取平均值. 注意:最开始的一次就是用当次的数据,以后每更新一个数据就取当前数据加上前九个数据,取平均. 先看代码: static int _filt ...

  6. BLDC 120度方波控制方案 调制方式包含单极性和双极性,反电动势过零点AD采样

    BLDC 120度方波控制方案 调制方式包含单极性和双极性,反电动势过零点AD采样 :68300655567598504MCTianci

  7. ACQPS计算 AD采样保持电路 DSP2833x

    ACQPS计算 AD采样保持电路 DSP2833x AD采样窗口长ACQPS的最佳值需要进行计算.计算分为两种情况: high bandwidth,例如矢量闭环控制中的三相电流采样,实时性要求高,最小 ...

  8. 10种AD采样的软件滤波方法及算法

    AD采样点的电压多少有点起伏波动,经运放放大后电压的波动如果超过ADC的分辩率,则显示的值会出现波动.波动如果十分大的话, 建议在硬件上滤波,相反,如果波动较小,你可以用软件滤波方法解决这个问题. 1 ...

  9. 蓝桥杯嵌入式AD采样解析

    文章目录 前言 一.什么是AD采样 二.原理图查看及cubeMX配置 三.代码解析 总结 前言 本文将带大家学习AD采样. 一.什么是AD采样 原理部分这里就不多介绍了,给大家推荐一篇文章大家自己去了 ...

  10. 51单片机auxr寄存器_STC12C5A60S2单片机AD采样程序及其寄存器讲解

    /*************************************************************************************************** ...

最新文章

  1. ecs服务器配置git_基于ECS和NAS搭建个人网盘
  2. 中国小孩为何普遍爱吃洋快餐?[转]
  3. int main中char** argv与char *argv[]区别?(main函数)
  4. Android Custom View ----invalidate() 、postInvalidate() and requestLayout()
  5. 底层框架_你有必要了解一下Flink底层RPC使用的框架和原理
  6. 在中国,有这样一些村落
  7. js css模仿打字效果
  8. Elasticsearch查询之term/match解析
  9. WebFlux系列(十)WebClient 异常处理
  10. 第七:Pytes中的fixture大解剖(一)
  11. ELK 日志分析系统
  12. python3自动发送邮件并添加附件
  13. ASML、光刻机小文预告
  14. pyton 爬虫-图片
  15. 关于Sunday算法以及实现
  16. 2020-11-30 09:51:55 精确到秒的时间戳
  17. 函数中的形式参数和实际参数
  18. 中华英才网居然出现如此错误
  19. uniApp——个性化组件
  20. 《百面机器学习》试读 | AI热门应用之游戏中的人工智能

热门文章

  1. outlook qr码在哪里_聚合码微信支付宝申请开通,商家融合收款码实现一码支付,如何申请微信和支付宝合并收款码?聚合码支持信用卡、花呗、微信和支付宝收款...
  2. 小米高级交互设计师:产品设计的八个原则
  3. 【python量化】统计套利之配对交易策略实现(基于python)
  4. 用显卡加速c语言程序,教程 | 如何在Julia编程中实现GPU加速
  5. 围炉听风,新醅试手烫
  6. 总结数字签名实现身份验证
  7. 个人收集的IT技术网站集合,涉及web前后端,大数据,UI设计等。...
  8. 利用UCSC Xena做TCGA数据库的生存曲线分析
  9. 分而治之——最大子列和
  10. BGI-College生信入门系列——3、数据库