MSP5438 ADC12 采样频率控制

楼主
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);停止,无显示结果;
为什么?
1楼
小波同志你好:
据我的了解‘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!
2楼
THANKS DC

我以后注意!!
3楼
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
4楼
ADC12CTL0 |= ADC12ON + ADC12SHT01+ADC12MSC;   //开ADC12内核和设置SHIT0=2(N=4)/采样定时器触发
ADC12CTL1 |= ADC12SHP+ADC12CONSEQ_3+ADC12MSC; //SAMPCON信号选择为采样定时器输出,采样模式(单通道多次采样)/

小弟初学很都不懂~~
你这里ADC12MSC置1了~~SHP也置1了~~选择的还是单通道多次模式~~那么根据根据使用说明里的图来看~~每次采样转换之后~~程序是不会回到‘等待触发’(wait for trigger)这里~~是会直接又回到采样~~那么定时器除了第一次触发之后~~是不是就没作用了呢?

电脑版 Page created in 0.0781 seconds width 2 queries.