在线情况
楼主
  • 头像
  • 级别
    • 积分5
    • 经验1715
    • 文章25
    • 注册2009-08-02
    MSP5438 ADC12 采样频率控制
    通过ADC12 SHSx 采样触发信号控制 采样频率

    1、在使用定时器 控制采样频率的时候,‘01’、‘10’、‘11’是否与TA0、TA1、TB
     一一对应;
    2、执行下列代码:
    [CODE]
    //******************************************************************************
    # include <msp430x54x.h>
    # define   Num_of_Results   8

    # include "lcd12864.h"

    # define _SAMPING_FREQ  (50*64)
    # define _ACLK 32768
    # define ROOT2 (1.1515926)
    volatile unsigned int results[Num_of_Results];
    void init(void)
    {  InitLCD();    
       // P1SEL |= 0x40;                   //Timer_A.OUT1,从P1.6引脚输出(可选)
       // P1DIR = 0x02+0x40;               //P1.1&P1.6输出
       //ADC12初始化----------------------
       //单通道,单次采样模式
       P6SEL |= BIT0;                                //使能A/D通道 A0
       ADC12CTL0 |= ~ADC12ENC;
       ADC12CTL0 |= ADC12ON + ADC12SHT01+ADC12MSC;   //开ADC12内核和设置SHIT0=2(N=4)/采样定时器触发
       ADC12CTL1 |= ADC12SHP+ADC12CONSEQ_3+ADC12MSC; //SAMPCON信号选择为采样定时器输出,采样模式(单通道多次采样)/
       ADC12CTL1 &= ~(ADC12DIV0+ADC12DIV1+ADC12DIV2);
       ADC12CTL2 |= ADC12PDIF0;
       ADC12CTL1 |= ADC12CSTARTADD_0+ADC12SHS_3+ADC12SSEL_1;     //定义转换地址首地址;定时器TA0 输出1控制采样转换;内核时钟选择MCLK
       ADC12MCTL0 |= ADC12INCH_0+ ADC12SREF_0;   //使用外Vr+ = AVcc Vr-=AVss 通道0
       ADC12CTL0 |= ADC12ENC;               //ADC转换允许
      //Timer_A初始化--------------------  
       //TA1CTL = TASSEL_2+MC_1+TACLR ;           //timerA CLK=ACLK,增计数模式
       //TA1CCTL1 |= OUTMOD_7;              //timer_A.out1输出为PWM翻位/复位模式
       //TA1CCR0 = 200;                    //选择ACLK约30us,CCR0在增计数模式,周期约50ms
       //TA1CCR1 = 10;  
         TBCCR0 = 312;                            
         TBCCR1 = 13;                                
         TBCTL |= TBSSEL_2 + MC_1  + TBCLR ;          //选择增模式,清TAR ,
         //TBCTL &= ~TAIFG;                           //清TAIFG
        // TB0CTL |= TAIE;                             //使能TAIE
         TBCCTL1 |= OUTMOD_7;                         //PWM模式选择
         //Timer_A0初始化--------------------  
         TA0CTL = TASSEL_2+MC_1+TACLR ;           //timerA CLK=ACLK,增计数模式
         TA0CCTL1 |= OUTMOD_7;              //timer_A.out1输出为PWM翻位/复位模式
         TA0CCR0 = 312;                    //选择ACLK约30us,CCR0在增计数模式,周期约50ms
         TA0CCR1 = 13;    
     }

    //------------------------------------------------------------------------------

    void main(void)
    {    WDTCTL=WDTPW+WDTHOLD;     //停止WDT
         init();
         ShowString86(0,1, title0);
         ShowString86(2,0, title1);
         ShowString86(4,3, title2);
         ShowString86(6,2, title3);
         ReverseLinChar(0,0,21);    
          while(1)
          {
           ADC12CTL0 |= ADC12SC+ADC12ENC;      //ADC转换允许,开始转换
           while((ADC12IFG & BIT0)==0);
           ADC12CTL0 &=~ADC12ENC;
            _NOP();  
           LED();  
           value=ADC12MEM0;                // 读取结果
           conv(value,ADVAL);              //数据转换调用
           ShowString86(6,11,ADVAL);       
         
          }
    }
    [/CODE]
    在ADC12SHSH 控制位下,ADC12SHSH_0(软件软件触发转换),程序运行后,有显示结果;ADC12SHSH_3(定时器触发转换),程序中设置TIMERB,程序运行后,有结果显示;ADC12SHSH_2/ADC12SHSH_1(定时器触发转换),程序分别尝试设置TA0和1TA,运行程序后,执行到while((ADC12IFG & BIT0)==0);停止,无显示结果;
    为什么?
    [ 此贴最后由DC在2010-10-18 22:36:27编辑过 ]
    微控网感谢您的参与
    在线情况
    2
    • 头像
    • 级别
    • 门派
    • 职务总版主
    • 声望+9
    • 财富5
    • 积分3065
    • 经验390701
    • 文章6744
    • 注册2006-03-07
    小波同志你好:
    据我的了解‘01’、‘10’、‘11’是对应着如下:
    01  Timer0_A5 输出,输出信号为TA0.0,使用的Timer_A5的CCR0来控制的。
    10  Timer0_B7 输出,输出信号为TB0,使用的Timer_B7的CCR0来控制的。
    11  Timer0_B7 输出,输出信号为TB1,使用的Timer_B7的CCR1来控制的。
    所以,你想要更换触发源时必须要了解到这ADC内部的信号连接;这点则需要非常了解MSP430常用模块的使用了。
    因为MSP430F5438的定时器也是非常之强的,若不了则难以驾驭....。
    我可能说跨张了点,其实了解后也没啥就这三板功夫。呵呵,话说回来;你无需将这么多代码贴出来。你着重还是检查一下我所说的定时器部分吧。
    Good luck!
    [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
    在线情况
    3
    • 头像
    • 级别
      • 积分5
      • 经验1715
      • 文章25
      • 注册2009-08-02
      THANKS DC

      我以后注意!!
      微控网感谢您的参与
      在线情况
      4
      • 头像
      • 级别
        • 积分5
        • 经验1715
        • 文章25
        • 注册2009-08-02
        MSP5438 ADC12 采样频率控制  

        已解决,代码如下:
        ADC12_A 采样频率控 ADC12SHSx 位控制 调试成功; 谢谢!!!

        //说明:单片机初始化
        void init(void)
        { ......
           //ADC12初始化----------------------
           //单通道,多次次采样模式
           ......
           ADC12CTL1 |= ADC12CSTARTADD_0+ADC12SHS_1+ADC12SSEL_2; //定义转换地址首地址;定时器TA0 输出1控制采样转换;内核时钟选择MCLK
           ......
           ADC12CTL0 |= ADC12ENC;               //ADC转换允许
           
           //************************************************************************
           //Timer0_A5 输出,输出信号为TA0,使用的Timer_A5的CCR0来控制的  01(ADC12SHS_1)
               TA0CTL = TASSEL_2+MC_1+TACLR ;       //timer_A5 CLK=MCLK,增计数模式 ,清TAR
               TA0CCTL0 |= OUTMOD_4;               //timer_A5 CCRO PWM模式选择(翻转模式)
               TA0CCR0 = 312;                      //频率为1.67KHZ
           //************************************************************************
           //Timer0_B7 输出,输出信号为TB0,使用的Timer_B7的CCR0来控制的  10(ADC12SHS_2)  
           //  TBCTL |= TBSSEL_2 + MC_1 + TBCLR ;   //timerB CLK=MCLK,增计数模式 ,清TAR
           //  TBCCTL0 |= OUTMOD_4;               //timer_B7 CCRO PWM模式选择(翻转模式)
           //  TBCCR0 = 312;;                     //频率为1.67KHZ
            //************************************************************************
            //Timer0_B7 输出,输出信号为TB1,使用的Timer_B7的CCR1来控制的  11(ADC12SHS_3)
            // TBCCR0 = 312;                                                     
            // TBCCR1 = 166;                                 //频率为2.33KHZ
            // TBCTL |= TBSSEL_2 + MC_1  + TBCLR ;          //timerB CLK=MCLK,增计数模式,清TAR
            // TBCCTL1 |= OUTMOD_7;                         //timer_B7 CCR1 PWM模式选择(复位置/位模式)
         }

        以上为系统默认时钟: ACLK=32.768KHZ  SMCLK=MCLK=1MHZ
        微控网感谢您的参与
        在线情况
        5
        • 头像
        • 级别
          • 积分8
          • 经验1014
          • 文章18
          • 注册2010-10-10
          ADC12CTL0 |= ADC12ON + ADC12SHT01+ADC12MSC;   //开ADC12内核和设置SHIT0=2(N=4)/采样定时器触发
          ADC12CTL1 |= ADC12SHP+ADC12CONSEQ_3+ADC12MSC; //SAMPCON信号选择为采样定时器输出,采样模式(单通道多次采样)/

          小弟初学很都不懂~~
          你这里ADC12MSC置1了~~SHP也置1了~~选择的还是单通道多次模式~~那么根据根据使用说明里的图来看~~每次采样转换之后~~程序是不会回到‘等待触发’(wait for trigger)这里~~是会直接又回到采样~~那么定时器除了第一次触发之后~~是不是就没作用了呢?
          微控网感谢您的参与
          Powered by LeadBBS 9.2 .
          Page created in 0.1719 seconds with 5 queries.