我已经为多通道单次转换编写了代码。 我正在使用3个通道,但所有通道相同的值都将出现。
我想测试3通道连续中断方法。 如何实现。 请指导我
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.
我已经为多通道单次转换编写了代码。 我正在使用3个通道,但所有通道相同的值都将出现。
我想测试3通道连续中断方法。 如何实现。 请指导我
您好,Mutharagan,
我建议您从此处提供的示例开始:
https://dev.ti.com/tirex/explore/node?node=AOHibD2F6gfbdA6GAGpeEw__IOGqZri__LATEST
并进行增量修改以满足您的要求。
BR、
Leo
如果您使用的是 CONSEQ=1、MSC=1和 MODOSC (ssel=0)、则在第三个结果到达之前无法成功获取前两个结果。
FR2系列没有 DMA 或 DTC (如相关线程所示)、并且只有一个 ADCMEM 寄存器。
如果您使用 MSC=0和定时器触发器(SHS=2)、则可以使用定时器周期将触发器留出空间、以便代码有足够的时间获取每个结果。 您也可以使用 ACLK (ssel=1)和/或较大的 SHTs 值来获得这种效果、但这具有使采样/保持周期非常长的副作用。
尊敬的先生:
感谢您的及时帮助。 非常感谢您的帮助。 我知道 MSP430FR2422控制器只有一个 ADCMEM0寄存器。
我在下面提到的问题中有一些疑问。
控制 器需要对通道进行监测1以实现连续中断10微秒、并通过轮询方法并行测量2Nos 通道。 这是我们的要求。 请帮帮我。
2.我用轮询方法为2通道编写了代码。 但是、如果任何一个通道发生任何变化。 另一个通道值也会受到影响、有时我无法更改该值。
这些是 我的2 Nos 通道轮询方法的硬代码。 请告诉我一些想法。 一个通道输入是稳定的。 另一个通道值在变化。
void ADC_Configuration (void)
{
//配置 ADC10
#if 0
ADCCTL0 |= ADCSHT_2 | ADCON; // ADCON、S&H=16 ADC CLKS
ADCCTL1 |= ADCSHP; // ADCCLK = MODOSC;采样计时器
ADCCTL2 |= ADCRES; // 10位转换结果
ADCMCTL0 |= ADCINCH_0; // A0 ADC 输入选择;Vref=AVCC
ADCIE |= ADCIE0; //启用 ADC 转换完成中断
#endif
#if 1.
ADCCTL0 |= ADCSHT_2 | ADCON;
ADCCTL1 |= ADCSHP; // ADCCLK = MODOSC;采样计时器
ADCCTL2 |= ADCRES;
#endif
}
void ADC_ChannelConfiguration (void)
{
//配置 ADC A0,A1pin
SYSCFG2 |= ADCPCTL0 |ADCPCTL1;
}
void ADCstartEvent (void)(空)
{
ADCCTL0 |= ADCENC | ADCSC; //采样和转换启动
}
void ADC_TVSdiodeTemperature (void)
{ SYSCFG2 |= ADCPCTL0;
ADCCTL1 |= ADCCONSEQ_0;
ADCMCTL0 |= ADCINCH_0; //P1.0通道 A0
ADCstartEvent();
while (ADCCTL1和 ADCBUSY);
TVSTempCount += ADCMEM0;
COUNT1 ++;
SYSCFG2 &=~ ADCPCTL0;
ADCCTL0 &=~ADCENC;
if (国家1 > 100)
{
TVSTempCount =TVSTempCount/100;
TVSTempVolatge = TVSTempCount * 3.3/1024;
TVSTempCount=0;
COUNT1 =0;
}
}
void ADC_TVSdiodeLeakageCurrent (void)(空)
{ SYSCFG2 |=ADCPCTL1;
ADCCTL1 |= ADCCONSEQ_0;
ADCMCTL0 |= ADCINCH_1;
ADCstartEvent();
while (ADCCTL1和 ADCBUSY);
LekageCount+=ADCMEM0;
计数2++;
SYSCFG2 &=~ADCPCTL1;
ADCCTL0 &=~ADCENC;
if (国家2 > 100)
{
LekageCount = LekageCount/100;
TVSLkgVoltage = LekageCount * 3.3/1024;
LekageCount=0;
COUNT2 = 0;
}
}
>ADCMCTL0 |= ADCINCH_0;
这不会设置 ADCINCH=0、因为 ADCINCH_0=0。 我怀疑这是您看到的失败。 由于您不使用 ADCSRF、因此最简单的修复方法是:
>ADCMCTL0 = ADCINCH_0;
------
>ADCCTL2 |= ADCRES;
这将设置保留(非法)的 ADCRES=3。 我怀疑您想要:
>ADCCTL2 |= ADCRES_1; // ADCRES=1 (10位)