用的是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时,保持电容与模拟输入断开,此时就可以切换通道,不会改变转换值。现在碰到的问题是这样采样是不对的。只要我按正常的采样-转换-切换通道-延时-采样。这个时序来采样就没问题。。请指教下 |