3964|4

2856

帖子

260

TA的资源

五彩晶圆(高级)

楼主
 

【R7F0C809】LED显示AD采样值 [复制链接]

本帖最后由 ltbytyn 于 2015-9-19 15:58 编辑

【R7F0C809】AD采样一贴中已经介绍了R7F0C809 ADC采样。瑞萨的板子上有LED,使用现有的LED将采样显示出来。




看了一下原理图,发现AN0口与LED显示控制SEG6是同一管脚。采样时,AN0(P07)做输入模拟脚,做SEG6控制LED显示时只能做普通输出IO口。因此如果打算用LED来显示采样值,只能采用分时复用的方式。
一段时间做模拟输入口进行ADC采样,过一段时间控制LED显示时做输出口使用。如此反复循环即可实现ADC采样值在LED上显示。
  1. void R_ADC_Get_Result(uint16_t *buffer)
  2. {
  3.     *buffer = ((uint16_t)ADCRH << 8 | ADCRL) >> 6;
  4. }
  5. /******************************************************************************
  6. * Function Name: R_ADC_Interrupt
  7. ******************************************************************************/
  8. __interrupt void R_ADC_Interrupt(void)
  9. {
  10.     R_ADC_Get_Result( &result_buffer[samle_num] );
  11.     samle_flag = 0;
  12. }
  13. void  Read_ADC(void)
  14. {
  15.    PM0 |= 0x80U;   /* use P07 as input mode */
  16.    PMC0 |= 0x80U;  /* use P07 as analog input */
  17.       
  18.    ADCEN = 1U;     /* supply AD clock */
  19.    ADM0 = 0x00U;   /* disable AD conversion and clear ADM0 register */
  20.    ADMK = 0U;      /* enable INTAD interrupt */
  21.    ADIF = 0U;      /* clear INTAD interrupt flag */
  22.    
  23.    ADM0 = 0x02U;   /* fCLK/8 */
  24.    ADM2 = 0x00U;   /* 10 bits */
  25.    ADS = 0x00U;    /* ANI0 */
  26.    ADCE = 1U;                                  /* enable AD comparator */
  27.    EI();                                       /* Enable interrupt */
  28.    /* ---- stabilization wait time(about 1us) ---- */
  29.    for (count=0U; count<3U; count++)   
  30.    {
  31.      NOP();
  32.    }
  33.    ADIF = 0U;       /* clear INTAD interrupt flag */
  34.    ADMK = 0U;       /* enable INTAD interrupt */
  35.     ADCS = 1U;       /* Start AD converter */
  36. }
  37. void  ADC_LED(void)
  38. {
  39.   uint32_t result;
  40.   samle_toale += result_buffer[samle_num];
  41.   samle_num++;
  42.   if(samle_num > 19)
  43.   {
  44.     result = samle_toale/20;
  45.     result *= 125;
  46.     result /= 256;     
  47.     LED[3] = 0x30+(uint8_t)(result/100);
  48.     LED[2] = 0x3A;
  49.     LED[1] = 0x30+(uint8_t)((result%100)/10);
  50.     LED[0] = 0x30+(uint8_t)(result%10);
  51.     samle_toale = 0;
  52.     samle_num = 0;     
  53.    }  
  54. }
  55. /******************************************************************************
  56. * Function Name: main
  57. * Description : This function implements main function.
  58. * Arguments : none
  59. * Return Value : none
  60. ******************************************************************************/
  61. void main(void)
  62. {   
  63.    samle_flag = 1;
  64.    samle_num = 0;
  65.    samle_toale = 0;
  66.    System_Init();                      /* Initializes some function moudle */
  67.    TS0 |= 0x01;                        /* Start TAU00 timer */
  68.    while(1)
  69.    {   
  70.       while(TMIF00 != 1);            /* Wait the TAU00 interrupt flag set to 1*/
  71.       TMIF00 = 0;                    /* TAU00 interrupt flag clear*/
  72.         
  73.       LED_Display();                 /* Executive the LED_Display function*/
  74.       Read_ADC();
  75.       while(samle_flag);
  76.       ADC_LED();
  77.       PM0 &= 0x7FU;
  78.       PMC0 &= 0x7FU;  /* use P07 as analog input */
  79.    }
  80. }
复制代码
演示视频见下:


上面说到的分时复用可以解决同一IO充当不同较色的问题。但本文中这样做有没有问题?
有问题。本文只是想给大家一种IO复用的方法。其实许多新手会在这里上一次当。看见下图红线部分了没有,红线圈的部分等效数码管的电路。这么一画,是不是采样的结果貌视就不准确了。有什么办法能解决吗?最常用的就是在绿箭头的地方加一个跟随器来增加输入阻抗。从而让LED回路对ADC采样不能造成影响。

最新回复

这一类的函数楼主在哪里找到的?   详情 回复 发表于 2015-11-20 10:05
点赞 关注

回复
举报

1891

帖子

2

TA的资源

纯净的硅(中级)

沙发
 
 
个人签名
分享铸就美好未来。。。




 

回复

940

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
这个比较厉害,在条件限制的情况下完成了这个AD值显示
 
 
 

回复

23

帖子

1

TA的资源

一粒金砂(初级)

4
 
这一类的函数楼主在哪里找到的?

点评

瑞萨官网例程  详情 回复 发表于 2015-11-20 12:48
 
 
 

回复

2856

帖子

260

TA的资源

五彩晶圆(高级)

5
 
liyang007700 发表于 2015-11-20 10:05
这一类的函数楼主在哪里找到的?

瑞萨官网例程
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表