This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/CC2650EM-7ID-RD:使用 ADC 时出现故障

Guru**** 2573695 points
Other Parts Discussed in Thread: CC2650

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/589513/rtos-cc2650em-7id-rd-troubles-using-adc

器件型号:CC2650EM-7ID-RD
Thread 中讨论的其他器件:CC2650SYSBIOS

工具/软件:TI-RTOS

大家好、  

我仍然是微控制器和编程的初学者,因此我需要您的帮助:  

我的最终目标是使用 CC2650实现电容式传感器。 因此、我需要使用 CC2650执行 DCVD (差分电容分压器)测量。  
此测量的原理是对电容器进行充电、共享电荷、测量电压和放电。 通过执行这两次(第二次是另一次)、我们执行 DCVD 方法。  

然后、我认为我的程序可以正常工作(在这个示波器上、一切都如预期的那样)、但是当我显示一个图表代表我的变量"Mesure DCVD"时、我已经看到我的两个 ADC 没有测量任何值。  

请问我的程序有什么问题? 这是:  

/******* DCVD.c /

#include


/* XDCtools 头文件*/
#include
#include

/* BIOS 头文件*/
#include
#include
#include

/* TI-RTOS 头文件*/
#include
#include
#include

#IF 定义(CC2650DK_7ID)||定义(CC1310DK_7xD)
#include
#endif

/*示例/板头文件*/
#include "Board.h"

#define TASKSTACKSIZE1 (768)

Task_Structtask1Struct;
char task1stack[TASKSTACKSIZEE1];
//Clock_tickPeriod

/*任务和回调函数之间共享的驱动程序句柄*/
UART_Handle UART;
ADC_Handle ADC;


void uartCallback (UART_Handle handle、void *buf、size_t count);


//=========== Mesure DCVD ====
//此函数的任务是静态创建的。 请参阅工程的.cfg 文件。

void Fxn1 (UARg arg0、UARg arg1){

ADC_Handle ADC;
ADC_Params ADCParams;

PIN_Handle 引脚;
UART_Params UARTParams;

uint16_t MesureADCRaw1、MesureADC1;
uint16_t MesureADCRaw2、MesureADC2;

int Ref = 1000000;
int i;
Int MesureDCVD;
char bufadc [7];

/*创建一个数据处理关闭的 UART。 *
UART_PARAMS_INIT (UARTParams);
UARTParams.writeDataMode = UART_DATA_BINARY;
UARTParams.writeMode = UART_MODE_CALLBACK;
UARTParams.writeCallback = uartCallback;
UARTParams.baudrate = 115200;
UARTParams.readReturnMode = UART_return_NEWLINE;

#IF 定义(CC2650DK_7ID)||定义(CC1310DK_7xD)
PIN_STATE 引脚状态;

//引脚配置
PIN_Config PinTable[]=

Board_3V3_EN | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull、//打开3.3V 电源
BOARD_DIO26_ANALOG | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull、//引脚解锁至1 (CAPA)
BOARD_DIO28_ANALOG | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull、//引脚 Cext 至1.
PIN_TERMINATE //终止列表
};


/*打开电源*/
Pin = PIN_OPEN (&pinState、PinTable);
#endif


while (1){
PIN_setOutputValue (PIN、Board_DIO28_ANALOG、1);
PIN_setOutputValue (PIN、Board_DIO26_ANALOG、1);


//等待25µs
I=0;
while (i!=84){i++;}

//引脚配置:解锁至输入,将 Cext 解锁至0

PIN_setConfig (PIN、PIN_BM_INPUT_EN、Board_DIO26_ANALOG | PIN_INPUT_EN);
PIN_setConfig (PIN、PIN_BM_GPIO_OUTP_EN、Board_DIO26_ANALOG | PIN_GPIO_OUTP_DIS);

PIN_setOutputValue (PIN、Board_DIO28_ANALOG、0);

//等待14µs
I=0;
while (i!=38){i++;}


//设置 ADC 外设
ADC_Params_init (&ADCParams);

ADC = ADC_open (Board_ADC0、&ADCParams);
如果(!ADC){
system_abort ("ADC 未正确打开\n"\});

//开始转换1.
ADC_convert (ADC、&MesureADCRaw1);
MesureADC1 = ADC_convertRawToMicroVolts (ADC、MesureADCRaw1);


//引脚配置:解锁至0
PIN_setOutputValue (PIN、Board_DIO26_ANALOG、0);
PIN_setConfig (PIN、PIN_BM_INPUT_EN、Board_DIO26_ANALOG | PIN_INPUT_DIS);
PIN_setConfig (PIN、PIN_BM_GPIO_OUTP_EN、Board_DIO26_ANALOG | PIN_GPIO_OUTP_EN);

//等待25µs
I=0;
while (i!=84){i++;}

//引脚配置:解锁 à 输入和 Cext 到1.

PIN_setConfig (PIN、PIN_BM_GPIO_OUTP_EN、Board_DIO26_ANALOG | PIN_GPIO_OUTP_DIS);
PIN_setConfig (PIN、PIN_BM_INPUT_EN、Board_DIO26_ANALOG | PIN_INPUT_EN);

PIN_setOutputValue (PIN、Board_DIO28_ANALOG、1);

//等待14µs
I=0;
while (i!= 38){
i++;

//开始转换2.
ADC_convert (ADC、&MesureADCRaw2);
MesureADC2 = ADC_convertRawToMicroVolts (ADC、MesureADCRaw2);

ADC_Close (ADC);

//引脚配置:解锁并将 Cext 设置为0
PIN_setConfig (PIN、PIN_BM_INPUT_EN、Board_DIO26_ANALOG | PIN_INPUT_DIS);
PIN_setConfig (PIN、PIN_BM_GPIO_OUTP_EN、Board_DIO26_ANALOG | PIN_GPIO_OUTP_EN);
PIN_setOutputValue (PIN、Board_DIO26_ANALOG、0);

PIN_setOutputValue (PIN、Board_DIO28_ANALOG、0);

//等待14µs
I=0;
while (i!= 38){
i++;

//计算 DCVD
MesureDCVD = Ref + MesureADC2 - MesureADC1;

System_sprintf (bufADC、"%d"、MesureDCVD);


//通过 UART 发送数据
UART = UART_OPEN (Board_UART0、&UARTParams);
UART_WRITE (UART、bufADC、7);

I=0;
while (i!= 500){
i++;

UART_CLOSE (UART);


//回调函数以在回调模式下使用 UART。 它什么也不做。

void uartCallback (UART_Handle handle、void *buf、size_t count){
返回;


// main.c

int main (void){

Task_Params taskParams;

//板初始化函数
Board_initGeneral();
Board_initUART();
adc_init();

//构造 BIOS 对象
Task_Params_init (&taskParams);
taskParams.STACKSIZE = TASKSTACKSIZE1;
taskParams.stack =_task1Stack;
Task_construct(&task1Struct,(Task_FuncPtr) Fxn1、&taskParams、NULL);

System_printf ("启动 ADC 连续采样示例\n"
"系统提供商已设置为 SysMin。 停止目标以查看任何 SysMin "
" ROV 中的内容。\n");

// SysMin 仅在调用 flush 或 exit 时打印到控制台
system_flush();

//启动 BIOS
BIOS_start();

返回(0);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    如果您对电容感应感兴趣、我建议您从我们的 Sensor Controller Studio 示例电容式触控数据记录器开始。

    Sensor Controller Studio 可从以下网址下载: www.ti.com/.../SENSOR-CONTROLLER-STUDIO
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的答复、但我已经尝试过。 我使用了 Sensor Controller Studio 并尝试了许多示例(例如、您建议的示例)。 但是、我想使用 CCS。 您对我的代码不起作用的原因有什么看法吗?

    非常感谢、

    Julie

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您始终可以将代码从 Sensor Controller Studio 移植到 CCS。

    如果您坚持使用 ADC 驱动器、那么您的电流消耗将非常高。

    有关如何将传感器控制器代码移植到 CCS 的信息、请参阅传感器控制器的 SimpleLink Academy 培训。
    software-dl.ti.com/.../sc_01_project_from_scratch.html