王家发sensei 发表于 2013-8-19 22:35:50

求助:pic30f采样中的ADCBUF是如何分配的?

如题:ADCBUF为采样的缓存器。当产生ADC中断时,将采样回来的值转换后存入。
小弟不解的是,ADCBUF缓存器一共有16个,从ADCBUF0到ADCBUFF十六个。当有多路采样时,是怎么将值存入的?是按AN0对ADCBUF0?AN1对应ADCBUF1?(有人说是这样的!)
但是在其他地方有看到说不是按照这样的,可是没有说是按照什么样的。

下面有一段程序就不是按照一一对应的;
寄存器配置
ADCON2=0x0308;    //选AVDD和AVSS,不扫描,选择四个通道,四个采样转换过程后中断,16字缓冲器,始终使用MUXA的设置
ADPCFG=0x0006;    //使能AN0,AN3,AN4,AN5为采样输入
ADC中断数据处理
      Uo_temp=Seqenc(ADCBUF0,ADCBUF4,ADCBUF8);
         Uo_Sum+=Uo_temp;
         Io_temp_1=Seqenc(ADCBUF1,ADCBUF5,ADCBUF9);
         Io_Sum_1+=Io_temp_1;
         Io_temp_2=Seqenc(ADCBUF2,ADCBUF6,ADCBUFA);
         Io_Sum_2+=Io_temp_2;
Seqenc(。。。)是一个取平均值函数;


上面的程序ADCBUF应该是按照采样端口的优先级别分配ADCBUF,然后按顺序的。
可是小弟试过这样写程序好像才采不到值。
哪位大师帮忙给分析分析

王家发sensei 发表于 2013-8-19 22:37:17

顶个人气,等大师来解答!跪谢!

王家发sensei 发表于 2013-8-20 17:37:18

为什么没有人解答呢?
昨天看了寄存器,配置好了。AN0,AN3,AN4,AN5分别为四个通道CH0,CH1,CH2,CH3的正向输入。负向设置为-VREF;
然后设置成每次采样后中断,同时转换四个通道。
这样的话每次中断的话,应该按通道分配ADCBUF.
但是,感觉仅仅给AN0一个采样的话,其他ADCBUF也会有数值,会影响到,怎么回事

asdmaill 发表于 2013-8-27 14:41:42

我实际试过了,是按你具体使用了多少通道来的,比如你开了两个ADC采样,那这两两个引脚采集到得数据,是先存入ADCBUF0,下一个引脚的存入ADCBUF1,而不管这两个通道是AN0,AN1,AN2,AN3,还是AN4,比如你用了AN7,AN9两个通道,那AN7的数据在ADCBUF0里面,AN9的数据在ADCBUF1里面,而如果是16个通道全开,则就AN0对ADCBUF0.......AN15对ADCBUFF,我自己试验出来的,刚开始也没完全弄懂

王家发sensei 发表于 2013-8-27 21:41:59

asdmaill 发表于 2013-8-27 14:41 static/image/common/back.gif
我实际试过了,是按你具体使用了多少通道来的,比如你开了两个ADC采样,那这两两个引脚采集到得数据,是先 ...

我现在已经知道了。根据下图,和配置的输入引脚无关,而是与内部的通道,CH0,CH1,CH2,CH3有关。这样的话通道CHX上的值就会顺序保存至ADCBUF。
页: [1]
查看完整版本: 求助:pic30f采样中的ADCBUF是如何分配的?