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.

[FAQ] [参考译文] [常见问题解答] CCS/MSP430F6736:SD24B 结果

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/716648/faq-ccs-msp430f6736-sd24b-results

器件型号:MSP430F6736

工具/软件:Code Composer Studio

大家好、

我将使用资源浏览器中 SD24转换器的以下示例代码:

#include
#include

/*用于存储 SD24_B 转换结果的数组*/
unsigned int results[3];

int main (空)

   WDTCTL = WDTPW | WDTHOLD;              //停止 WDT

   SD24BCTL0 |= SD24SSEL_1;     //选择内部 REF
   SD24BCTL0 |= SD24REFS;                                       //选择 SMCLK 作为 SD24_B 时钟源

   SD24BCCTL0 = SD24SNGL | SD24SCS_5;     //单次转换、组1
   SD24BCCTL1 = SD24SNGL | SD24SCS_5;     //单次转换、组1
   SD24BCCTL2 = SD24SNGL | SD24SCS_5;     //单次转换、组1

   SD24BIE |= SD24IE2;                    //启用通道2中断

   _DELAY_CYCLES (0x3600);                // 1.5V REF 启动延迟

   while (1)
   {
       SD24BCTL1 |= SD24GRP1SC;           //将位设置为开始转换
       _bis_SR_register (LPM0_bits | GIE);//输入 LPM0、带中断
       SD24BCTL1 &=~SD24GRP1SC;          //为下一次转换清除位
       __no_operation();                  //在此设置断点
       printf ("Result1:%d \n"、results[0]);
       printf ("Result2:%d \n"、results[1]);
       printf ("Result3:%d \n"、results[2]);
   }

#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=SD24B_vector
_interrupt void SD24BISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (SD24B_vector)) SD24BISR (void)
其他
错误编译器不受支持!
#endif

   开关(SD24BIV)
   {
       案例 SD24BIV_SD24OVIFG:            // SD24MEM 溢出
           中断;
       案例 SD24BIV_SD24TRGIFG:           // SD24触发 IFG
           中断;
       案例 SD24BIV_SD24IFG0:             // SD24MEM0 IFG
           中断;
       案例 SD24BIV_SD24IFG1:             // SD24MEM1 IFG
           中断;
       案例 SD24BIV_SD24IFG2:             // SD24MEM2 IFG
           结果[0]= SD24BMEMH0;       //保存 CH0结果(清除 IFG)
           结果[1]= SD24BMEMH1;       //保存 CH1结果(清除 IFG)
           结果[2]= SD24BMEMH2;       //保存 CH2结果(清除 IFG)
           中断;
   }

   _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);  //退出 LPM0

我将获得8位分辨率的输出结果。  

我有几个问题:

1) 1)如何将基准电压更改为外部基准(=3V)? 如果我使用外部基准、我是否必须将电容器额外连接到 MCU?

2) 2)如何将分辨率从8位更改为10位?

3) 3)是否有方法将内部基准电压从1.15V (从数据表)更改为3V?

4) 4)我有单端输入进入 SD24端口的正输入端。 因此、我将所有3个输入的负输入连接到接地端。 这是否起作用?

谢谢、

评估

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

    我想在上述问题上再补充一点。
    当我提供0V 作为输入时、我在屏幕上得到128作为数字输出。
    我是否使用了正确的代码? 代码是否有问题?


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

    您好 Keval、

    您是否有机会通读 《MSP430x5xx 和 MSP430x6xx 系列用户指南》 ? 它将帮助回答您的大部分问题(如果不是全部问题)。 我强烈建议首先阅读与 Σ-Δ ADC 相关的部分。 还有一些有关 REF 模块的部分。 要了解 MSP430F6736的功能模块、您可以在数据表的功能方框图中找到它们。

    [报价用户="Keval Desai">]当我提供0V 输入时、屏幕上的数字输出为128。
    我是否使用了正确的代码? 代码是否有问题?[/quot]

    用户指南中的第29.2.7.3节"数字滤波器输出"讨论了左对齐或右对齐以及影响输出格式的各种模式。 请花一些时间熟悉 表29-3。 数据格式示例。 从代码示例中查看您的代码、我看到 SD24具有默认偏移二进制模式(SD24DFx = 0)和右对齐(SD24ALGN = 0)配置。 现在、查看下面的表29-3、您可以看到为什么(正确)针对0V 输入测量128。 但是、十进制的128等于十六进制的0x80。 这就告诉我、不用看上面的代码、您只是在读取 SD24BMEMHx、而不是 SD24BMEMHx 和 SD24BMEMLx。 因此、代码没有问题。

    为了便于将来参考,当使用语法 Highlighter 工具(类似于“ ")找到"插入代码、附加文件等..." 单击"回复"按钮后显示的链接。

    此致、

    James

    MSP 客户应用

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

    尊敬的 James:

    我已经介绍了用户指南。 我也通过改变 SD24DFx 位和基准电压来解决了与0V=128数字值相关的问题。

    但我无法获取输出的10位分辨率。 如何实现这一点?

    谢谢、

    评估

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

    [引用 user="James Evans 的话]不用看上面的代码、您只读 SD24BMEMHx、而 不是 SD24BMEMHx 和 SD24BMEMLx。[/引用]

    您是否看到此评论? 此外、您为什么指的是"10位"输出? 这是一个24位 Σ-Δ ADC、而不是10位 SAR ADC。

    此致、

    James

    MSP 客户应用

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

    现在、我只能将结果存储在 SD24MEMHx 或 SD24MEMLx 中、一次一个。
    因此、当我从该特定的 SD24MEM 寄存器中读取数据时、我将获得等效于8位分辨率的输出。
    如何将通道结果存储到 Hx 和 LX 寄存器中并从这两个寄存器中读取数据?

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

    您好 Keval、

    您将需要存储 SD24MEMHx 的结果(而不是)、将结果向左移动16、然后将该值与 SD24MEMLx 串联、类似于 MSP430F673X_SD24B_06.c 代码示例中 SD24BISR 中的操作。

    /*-版权所有-、BSD_EX
    *版权所有(c) 2012、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    ***
    *
    * MSP430代码示例免责声明
    *
    * MSP430代码示例是自包含的低级程序
    ,通常*以
    高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
    值*寄存器值和时钟配置等设置、
    并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
    *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
    *了解外设配置的 API 函数库方法。
    *
    *--/版权--*
    //*********
    // MSP430F673x 演示- SD24_B、使用 ISR 在单个通道上进行单次转换
    // 24位结果
    //
    //说明:此程序使用 SD24_B 模块在
    单个通道上执行单次//转换。 当一个
    //转换完成时、一个 SD24_B 中断发生。 通过向通道2
    //(SD2P0、SD2N0)施加电压并在下面指示的行设置断点来进行测试。
    //运行程序直到它到达断点,然后使用调试器
    的//观察窗口来查看转换结果。
    通道2的结果(整个24位)//存储在变量"结果"中。
    // ACLK = n/a、MCLK = SMCLK = DCO =~ 1.1MHz
    //////////*对于 SD24_B 模块所需的最小 Vcc -请见数据表
    在使用1.5V REF 时、建议在 Vref 和 AVss 之间使用*///////
    
    /注意:示例旨在显示检索完整24位结果的方法
    // 而不是如何从 SD24_B 模块获得24位精度。
    //
    // MSP430F673x
    // --------
    // /|\| XIN|-
    // || |
    // -|RST XOUT|-
    // | |//Vin+
    ->|SD2P0 |//Vin-
    ->|SD2N0 |
    // | |
    // | VREF |-+
    // | ||
    // | |-+- 100nF
    // | |-+-
    // | ||
    // | AVss |--+
    // | |
    //
    M. Swanson
    // Texas Instruments、Inc
    // 2011年12月
    //使用 CCS 编译版本:5.1.0和 IAR Embedded Workbench 版本:5.40.1//
    *************
    #include 
    
    /*用于存储 SD24_B 转换结果的无符号整数*/
    无符号长整型结果;
    
    int main (void)
    {
    WDTCTL = WDTPW | WDTHOLD; //停止 WDT
    
    SD24BCTL0 = SD24REFS | SD24SSEL_1; //选择内部 REF
    //选择 SMCLK 作为 SD24_B 时钟源
    
    SD24BCCTL2 |= SD24SNGL; //单次转换
    
    SD24BINCTL2 |= SD24INTDLY0; //第3个采样时的中断
    SD24BIE |= SD24IE2; //启用通道2中断
    
    _DELAY_CYCLES (0x3600); 1.5V REF 启动的//延迟
    
    while (1)
    {
    SD24BCCTL2 |= SD24SC; //将位设置为开始转换
    _bis_SR_register (LPM0_bits | GIE); //输入带中断的 LPM0
    __no_operation();
    __no_operation(); //在此设置断点
    }
    }
    
    #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_)
    #pragma vector=SD24B_vector
    __interrupt void SD24BISR (void)
    #Elif defined (__GNU__)
    void __attribute__((interrupt (SD24B_vector))) SD24BISR (void
    
    编译器#error!)不支持!
    #endif
    {
    开关(SD24BIV)
    {
    案例 SD24BIV_SD24OVIFG: // SD24MEM 溢出
    中断;
    案例 SD24BIV_SD24TRGIFG: // SD24触发 IFG
    中断;
    案例 SD24BIV_SD24IFG0: // SD24MEM0 IFG
    中断;
    SD24BIV_SD24IFG1案例: // SD24MEM1 IFG
    中断;
    SD24BIV_SD24IFG2案例: // SD24MEM2 IFG
    结果= SD24BMEMH2; //保存 CH2结果(清除 IFG)
    结果=(结果<< 16)| SD24BMEML2;//连接较低和较高的字
    中断;
    }
    
    _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS); //退出 LPM0
    } 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢 James。
    感谢您的支持。