打印

DSP2812AD转换后的结果不理解

[复制链接]
1400|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangchao1607|  楼主 | 2015-9-15 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DSP2812 AD转换后结果存到了哪里?怎么读出来? 我需要根据AD 的结果由2812发出不同的指令!程序如下。   2812怎么读出结果  是在某个寄存器里吗?怎么读

/*********************************************************************
**        Module Name:                ADC                                                                         **
**        Author:                                Cbq                                                                              **
**        Version:                        1.0                                                                                    **
**        CreateDate:                        2008-05-23                                                                    **
**        Description:                                                                                        **
**        Remark:                                Huozq                                                                            **
**        Revision History:        2008-11-10                                                                    **
**********************************************************************/

/*********************************************************************
**        实验目的:学习DSP内部AD转换器,掌握它的所有寄存器功能配置,这是比  **
**           较重要的在控制行业中.                                  **
**        实验说明:外接信号进行采集                                       **
**           注意:DSP2812芯片中的AD的模拟输入范围为:0~3V,切勿超过,**
**           否则可能烧毁DSP芯片!                                   **
**        实验结果:观测a1,由于AD本身精度问题,可能会有一些误差。         **
**********************************************************************/



#include "DSP28_Device.h"

float        a1[16];
//0~15信道经过DAAD转换后,在用ADC转换公式得到的模拟值。
//本程序只针对了a1[0]和a1[1]两信道

unsigned int a2=0;                //采样次数的统计
float        adclo=0.0;                //0位调整

interrupt void ad(void);//AD中断子程序
void delay();
void WriteDAC(unsigned char add,unsigned char rng,unsigned char vol);//DA转换程序
main()
{       
    unsigned int temp;
    InitSysCtrl();

        DINT;
        IER = 0x0000;
        IFR = 0x0000;

        InitPieCtrl();

    InitPieVectTable();       
       
        InitPeripherals();
       
        InitGpio();
       
        EALLOW;        // This is needed to write to EALLOW protected registers
        PieVectTable.ADCINT=&ad;////中断向量表中的ADCINT中断指向AD中断函数
        EDIS;   // This is needed to disable write to EALLOW protected registers
   
    InitAdc();

    // Enable INT14 which is connected to CPU-Timer 2:
        IER |= M_INT1;                                //使能中断第一组
        PieCtrl.PIEIER1.bit.INTx6=1;//第一组的第6位正好ADINT
        //KickDog();
    // Enable global Interrupts and higher priority real-time debug events:
       
        EINT;   // Enable Global interrupt INTM
        ERTM;        // Enable Global realtime interrupt DBGM
        while(AdcRegs.ADC_ST_FLAG.bit.SEQ1_BSY==0)//读排序器1的忙状态位,为0是空闲
        {                       

                AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;                //启动SEQ1开始转换

        }


        GpioDataRegs.GPASET.all|=0x8000;        //设置串行数据载入控制,具体可查看TLV5620英文资料,
                                                 //这里是先置高

    temp=57;
         
        for(;;)
        {
           KickDog();
          
           /*下面这里输出的四个电压值可在DA输出口,即J15分别对应测到0.4V,0.8V,1.2V,.1.6V*/
       //WriteDAC(0,0,temp);          ///0.4V
           //WriteDAC(1,0,temp*2);  ///0.8V          
           //WriteDAC(2,0,temp*3);  ///1.2V
           //WriteDAC(3,0,temp*4);  ///1.6V
        }

}        

/*
void WriteDAC(unsigned char add,unsigned char rng,unsigned char vol)
{
        unsigned short int data;
          data = 0x0000;
          data = ((add<<14) | (rng<<13) | (vol<<5));

     
          if(Spi_TxReady() == 1)
             SpiaRegs.SPITXBUF = data;
    delay(50000);
     
    GpioDataRegs.GPACLEAR.all|=0x8000;        //产生一突变负脉冲,锁定串行数据
        delay(1000);
    GpioDataRegs.GPASET.all|=0x8000;
               
}
*/

void delay(unsigned int t)
{
        while(t>0)
            t--;
}


interrupt void ad(void)
{
    adclo=0;                //每块板的零位不一样,在这儿设一个合适的数以扣掉零位
        IFR=0x0000;

        PieCtrl.PIEACK.all=0xffff;
        a2++;
        a1[0]=((AdcRegs.RESULT0>>4)*3)/4095.0+adclo;//采集0.4V的DA输入电压后转换值,也为0.4V左右
        a1[1]=((AdcRegs.RESULT1>>4)*3)/4095.0+adclo;//0.8V左右
        a1[2]=((AdcRegs.RESULT2>>4)*3)/4095.0+adclo;
        a1[3]=((AdcRegs.RESULT3>>4)*3)/4095.0+adclo;
        a1[4]=((AdcRegs.RESULT4>>4)*3)/4095.0+adclo;
        a1[5]=((AdcRegs.RESULT5>>4)*3)/4095.0+adclo;
        a1[6]=((AdcRegs.RESULT6>>4)*3)/4095.0+adclo;
        a1[7]=((AdcRegs.RESULT7>>4)*3)/4095.0+adclo;
        a1[8]=((AdcRegs.RESULT8>>4)*3)/4095.0+adclo;
        a1[9]=((AdcRegs.RESULT9>>4)*3)/4095.0+adclo;
        a1[10]=((AdcRegs.RESULT10>>4)*3)/4095.0+adclo;
        a1[11]=((AdcRegs.RESULT11>>4)*3)/4095.0+adclo;
        a1[12]=((AdcRegs.RESULT12>>4)*3)/4095.0+adclo;
        a1[13]=((AdcRegs.RESULT13>>4)*3)/4095.0+adclo;
        a1[14]=((AdcRegs.RESULT14>>4)*3)/4095.0+adclo;
        a1[15]=((AdcRegs.RESULT15>>4)*3)/4095.0+adclo;
        AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;
        AdcRegs.ADCTRL2.bit.SOC_SEQ1=1; //在这儿设一断点,程序执行到这儿停下后,查看变量数组a1即可看到ADC各通道的采样值。
        EINT;
       
}



//===========================================================================
// No more.
//===========================================================================

相关帖子

沙发
airwill| | 2015-9-15 18:48 | 只看该作者
a1[9]=((AdcRegs.RESULT9>>4) ...
这里不就是在读 ADC 转换的结果

使用特权

评论回复
板凳
JIUJ| | 2015-9-15 21:40 | 只看该作者
我也在学DSP,AdcRegs.RESULT0这个就是ADC转换放置的结果的寄存器,float   a1[16];定义这个数组就是为了读取转换后寄存器的值。

使用特权

评论回复
地板
zhangmangui| | 2015-9-15 23:14 | 只看该作者
a1[0]=((AdcRegs.RESULT0>>4)*3)/4095.0+adclo;//采集0.4V的DA输入电压后转换值,也为0.4V左右
        a1[1]=((AdcRegs.RESULT1>>4)*3)/4095.0+adclo;//0.8V左右
        a1[2]=((AdcRegs.RESULT2>>4)*3)/4095.0+adclo;
        a1[3]=((AdcRegs.RESULT3>>4)*3)/4095.0+adclo;
        a1[4]=((AdcRegs.RESULT4>>4)*3)/4095.0+adclo;
        a1[5]=((AdcRegs.RESULT5>>4)*3)/4095.0+adclo;
        a1[6]=((AdcRegs.RESULT6>>4)*3)/4095.0+adclo;
        a1[7]=((AdcRegs.RESULT7>>4)*3)/4095.0+adclo;
        a1[8]=((AdcRegs.RESULT8>>4)*3)/4095.0+adclo;
        a1[9]=((AdcRegs.RESULT9>>4)*3)/4095.0+adclo;
        a1[10]=((AdcRegs.RESULT10>>4)*3)/4095.0+adclo;
        a1[11]=((AdcRegs.RESULT11>>4)*3)/4095.0+adclo;
        a1[12]=((AdcRegs.RESULT12>>4)*3)/4095.0+adclo;
        a1[13]=((AdcRegs.RESULT13>>4)*3)/4095.0+adclo;
        a1[14]=((AdcRegs.RESULT14>>4)*3)/4095.0+adclo;
        a1[15]=((AdcRegs.RESULT15>>4)*3)/4095.0+adclo;

这些都是在读数据啊     AdcRegs.RESULT15就是读到对应通道的数字量   然后转化为模拟量存入a1

使用特权

评论回复
5
wangchao1607|  楼主 | 2015-9-16 10:20 | 只看该作者
zhangmangui 发表于 2015-9-15 23:14
a1[0]=((AdcRegs.RESULT0>>4)*3)/4095.0+adclo;//采集0.4V的DA输入电压后转换值,也为0.4V左右
        a1[1 ...

哦哦 谢谢  我想知道AdcRegs.RESULT0存的结果 怎么办呢

使用特权

评论回复
6
wangchao1607|  楼主 | 2015-9-16 10:22 | 只看该作者
JIUJ 发表于 2015-9-15 21:40
我也在学DSP,AdcRegs.RESULT0这个就是ADC转换放置的结果的寄存器,float   a1[16];定义这个数组就是为了读 ...

对对   AD转换结果存在AdcRegs.RESULT0里  怎么读出他的结果  怎么读呢  用什么语句啊  谢谢啦

使用特权

评论回复
7
wangchao1607|  楼主 | 2015-9-16 10:24 | 只看该作者
zhangmangui 发表于 2015-9-15 23:14
a1[0]=((AdcRegs.RESULT0>>4)*3)/4095.0+adclo;//采集0.4V的DA输入电压后转换值,也为0.4V左右
        a1[1 ...

AdcRegs.RESULT15就是读到对应通道的数字量   这里的数字量怎么知道  用什么语句读出

使用特权

评论回复
8
angerbird| | 2015-9-16 23:28 | 只看该作者
楼上的读取数据的方式还是可以的。

使用特权

评论回复
9
baimiaocun2015| | 2015-9-17 22:36 | 只看该作者
这还是多通道采集数据的。

使用特权

评论回复
10
309030106| | 2015-9-18 19:54 | 只看该作者
楼主是不知道怎么读取这些量吗

使用特权

评论回复
11
zhangbo1985| | 2015-9-20 21:57 | 只看该作者
这个就不太好懂的。。

使用特权

评论回复
12
wangchao1607|  楼主 | 2015-9-21 08:45 | 只看该作者
309030106 发表于 2015-9-18 19:54
楼主是不知道怎么读取这些量吗

shi de 是的  模拟输入转换成数字量后的结果  怎么知道   我想用数字量结果

使用特权

评论回复
13
FireRiver9| | 2015-9-21 20:07 | 只看该作者
AdcRegs.RESULT15就是读到对应通道的数字量

使用特权

评论回复
14
lefeng| | 2015-9-21 21:20 | 只看该作者
寄存器名赋给变量不行吗

使用特权

评论回复
15
Snow7| | 2015-9-30 09:52 | 只看该作者
楼主怎么做的,解决了吗

使用特权

评论回复
16
lefeng| | 2015-9-30 10:10 | 只看该作者
模拟输入转换成数字量后的结果

需要将这些数字量读出来然后再换算成模拟量的值

使用特权

评论回复
17
可可球| | 2015-9-30 11:07 | 只看该作者
AdcRegs.RESULT0这个就是ADC转换放置的结果的寄存器

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

25

帖子

1

粉丝