2812 AD示例程序为什么采不到数据

示例是这样的:
//编译前确保CPU时钟频率在DSP281x_Examples.h 中正确定义
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
interrupt void adc_isr(void);
//全局变量定义
Uint16 LoopCount;
Uint16 ConversionCount;
Uint16 Voltage1[3];
Uint16 Voltage2[3];
main()
{
InitSysCtrl();
//高速外围时钟定标寄存器,配置:系统时钟/6=25Mhz (系统时钟150Mhz)
EALLOW;
SysCtrlRegs.HISPCP.all = 0x3; //外围高速时钟HSPCLK = 系统时钟/(2*HISPCP)
EDIS;
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.ADCINT = &adc_isr;
EDIS;
InitAdc(); //初始化ADC
//在PIE中使能ADCINT
PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
IER |= M_INT1; //使能CPU中断1
EINT; //使能全局中断INTM
ERTM; //使能全局实时中断 DBGM
LoopCount = 0;
ConversionCount = 0;
//配置ADC
AdcRegs.ADCTRL3.bit.ADCCLKPS =0;
AdcRegs.ADCTRL1 .bit.CPS =0; //配置ADClk 时钟

AdcRegs.ADCMAXCONV.all = 0x0008; //最大转换通道寄存器
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; //输入通道选择排序寄存器
// AdcRegs.ADCCHSELSEQ1.all = 0x1110; //输入通道选择排序寄存器
// AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x2; //输入通道选择排序寄存器
AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1; //使能 EVASOC 启动 SEQ1
//AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; //软件启动 SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; //使能 SEQ1 中断
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; //级联排序器操作,双(0)单(1)
//配置EVA
EvaRegs.T1CMPR = 0x0f00; //Timer1比较寄存器(当前的比较值)
EvaRegs.T1PR = 0xFFFF; //Timer1周期寄存器(当前的周期值)
EvaRegs.GPTCONA.bit.T1TOADC = 1; //使能 EVASOC in EVA
EvaRegs.T1CON.all = 0x1042; //Timer1控制寄存器;TMODE 连续增;Timer 使能;Timer 比较使能
//等待ADC中断
while(1)
{
LoopCount++;
}
}
interrupt void adc_isr(void)
{

Voltage1[ConversionCount] = AdcRegs.ADCRESULT0 >>4;
Voltage2[ConversionCount] = AdcRegs.ADCRESULT1 >>4;
if(ConversionCount == 2)
{
ConversionCount = 0;
}
else ConversionCount++;
//重新初始化,等待下一个 ADC 结果
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; //重启 SEQ1
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; //清除 INT SEQ1 位
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //允许 PIE 中断
return;
}

我基本上是照上面抄的,在发现只能进中断但是采集不到数据之后上网查了下,有人说这示例是有问题的,但是按照他们的办法都弄了,还是采集不到数据啊。有人能帮帮忙么,或者说一下有哪些其他的地方可能会导致这样的情况。采到的数据一直为0.ADCLO在板子上已经接了AGND,AD模块已经禁用了低功耗模式。
现在可以采集到数据了,之前是因为板子有问题搞的。但是现在采集出来的数据有点怪。没任何输入时,AD0,AD1分别为1.17V和2.5V不知道是怎么搞的,用万用表测AD0,AD1竟然真的有1.17v和2.5V。而且接入输入的时候是有变化,但是显示出来的电压完全不对劲 .不对劲啊,进运放前是有那样处理啊。就是接一个电阻然后一个电容接模拟地啊。 我怀疑是不是哪个地方坏了,麻烦判断下可能哪里坏了??

Timer1控制寄存器;TMODE 连续增;
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-10-14
但是现在采集出来的数据有点怪。没任何输入时,AD0,AD1分别为1.17V和2.5V不知道是怎么搞的

这个问题是干扰信号. 这个信号进AD转换前, 应当处理一下.
通过一个1K电阻, 再通过0.1uF电容对地, AD0 or AD1 就接到这个电容上去读,
你这个问题就可以解决了.

2812 AD示例程序为什么采不到数据
Timer1控制寄存器;TMODE 连续增;

怎样把2812AD采集来的数据用CCS自带的图形工具显示
没有具体的测试过,但是根据经验,烧写个几十次因该是没有问题的。至少,我们以前在频繁烧写的时候没有把FLASH烧坏。

系统工作流程图如下图所示 这句话如何避开查重
AD8028是AnalogDevices公司的轨到轨输入输出的高速运算放大器,工作电压2.7V-12V,共模抑制比110dB,带宽190MHz,压摆率100V\/μS,它有一个突出的优点:即允许用户通过片上特定的引脚选择门槛电压,这无疑大大减小了失真,因此AD8028是一个理想的选择,其单通道信号调理模块电路图如图2所示。数据采集模块DSP片上ADC模块是可...

多通道的AD转换器同一时刻也仅能对一路信号进行处理吗?
是的,它就是在A\/D转换器前加了个多路复用(Multiplex);完全同时的多路采集用多路A\/D转换器。

如何保证AD采集的数据,实时的被SCI发送出去
用AD中断,在AD中断里面用SCI的FIFO功能将数值发出去~~至于接受,还是用普通的SCI中断接受模式,具体实现你可以自己试一下~~这样不会影响程序正常执行的!

2000系列DSP器件2407内核各组成部分的功能机构与特点
2407与2812的异同点1、相同点: 1 时间管理器,来管理定时器和pwm,及电机光电码盘的接口, 2 多路ad来接受传感器的信号 3 通讯接口 spi can sci 使得可以方便的通讯 4 程序存储器和内部ram都有一定的容量满足不同的需求 5 3、3V电压供电,突出了低功耗的节电功能 6 可以进行程序和数据空间的外扩 7 jtag接口...

相似回答