大家好!
我正在处理该器件的 ADC 部分。 目前、我在确定如何设置10秒的数据收集时间方面遇到了困难? 如何设置计时器?
我在用户指南中看到、" ADC12CTL0中的 ADC12SHT0x 和 ADC12SHT1x 位控制采样定时器的间隔 "、SAMPCON 高电平/低电平决定了时间。
时间基于什么? 它是否与其他计时器(微秒)相同?
我是否必须循环运行并为"for loop"设置计时器?
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.
大家好!
我正在处理该器件的 ADC 部分。 目前、我在确定如何设置10秒的数据收集时间方面遇到了困难? 如何设置计时器?
我在用户指南中看到、" ADC12CTL0中的 ADC12SHT0x 和 ADC12SHT1x 位控制采样定时器的间隔 "、SAMPCON 高电平/低电平决定了时间。
时间基于什么? 它是否与其他计时器(微秒)相同?
我是否必须循环运行并为"for loop"设置计时器?
谢谢你。
我一直在尝试将100Hz 模拟信号数字化10秒、其峰间电压范围为1Vpeak。 我已经为它编写了一些代码。 但我无法获得 ADC12MEM0或电阻器盒中的任何值。 我无法确定如何获得1V 峰间电压范围。 希望得到您的帮助
//注:我 已在下一个注释中发布了该程序的更新版本
#include
#define STOP_WATCHDOG 0x5A80 //停止看门狗计时器
#define ACLK 0x0100 // Timer_A ACLK 源
#define Up 0x0010 // Timer_A 向上计数模式
#define ENABLE_Pins 0xFFFE //需要使用输入和输出
#define ADC12_P84 0x0007 //将输入 P8.4用于模拟输入
#define ADC12_P92 0x000A //将输入 P9.2用于模拟输入
void ADC_Setup (void);
MAIN ()
{
WDTCTL = STOP_DOU狗;//停止看门狗计时器
PM5CTL0 = ENABLE_Pins;//需要使用输入和输出
TA0CCR0 = 400;//设置 Timer_0的值
TA0CTL = ACLK + UP;//为 Timer_0设置 ACLK、UP 模式
TA0CCTL0 = CCIE;//为 Timer_0启用中断
TA1CCR0 = 40000;//设置 Timer_1的值
TA1CTL = ACLK + UP;//为 Timer_1设置 ACLK、UP 模式
TA1CCTL0 = CCIE;//为 Timer_1启用中断
ADC_Setup();
ADC12IER0 = ADC12IE0;//启用 ADC 中断
_BIS_SR (GIE);//激活中断
}
#pragma vector=TIMER0_A0_VECTOR
_interrupt void Timer_A (void)
{
ADC12CTL0 = ADC12CTL0 | ADC12ENC;//重新启用转换
ADC12CTL0 = ADC12CTL0 | ADC12SC;//开始下一次转换
}
//
//*配置模数转换器外设********
//
void ADC_Setup (void)
{
#define ADC12_SHT_16 0x0200 //采样保持的16个时钟周期
#define ADC12_ON 0x0010 //用于打开 ADC12外设
#define ADC12_SHT_SRC_SEL 0x0200 //选择采样保持源
#define ADC12_12位0x0020 //选择12位分辨率
#define ADC12_P84 0x0007
ADC12CTL0 = ADC12SHT02 | ADC12_ON;//开启,设置采样保持时间
ADC12CTL1 = ADC12_SHT_SRC_SEL;//指定采样保持时钟源
ADC12CTL2 = ADC12_12位;// 12位转换结果
ADC12MCTL0 = ADC12_P84;// P8.4是模拟输入
}
我一直在尝试将100Hz 模拟信号数字化10秒、其峰间电压范围为1Vpeak。 我已经为它编写了一些代码。 但我无法获得 ADC12MEM0或电阻器盒中的任何值。
#include
#define STOP_WATCHDOG 0x5A80 //停止看门狗计时器
#define ACLK 0x0100 // Timer_A ACLK 源
#define Up 0x0010 // Timer_A 向上计数模式
#define ENABLE_Pins 0xFFFE //需要使用输入和输出
#define ADC12_P84 0x0007 //将输入 P8.4用于模拟输入
#define ADC12_P92 0x000A //将输入 P9.2用于模拟输入
void ADC_Setup (void);
MAIN ()
{
WDTCTL = STOP_WATCHDOG;
PM5CTL0 = ENABLE_Pins;
TA0CCR0 = 400;//对于100Hz=10ms、400计数为10ms
TA0CTL = ACLK + UP;//为 Timer_0设置 ACLK、UP 模式
TA0CCTL0 = CCIE;//为 Timer_0启用中断
TA1CCR0 = 40000;//计数1秒
TA1CTL = ACLK + UP;//为 Timer_1设置 ACLK、UP 模式
TA1CCTL0 = CCIE;//为 Timer_1启用中断
ADC_Setup();
_BIS_SR (GIE);//激活中断
}
{
int ADC_value = ADC12MEM0和0x0FFF;//更改为12位二进制
save[i]=adc_value;//保存数据
i++;
}
ADC12CTL0 &=~(ADC12ENC);//*** (如果我重置它是否重要?) //禁用转换
}
//此函数计算10秒,因为中断计时器 A1需要1秒
//最后,如果它达到10秒,那么它将禁用所有中断
#pragma vector=TIMER0_A1_vector
_interrupt void Timer_B (void
//这是其它正常程序的基本程序
void ADC_Setup (void)
{
#define ADC12_SHT_16 0x0200 //采样保持的16个时钟周期
#define ADC12_ON 0x0010 //用于打开 ADC12外设
#define ADC12_SHT_SRC_SEL 0x0200 //选择采样保持源
#define ADC12_12位0x0020 //选择12位分辨率
#define ADC12_P84 0x0007
ADC12CTL0 =ADC12_SHT_16 | ADC12_ON;//打开,设置采样保持时间
ADC12CTL1 = ADC12_SHT_SRC_SEL;//指定采样保持时钟源
ADC12CTL2 = ADC12_12位;// 12位转换结果
ADC12MCTL0 = ADC12_P84;// P8.4是模拟输入
}
/*-版权所有-、BSD_EX *版权所有(c) 2014、德州仪器(TI)公司 *保留所有权利。 * * 只要 符合以下条件*、允许以源代码和二进制形式重新分发和使用: * *源代码的重新分发必须保留上述版权 声明*、此条件列表和以下免责声明。 * ***二进制形式的再发行必须在 *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。 * ***未经 事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。 * *本软件由版权所有者和贡献者"按原样"提供 *、 不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或 *贡献者都不对任何直接、间接、偶然、特殊、 *模范、 或相应的损害(包括但不限于 *采购替代产品或服务;丧失使用、数据或利润; *或业务中断)、但出于任何责任理论 、*无论是在合同中、严格责任还是由于 使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他) 、*即使已获悉可能会发生此类损坏。 * *** * * MSP430代码示例免责声明 * * MSP430代码示例是自包含的低级程序 ,通常*以 高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认 值*寄存器值和时钟配置等设置、 并且在组合多个示例中的代码时必须*小心以避免潜在的副作用 *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware *了解外设配置的 API 函数库方法。 * *--/版权--* //********* // MSP430FR69xx 演示- ADC12,样本 A1,AVcc 参考,如果 A1 > 0.5*AVcc,则设置 P1.0 // 说明:在 A1上以 AVcc 为基准生成单个样本。 //软件设置 ADC12SC 来启动采样和转换- ADC12SC //在 EOC 上自动清除。 ADC12内部振荡器乘以采样(16x) //和转换。 在主循环中、MSP430在 LPM0中等待节能、直到 ADC12 //转换完成、ADC12_ISR 将在主循环中强制从 LPM0中退出// 恢复。 如果 A1 > 0.5*AVcc,P1.0置位,否则复位。 还显示了对//和 ADC12中断的完全正确的处理。 // // //////// MSP430FR6989 // -------- // /|\| XIN|- // || | // -|RST XOUT|- // | | // --|P1.1/A1 P1.0|->LED // William Goh // Texas Instruments Inc. // 2014年4月 //使用 IAR 嵌入式工作平台 V5.60和 Code Composer Studio V6.0构建 //********* #include int main (void) { WDTCTL = WDTPW | WDTHOLD; //停止 WDT // GPIO 设置 P1OUT &=~BIT0; //清除 LED 以开始 P1DIR |= BIT0; //将 P1.0/LED 设置为输出 P1SEL1 |= BIT1; //为 ADC 配置 P1.1 P1SEL0 |= BIT1; //禁用 GPIO 上电默认高阻抗模式以激活 //先前配置的端口设置 PM5CTL0 &=~LOCKLPM5; //配置 ADC12 ADC12CTL0 = ADC12SHT0_2 | ADC12ON; //采样时间、S&H=16、ADC12打开 ADC12CTL1 = ADC12SHP; //使用采样计时器 ADC12CTL2 |= ADC12RES_2; // 12位转换结果 ADC12MCTL0 |= ADC12INCH_1; // A1 ADC 输入选择;Vref=AVCC ADC12IER0 |= ADC12IE0; //启用 ADC 转换完成中断 while (1) { _delay_cycles (5000); ADC12CTL0 |= ADC12ENC | ADC12SC;//开始采样/转换 _bis_SR_register (LPM0_bits | GIE);// LPM0、ADC12_ISR 将强制退出 __no_operation(); //对于调试器 } } #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__) #pragma vector = ADC12_vector __interrupt void ADC12_ISR (void) #elif defined (__GNU__) void __attribute__((interrupt (ADC12_vector)))) ADC12_ISR #else ! #endif { switch (__evo_in_range (ADC12IV、ADC12IV_ADC12RDYIFG)) { ADC12IV_NONE 案例: 中断;//向量0:无中断 案例 ADC12IV_ADC12OVIFG:中断;//向量2:ADC12MEMx 溢出 情况 ADC12IV_ADC12TOVIFG:中断;//矢量4:转换时间溢出 ADC12IV_ADC12HIIFG 案例:中断;//向量6:ADC12BHI 案例 ADC12IV_ADC12LOIFG:中断;//向量8:ADC12BLO ADC12IV_ADC12INIFG 案例:中断;//向量10:ADC12BIN ADC12IV_ADC12IFG0案例: //向量12:ADC12MEM0中断 IF (ADC12MEM0 >= 0x7ff) // ADC12MEM0 = A1 > 0.5AVcc? P1OUT |= BIT0; // P1.0 = 1 其他 P1OUT &=~BIT0; // P1.0 = 0 //从 LPM0退出并继续执行 main _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS); 中断; ADC12IV_ADC12IFG1案例:中断;//向量14:ADC12MEM1 案例 ADC12IV_ADC12IFG2:break;//向量16:ADC12MEM2 ADC12IV_ADC12IFG3案例:中断;//向量18:ADC12MEM3 案例 ADC12IV_ADC12IFG4:中断;//向量20:ADC12MEM4 ADC12IV_ADC12IFG5案例:中断;//向量22:ADC12MEM5 案例 ADC12IV_ADC12IFG6:中断;//向量24:ADC12MEM6 案例 ADC12IV_ADC12IFG7:中断;//向量26:ADC12MEM7 ADC12IV_ADC12IFG8案例:中断;//向量28:ADC12MEM8 案例 ADC12IV_ADC12IFG9:中断;//向量30:ADC12MEM9 案例 ADC12IV_ADC12IFG10:中断;//向量32:ADC12MEM10 案例 ADC12IV_ADC12IFG11:中断;//矢量34:ADC12MEM11 ADC12IV_ADC12IFG12案例:中断;//矢量36:ADC12MEM12 案例 ADC12IV_ADC12IFG13:中断;//向量38:ADC12MEM13 案例 ADC12IV_ADC12IFG14:中断;//向量40:ADC12MEM14 案例 ADC12IV_ADC12IFG15:中断;//向量42:ADC12MEM15 ADC12IV_ADC12IFG16案例:中断;//矢量44:ADC12MEM16 案例 ADC12IV_ADC12IFG17:中断;//向量46:ADC12MEM17 案例 ADC12IV_ADC12IFG18:中断;//向量48:ADC12MEM18 案例 ADC12IV_ADC12IFG19:中断;//向量50:ADC12MEM19 ADC12IV_ADC12IFG20案例:中断;//向量52:ADC12MEM20 案例 ADC12IV_ADC12IFG21:中断;//矢量54:ADC12MEM21 案例 ADC12IV_ADC12IFG22:中断;//向量56:ADC12MEM22 案例 ADC12IV_ADC12IFG23:中断;//矢量58:ADC12MEM3 案例 ADC12IV_ADC12IFG24:中断;//向量60:ADC12MEM24 案例 ADC12IV_ADC12IFG25:中断;//向量62:ADC12MEM25 案例 ADC12IV_ADC12IFG26:中断;//向量64:ADC12MEM26 案例 ADC12IV_ADC12IFG27:中断;//向量66:ADC12MEM27 案例 ADC12IV_ADC12IFG28:中断;//向量68:ADC12MEM28 ADC12IV_ADC12IFG29案例:中断;//向量70:ADC12MEM29 案例 ADC12IV_ADC12IFG30:中断;//向量72:ADC12MEM30 案例 ADC12IV_ADC12IFG31:中断;//向量74:ADC12MEM31 案例 ADC12IV_ADC12RDYIFG:break;//向量76:ADC12RDY 默认值:break; } }
请查看此示例代码的结构。
尝试运行此代码并使用指定的 Analog 引脚读取模拟电压。 请告诉我您获得了什么结果。