打印

求助]关于实现AD采样通道切换时间最短

[复制链接]
4804|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
startt|  楼主 | 2010-6-15 09:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是946,需要同时采集几路信号,理论上是要同时采样,但不可能所有通道同时开通,因此要求通道切换时间最短最好。请看一下以下步骤为什么不行。(tad=2us,AD中断在定时器里面定时开始采样)
SAMPLE_START
   BTFSS ADCON0,1                             ;是否已开启AD中断,在定时器里开启
   GOTO $-1

   call DELLAY_ 5us                               ;延迟1tad+100ns后,保持电容与模拟输入断开

   movf     chanel2,w                               ;此时切换通道
   movwf   ADCON0

   BTFSC   ADCON0,1                            ;等转换完成
   GOTO   $-1

   BSF     STATUS,RP0
   MOVF   ADRESH,W
   BCF     STATUS,RP0
   MOVWF BUF2                                    ;读取转换值,此些指令可以消耗通道切换后2tad延时
   MOVF    ADRESL,W
   MOVWF BUF1

   CALL    DELLAY_5us                           ;采样延时

   BSF      ADCON0,1                           ;开始转换

   call       DELLAY_ 5us                         ;延迟1tad+100ns后,保持电容与模拟输入断开

   movf     chanel1,w
   movwf  ADCON0                                  ;此时切换通道

   BTFSC  ADCON0,1
   GOTO  $-1                                        ;等转换完成

   BSF     STATUS,RP0
   MOVF   ADRESH,W
   BCF     STATUS,RP0
   MOVWF BUF4
   MOVF   ADRESL,W ;读取转换值,
   MOVWF BUF3

   GOTO   SAMPLE_START
上面的写法由来是张明峰书里关于说当BSF ADCON0,1 ,延迟一个tad时,保持电容与模拟输入断开,此时就可以切换通道,不会改变转换值。现在碰到的问题是这样采样是不对的。只要我按正常的采样-转换-切换通道-延时-采样。这个时序来采样就没问题。。请指教下
沙发
Beatachen| | 2010-6-16 13:07 | 只看该作者
在执行A/D 转换时应该遵循以下步骤:
1. 配置A/D 模块:
• 配置模拟/ 数字I/O (通过ANSEL 寄存器)
• 配置参考电压(通过ADCON0 寄存器)
• 选择A/D 输入通道(通过ADCON0 寄存器)
• 选择A/D 转换时钟(通过ADCON1 寄存器)
• 使能A/D 模块(通过ADCON0 寄存器)
2. 需要时,配置A/D 中断:
• 将ADIF 位(PIR1<6>)清零
• 将ADIE 位(PIE1<6>)置1
• 将PEIE 和GIE 位(INTCON<7:6>)置1
3. 等待所需的采集时间。
4. 启动转换:
• 将GO/DONE 位(ADCON0<1>)置1
5. 等待A/D 转换完成,通过以下两种方法之一判断
转换是否完成:
• 查询GO/DONE 位是否被清零(禁止中断);

• 等待A/D 中断
6. 读取一对A/D结果寄存器(ADRESH:ADRESL),
需要时将ADIF 位清零。
7. 如需再次进行A/D 转换,根据需要返回步骤1 或
步骤2。将每位的A/D 转换时间定义为TAD,在
下一次采集开始前至少需要等待2 个TAD。

BSF STATUS,RP0 ;Bank 1
MOVLW B’01110000’ ;A/D RC clock
MOVWF ADCON1
BSF TRISA,0 ;Set RA0 to input
BSF ANSEL,0 ;Set RA0 to analog
BCF STATUS,RP0 ;Bank 0
MOVLW B’10000001’ ;Right, Vdd Vref, AN0
MOVWF ADCON0
CALL SampleTime ;Wait min sample time
BSF ADCON0,GO ;Start conversion
BTFSC ADCON0,GO ;Is conversion done?
GOTO $-1 ;No, test again
MOVF ADRESH,W ;Read upper 2 bits
MOVWF RESULTHI
BSF STATUS,RP0 ;Bank 1
MOVF ADRESL,W ;Read lower 8 bits
MOVWF RESULTLO

使用特权

评论回复
板凳
startt|  楼主 | 2010-6-16 22:18 | 只看该作者
ls的,谢谢。。不过这数据手册我也有看过。。谢谢

使用特权

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

本版积分规则

3

主题

41

帖子

1

粉丝