3370|4

256

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

请教STEVAL-IDB007V1用BLE_SensorDemo修改的读ADC没成功的问题 [复制链接]

  本帖最后由 viphotman 于 2018-1-26 19:13 编辑


刚有在keil 下用BLE_SensorDemo 加入读ADC的功能,但是读出的值为0;
app用iOS :lightblue  android:nRF Connect
程序是在BLE_SensorDemo基础上,参看工程  Project\BlueNRG1_Periph_Examples\ADC\Polling   里的ADC的使用;
1 在文件BlueNRG1_conf.h 里加入
   #include "BlueNRG1_adc.h"    // RK ADD
2  定义函数与数据
  1. ADC_InitType xADC_InitType;

  2. void ADC_Configuration(void)
  3. {
  4.   SysCtrl_PeripheralClockCmd(CLOCK_PERIPH_ADC, ENABLE);
  5.   
  6.   /* Configure ADC */
  7.   /* ADC_Input_AdcPin1 == ADC1 */
  8.   /* ADC_Input_AdcPin2 == ADC2 */
  9.   /* ADC_Input_AdcPin12 == ADC1 - ADC2 */
  10.   xADC_InitType.ADC_OSR = ADC_OSR_200;
  11.   //ADC_Input_BattSensor; //ADC_Input_TempSensor;// ADC_Input_AdcPin1 // ADC_Input_AdcPin12 // ADC_Input_AdcPin2
  12.   xADC_InitType.ADC_Input = ADC_Input_AdcPin12; //ADC_Input_AdcPin12;
  13.   xADC_InitType.ADC_ConversionMode = ADC_ConversionMode_Single;
  14.   xADC_InitType.ADC_ReferenceVoltage = ADC_ReferenceVoltage_0V6;
  15.   xADC_InitType.ADC_Attenuation = ADC_Attenuation_9dB54;
  16.   
  17.   ADC_Init(&xADC_InitType);
  18.   
  19.   /* Enable auto offset correction */
  20.   ADC_Calibration(ENABLE);
  21.   ADC_AutoOffsetUpdate(ENABLE);
  22. }
复制代码


3  在main()函数中调用ADC相关的设置函数
  1.   /* ADC Initialization */
  2.   ADC_Configuration();

  3.   /* Start new conversion */
  4.   ADC_Cmd(ENABLE);
复制代码


4 在 main()中的while(1)里读取ADC值;
if( ADC_GetFlagStatus(ADC_FLAG_EOC)) {
      
      /* Read converted data */
      adc_value = ADC_GetConvertedData(xADC_InitType.ADC_Input, xADC_InitType.ADC_ReferenceVoltage);
            //SdkDelayMs(100);
            adc_value = adc_value/1000;
            Clock_Wait(100);
            //adc_value = 0x2345;  //用这个直接可传到App上;
            ADC_Cmd(ENABLE);
        }
5 将adc_value的值传到App里,这里,我将3D sensor 的传数据的函数修改为传adc_value的值,再用App去读值;
  
  1. extern         float adc_value;
  2. tBleStatus Acc_Update(AxesRaw_t *data)
  3. {  
  4.   uint8_t buff[6];

  5.         
  6.   tBleStatus ret;

  7.   HOST_TO_LE_16(buff,-data->AXIS_Y);
  8.   HOST_TO_LE_16(buff+2,data->AXIS_X);
  9.   HOST_TO_LE_16(buff+4,-data->AXIS_Z);
  10.         
  11.         //adc_value
  12.         buff[0]= 0xfe;
  13.         buff[1]= 0xff;
  14.         buff[2]= 0xff;
  15.         buff[3]= 0xfe;
  16.         buff[4]= adc_value/256;
  17.         buff[5]= adc_value;
  18.   ret = aci_gatt_update_char_value(accServHandle, accCharHandle, 0, 6, buff);
  19.   if (ret != BLE_STATUS_SUCCESS){
  20.     PRINTF("Error while updating Acceleration characteristic: 0x%02X\n",ret) ;
  21.     return BLE_STATUS_ERROR ;
  22.   }

  23.   return BLE_STATUS_SUCCESS;
  24.    
  25. }
复制代码

6  结果显示,ADC的值一直为0,现在还没有找出问题所在,来网上请教下;


最新回复

代码是卡哪里了还是ADC_GetFlagStatus(ADC_FLAG_EOC)一直返回0?  详情 回复 发表于 2018-1-27 18:30
点赞 关注
 
 

回复
举报

9716

帖子

24

TA的资源

版主

沙发
 
1、确定AdcPin12有电压输入
2、可以先下一个ADC\Polling试试看能否读到
3、然后在你修改的BLE_SensorDemo代码里用调试模式下看adc_value 的值看是否正确
4、如果ADC\Polling正常BLE_SensorDemo不正常再对比一下2个例程在ADC配置和读取方面的区别

点评

刚有加入UART DEBUG log, 发现如果只在读ADC打印下ADC值,只能看到打印一次;代码如下, [mw_shl_code=c,true]if( ADC_GetFlagStatus(ADC_FLAG_EOC)) { /* Read converted data */ adc_value =  详情 回复 发表于 2018-1-27 17:29
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

256

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
littleshrimp 发表于 2018-1-26 19:41
1、确定AdcPin12有电压输入
2、可以先下一个ADC\Polling试试看能否读到
3、然后在你修改的BLE_SensorDemo ...

刚有加入UART DEBUG log,
发现如果只在读ADC打印下ADC值,只能看到打印一次;代码如下,
  1. if( ADC_GetFlagStatus(ADC_FLAG_EOC))
  2.                 {
  3.       /* Read converted data */
  4.       adc_value = ADC_GetConvertedData(xADC_InitType.ADC_Input, xADC_InitType.ADC_ReferenceVoltage);
  5.                         PRINTF("ADC value: %.0f mV\r\n", adc_value*1000.0); //uart log
  6.                         adc_value = adc_value*1000.0;
  7.                         Clock_Wait(100);
  8.                         ADC_Cmd(ENABLE);
  9.                         timeRun++;
  10.                 }
复制代码


但是如果再在主循环里加入一条打印信息,则可以一直跑,
  1. /* Application Tick */
  2.     APP_Tick();
  3.     PRINTF("BlueNRG-1 BLE Sensor Demo APP_Tick() TIME=%d \n",timeRun);
复制代码

目前,将就着用这个测试了下,APP可以读到数据,
也用电容测试了下,断开STEVAL-IDB007V1开发板的JP1和JP2路线,将超级电容(此电容由论坛统一提供)负极接在上JP1的3脚,正极通过JP1的1脚充电至3.3V,再将正极切换到JP2的2脚;
初步测试了下,耗电很快,可能没有关LED,还有其它IO没配置;后面再优化吧

点评

代码是卡哪里了还是ADC_GetFlagStatus(ADC_FLAG_EOC)一直返回0?  详情 回复 发表于 2018-1-27 18:30
 
 
 

回复

9716

帖子

24

TA的资源

版主

4
 
viphotman 发表于 2018-1-27 17:29
刚有加入UART DEBUG log,
发现如果只在读ADC打印下ADC值,只能看到打印一次;代码如下,
[mw_shl_code ...

代码是卡哪里了还是ADC_GetFlagStatus(ADC_FLAG_EOC)一直返回0?

点评

当时的测试时复位后只打印一次ADC的值,像是ADC_GetFlagStatus(ADC_FLAG_EOC)一直返回0,但是现在我修改了一些代码,没有问题了,具体原因还在查找到;  详情 回复 发表于 2018-1-29 10:32
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

256

帖子

0

TA的资源

一粒金砂(高级)

5
 
littleshrimp 发表于 2018-1-27 18:30
代码是卡哪里了还是ADC_GetFlagStatus(ADC_FLAG_EOC)一直返回0?

当时的测试时复位后只打印一次ADC的值,像是ADC_GetFlagStatus(ADC_FLAG_EOC)一直返回0,但是现在我修改了一些代码,没有问题了,具体原因还在查找到;
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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