Thread 中讨论的其他器件:CC2650、 SYSBIOS
工具/软件: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);
}