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.

430单片机ad问题



你好,最近学ad模块遇见的问题和疑问可能有点多,以下是问题描述,希望大神指导一下。

1 关于这个ad采样,如果采用shp=0的模式,那么他的这个采样保持时间就是这个shi信号高电平时间怎么去控制啊?

2 如果我采用定时采样的话,我怎么控制这个采样的间隔?我知道可以用ta定时在ta中断中打开sc位去触发采样,除了这种方法还有什么方法可以实现采样定时啊?还有就是这个采样触发信号shi一定是由shsx位控制的吗?如果这个shsx位控制了采样触发信号,手册上面又说shsx位控制采样保持源,那么我是不是可以理解为由shsx位选择shi信号,然后由shi信号决定采样频率?

3 如果我在使用单通道重复采样模式的时候,我写msc=1,然后我又采用定时采样并且设置了定时时间(假如我会设置的话),那么这时候他的采样间隔采用的会是转换一次马上又采还是按照我设置的定时采样来采?

4 我在看用户手册的时候发现,就是memx中的值必须读出来ad中断标志才会值位,假如我没有把memx中的值读出来的话那么他会怎么工作啊?我试过读出和没有读出这两种情况,发现频率变化很大,但是不知道为什么。

5 还有就是这个adc12sc位,用户手册上面说的是他是用于转换的,ad模块中那个框图又说他可以用于触发采样,就是说给一个sc触发一次采样,现在有个问题就是这个sc位他到底可以作用于什么过程,可以引起什么变化啊?如果我理解正确的,他可以用于采样触发一个信号的话,那么我是不是就必须利用ta定时在ta中断中手动(必须手动啊)触发一次采样,而其他三种触发就可以是定时自动触发。我这样理解正确吗?
以上就是我的问题和疑惑了。再次感谢啊。
  • 一。简单介绍:

    ADC12模块中是由以下部分组成:输入的16路模拟开关(外部8路,内部4)ADC内部电压参考源,ADC12内核,ADC时钟源部分,采集与保持/触发源部分,ADC数据输出部分,ADC控制寄存器等组成。

    四种采样模式:

    (1)单通道单次转换模式

    (2)序列通道单词转换模式

    (3)单通道多次转换模式

    (4)序列通道多次转换模式

    个人觉得(3)模式应该是使用较多的,

    对选定的通道进行多次转换,直到关闭该功能或ENC=0。进行如下设置:
    x=CSStartAdd
    ,指向转换开始地址
    ADC12MEMx
    存放转换结果 
    ADC12MCTLx
    寄存器中定义了通道和参考电压
    在这种模式下,改变转换模式,不必先停止转换,在当前正在进行的转换结束后,可改变转换模式。该模式的停止可有如下几种办法:
    使用CONSEQ=0的办法,改变为单通道单次模式。
    使用ENC=0直接使当前转换完成后停止。
    使用单通道单次模式替换当前模式,同时使ENC=0  
        ADC
    控制寄存器
    ADC12CTL0 
    转换控制寄存器0
    ADC12CTL1 
    转换控制寄存器1
    ADC12IE   
    中断使能寄存器
    ADC12IFG  
    中断标志寄存器
    ADC12IV   
    中断向量寄存器
    ADC12MEM0-15 
    存储控制寄存器0-15
    ADC12MCTL0-15 
    存储控制寄存器0-15
    一般做法:在大循环里开始转换,转换完毕引发中断,我们在中断里记录并处理转换数据。

     

     

    二。ADC12寄存器说明
    -----------------------------------------------------------------------
    寄存器类型           寄存器缩写                寄存器含义
    -----------------------------------------------------------------------
    转换控制寄存器       ADC12CTL0                 转换控制寄存器
                         ADC12CTL1                 
    转换控制寄存器
    -----------------------------------------------------------------------
    中断控制寄存器       ADC12IFG                  中断标志寄存器 
                         ADC12IE                   
    中断使能寄存器 
                         ADC12IV                   
    中断向量寄存器 
    -----------------------------------------------------------------------
    存储及其控制寄存器   ADC12MCTL0ADC12MCTL15   存储控制寄存器015 
                         ADC12MEM0
    ADC12MEM15     存储寄存器015 
    -----------------------------------------------------------------------
    1
    ADC12CTL0 控制寄存器0,各位定义:
    bit15
    12   bit118   bit7   bit6   bit5   bit4      bit3         bit2        bit1   bit0
    SHT1        SHT0       MSC    2.5V   REFON  ADC12 ON  ADC12 TOVIE  ADC12 TVIE   ENC    ADC12 SC 
    ADC12SC——
    采样/转换控制位。在不同条件下,ADC12SC的含义如下所示:
    --------|---------------------------------------------------------------------
    ENC=1,  | SHP=1:  ADC12SC
    0变为1启动A/D转换; A/D转换完成后ADC12SC自动复位 
    ISSH=0  |  SHP=0:  ADC12SC
    保持高电平采样; ADC12SC复位时启动一次转换 
    --------|---------------------------------------------------------------------
    ENC——
    转换允许位。
    0
    ADC12为初始状态,不能启动A/D转换;
    1
    :首次转换由SAMPCON上升沿启动
    ADC12TVIE——
    转换时间溢出中断允许位(当前转换还没完成时,又发生一次采样请求,则会发生转换时间溢出)
    0
    :没发生转换时间溢出
    1
    :发生转换时间溢出
    ADC12OVIE——
    溢出中断允许位(当ADC12MEMx中原有数据还没有读出,而又有新的转换结果数据要写入时,则发生溢出)
    0
    :没发生溢出
    1
    :发生溢出
    ADC12ON——ADC12
    内核控制位
    0
    :关闭ADC12内核
    1
    :打开ADC12内核
    REFON——
    参考电压控制位
    0
    :内部参考电压发生器关闭
    1
    :内部参考电压发生器打开
    2.5V——
    内部参考电压的电压值选择位
    0
    :选择1.5V内部参考电压
    1
    :选择2.5V内部参考电压
    MSC——
    多次采样转换位(CONSEQ<>0表示当前转换模式不是单通道单次转换)
    -----------|---------------------------------------------------------------------------------------------
    有效条件   | MSC    含义
    SHP=1      |  0       
    每次转换需要SHI信号的上升沿触发采样定时器     
    CONSEQ<>0  |  1       
    仅首次转换由SHI信号的上升沿触发采样定时器,而后采样转换将在前一次转换完成后立即进行 
    -----------|---------------------------------------------------------------------------------------------
    SHT1
    SHT0——采样保持定时器1,采样保持定时器0
    分别定义保存在转换结果寄存器ADC12MEM8ADC12MEM15ADC12MEM0ADC12MEM7中的转换采样时序与采样时钟ADC12CLK的关系。采样周期是ADC12CLK周期乘4的整数倍,即:
    SHITx   0   1   2   3   4    5   6   7   8   9  10   11    12
    15 
    n       1   2   4   8  16   24  32  48  64  96  128  192   256 
    2
    ADC12CTL1 转换控制寄存器1(大多数315位,只有在ENC=0时才可被修改),各位定义:
    bit15
    12    bit1110  bit9  bit8   biy75     bit43      bit21    bit0
    CSSTARTADD   SHS        SHP   ISSH   ADC12 DIV   ADC12 SSEL   CONSEQ     ADC12 BUSY
    CSSTARTADD——
    转换存储器地址位。该4位所表示的二进制数015分别对应ADC12MEM015。可以定义单次转换地址或序列转换的首地址。
    SHS——
    采样触发输入源选择位。
    0
    ADC12SC
    1
    Timer_A.OUT1
    2
    Timer_B.OUT0
    3
    Timer_B.OUT1
    SHP——
    采样信号(SAMPCON)选择控制位。
    0
    SAMPCON源自采样触发输入信号
    1
    SAMPCON源自采样定时器,由采样输入信号的上升沿触发采样定时器
    ISSH——
    采样输入信号方向控制位
    0
    :采样输入信号为同向输入
    1
    :采样输入信号为反向输入
    ADC12DIV——ADC12
    时钟源分频因子选择位。分频因子为该3位二进制数加1
    ADC12SSEL——ADC12
    内核时钟源选择
    0
    ADC12内部时钟源——ADC12OSC
    1
    ACLK
    2
    MCLK
    3
    SMCLK
    CONSEQ——
    转换模式选择位
    0
    :单通道单次转换模式
    1
    :序列通道单次转换模式
    2
    :单通道多次转换模式
    3
    :序列通道多次转换模式
    ADC12BUSY——ADC12
    忙标志(只用于单通道单次转换模式,在其它转换模式下,该位无效)
    0
    :表示没有活动的操作
    1
    :表示ADC12正处于采样期间、转换期间或序列转换期间
    3
    ADC12MEM0ADC12MEM15 转换存储寄存器
    该组寄存器均为16位寄存器,用来存放A/D转换结果。中用其中低12位,高4位在读出时为0
    4
    ADC12MCTLx 转换存储控制寄存器(所有位只有在ENC为低电平时可修改,在POR时各位被复位)
    对于每个转换存储器有一个对应的转换存储器控制寄存器,所以在进行CSSTARTADD转换存储器地址位设置的同时,也确定了ADC12MCTLx。该寄存器各位含义如下:
    bit7   bit6
    4   bit30
    EOS    SREF      INCH 
    EOS——
    序列结束控制位
    0
    :序列没有结束
    1
    :该序列中最后一次转换
    SREF——
    参考电压源选择位
    0
    Vr+=AVccVr-=AVss
    1
    Vr+=VREF+,Vr-=AVss
    2
    3Vr+=VEREF+Vr-=AVss
    4
    Vr+=AVccVr-=VREF-/VEREF-
    5
    Vr+=VREF+Vr-=VREF-/VEREF-
    6
    7Vr+=VEREF+Vr-=VREF-/VEREF-
    INCH——
    选择模拟输入通道
    0
    7A0A7
    8
    VeREF+
    9
    VREF-/VeREF-
    10
    :片内温度传感器的输出
    11
    15:(AVCC-AVSS/2
    5
    ADC12IFG 中断标志寄存器 16位,其中中断标志位ADC12IFG.x对应于转换存储寄存器ADC12MEMx。各位含义如下:
    bit15   bit14    ......      bit1   bit0 
    IFG15   IFG14    ......      IFG1   IFG0 
    ADC12IFG.x
    置位:转换结束,并且转换结果已经装入转换存储寄存器。
    ADC12IFG.x
    复位:ADC12MEMx被访问。
    6
    ADC12IE 中断使能寄存器 16位,对应于ADC12IFG寄存器。各位含义如下:
    bit15   bit14    ......     bit1   bit0 
    IE.15   IE.14    ......     IE.1   IE.0 
    ADC12IE.x=1
    :允许相应的中断标志位ADC12IFG.x在置位时发生的中断请求服务。
    ADC12IE.x=0
    :禁止相应的中断标志位ADC12IFG.x在置位时发生的中断请求服务。
    7
    ADC12IV 中断向量寄存器 
    ADC12
    是一个多源中断:有18个中断标志(ADC12IFG.0ADC12IFG.15ADC12TOVADC12OV),但只有一个中断向量。所以需要设置这18个标志的优先级顺序,按照优先级顺序安排中断标志的响应,高优先级的请求可以中断正在服务的低优先级。 

     

    三。标准程序参考:

    #include "msp430x14x.h"
    void InitADC12();
    unsigned char wait;
    int main( void )
    {
      // Stop watchdog timer to prevent time out reset
       WDTCTL = WDTPW + WDTHOLD;
      InitADC12();
      return 0;
    }
    void InitADC12()
    {
        //_DINT();
        ADC12CTL0 &= ~ENC; //
    只有在ENC复位的情况下才能对ADC12CTL01进行设置!!!
        ADC12CTL0 = MSC + REFON + REF2_5V + SHT0_15 + SHT1_15;
        /*MSC
    :多次采样转换位,只对序列采样或者多次多次转换有效。
            0
    :采样定时器需要SHI信号的上升沿触发
            1:
    首次需要采样定时器SHI信号触发,之后的转换在上次转换之后随即开始。*/
        ADC12CTL1 |= SHP + CONSEQ_0;
        /*SHP: 1
    :采样信号源自采样定时器 0:采样信号源自采样输入信号
        CONSEQ: 0:
    单通道单次转换 1:序列通道单词转换 2:单通道多次转换 3:序列通道多次转换
        CSTARTADD_x(0~15):
    转换起始位置 */
        ADC12MCTL0 = EOS + SREF_0 + INCH_7;
        /* EOS:
    序列结束位
        SREF:
    参考电压选择
        INCH
    :模拟输入通道选择 */
        ADC12IE |= 0x0001;//
    开相应模拟通道中断,转换完毕后引发中断
        _EINT();
        //ADC12CTL0 |= ADC12ON + ENC; //
    修改!!!// 这样写是不对的
        ADC12CTL0 |= ADC12ON;
        ADC12CTL0 |= ENC;


        wait = 0; //
    此处可定义变量,指示转换是否完成
        ADC12CTL0 |= ENC+ADC12SC; //
    转换开始 若希望在其他时间开始转换 可将次句放在别处逼比必
        while(wait==0)
          ;
    }
    #pragma vector=ADC_VECTOR
    __interrupt void ADC()
    {int result[7];
            wait=1;
            result[0] = ADC12MEM0;
            /*unsigned char q0;
        int *pmem=ADC12MEM;
                        //
    转换结束的标志位置位
        for(q0=0;q0<16;q0++)
        {
            AdMem[q0]= *pmem;
            pmem++;
        }*/
    }

  • 你好,谢谢你给我的回复啊。

    看了你给的回答,我还是有一些疑问,再麻烦你帮忙解答一下好吗。

    就是你刚刚说的 这里面的采样定时器是指的那个SHT位控制的是吗?我想下面这样理解正确吗,就是输入信号上升沿触发一次采样定时器,由采样定时器给SAMPCON一个高电平开始采样。那现在如果我SHP为0那么他的SAMPCON高电平怎么计算啊?这一点不是很懂。麻烦你再解答一下好吗?

  • 解决了吗?能讲一下吗