新闻中心

EEPW首页>嵌入式系统>设计应用> SN 8 位单片机 SN8P2743 应用实践(2)

SN 8 位单片机 SN8P2743 应用实践(2)

作者: 时间:2016-12-02 来源:网络 收藏
SN8P2743 是一较新的型号,内部含有放大器,比较器,AD 转换器并且有外部基准电压参考输入.....4K*16位 空间,感觉上比较"价廉物美!"
通常,我们使用SN单片机的 AD 功能时,如果选择外部基准电压,可以利用廉价的 TL431 提供 2.5V 左右的高稳定度电压,即使通着电的240℃高温电烙铁靠上去,TL431 的输出波动也仅仅 1~3mV ,此时,系统可以把 5V 基准时得到的 12BIT AD 变成 2.5V 基准得到了 12BIT AD,这是非常划算的举措! ---- 一方面,等同于使用了一只 2 倍放大的无偏移,无失调,无温飘的放大电路,另外一方面,让AD 的参考值具有高达 50ppm 的温度系数!

我就在最近使用 2743 的外部基准和 AD 功能时,遇见一个问题:

AD 读数远远相差期望值很远很远!仿真器的转接板上,AVREFH 测量到的基准电压不是 2.5V,而是 5.0V ,怎么回事呢?

检查仿真器上外部/内部基准 AVREFH 插头,已经拔开!(必须拔开!)

以为是需要外接基准电压,于是,把转接板上 AVREFH 的插针与外部基准 TL431 直接连接,看看是否正确? 结果,电压变成比 2.5V 稍大了 0.1~0.3V ,不稳定.由于事先有准备,不停摸一下 TL431,发现其温度上升,感觉此举错误,赶紧脱开 AVREFH 与 TL431 的连接.
转接板与目标板是具有引脚一对一关系的,外部基准实际已经到达芯片对应引脚,为什么转接板上 AVREFH 测量不到呢?
查看转接板上,原来这些接口是利用一种 NLAS4501DFT2G 通用单刀单掷模拟开关来切换的!为此,临时上网查阅该芯片的手册.费了不少劲!
小心测量 NLAS4501DFT2G 芯片的控制引脚,发现与"选择外部基准"的指令不同,怎么回事?

再重新阅读 2743 的数据手册,在 ADM 寄存器里,比通常的 SN 带 AD 单片机多了一个 FAVREFH 位,它 =1 则是选择外部基准! ---- 这里,通常不会出错!指令是正确的!

再看看它给出的示例:

ADC操作举例

ADC:
; 复位ADC。
CLR ADM ; 清ADM 寄存器。
; 设置ADC 时钟Rate 和ADC 分辨率。
MOV A, #0nmn0000b ; nn:ADCKS[1:0]代表ADC 时钟Rate。
B0MOV ADR, A ; m 代表ADC 分辨率。
; 设置ADC 参考高电压。
B0BCLR FAVREFH ; 内部VDD。
or
B0BSET FAVREFH ; 外部参考源。
; 设置ADC 输入通道。
MOV A, #value1 ; 设置P4CON 选择ADC 输入通道。
B0MOV P4CON, A
MOV A, #value2 ; 设置ADC 输入通道为输入模式。
B0MOV P4M, A
MOV A, #value3 ; 禁止ADC 输入通道的内部上拉电阻。
B0MOV P4UR, A
; 使能ADC。
B0BSET FADCENB
; 执行ADC 100us 启动时间延迟循环。
CALL 100usDLY ; 100us 延迟循环。
; 选择ADC 输入通道。
MOV A, #value ; 设置ADCHS[2:0]选择ADC 输入通道。
OR ADM, A
; 使能ADC 输入通道。
B0BSET FGCHS
; 使能ADC 中断功能。
B0BCLR FADCIRQ ; 清ADC 中断请求。
B0BSET FADCIEN ; 使能ADC 中断功能。
; 开始AD 转换。
B0BSET FADS
好了!问题找到了! ----- 看看这一句:CLR ADM ; 清ADM 寄存器。---- 这里就把 BIT3 重新变成 0 了!
一个单片机系统,除了 AD 转换之外,大部分时间都在运行其它程序,FAVREFH (ADM.3)在程序指令下,会从 1 变成 0,又从 0 变成 1 ! 不停切换外部基准/内部基准,当然就会让外部基准不停变化了!
于是,删除这一句: " CLR ADM ; 清ADM 寄存器 " !

并且,在上电后最先的系统初始化时,就让 FAVREFH (ADM.3)=1 ! 以后,就必须牢记不能动这一位!选择AD通道时,可以使用 OR 指令或 AND 指令去改变 ADM ,当然,如果充分注意,仍然可以使用 MOV ADM,#value 去赋值!

例如:;B3:FAVREFH=1 外部参考源。

;选择ADC 输入通道:
MOV A,#098H ;=P40----FAVREFH (ADM.3)=1
;或
MOV A,#099H ;=P41----FAVREFH (ADM.3)=1
;或
MOV A,#09AH ;=P42----FAVREFH (ADM.3)=1
;或
MOV ADM,A
ZB1 FADS; 开始AD 转换。
;................
经过这样处理,测量转接板上 AVREFH 的插针上就是 2.5V ,稳定不动! AD 转换读数也变成正常了!

------ 当然了,P4M,P4UR,P4CON 这些相关寄存器仍然需要小心正确设置的!

此经历特别贴出,供朋友们使用 2743 时留意参考! ---- 随着应用深入,如果再发现有比较古怪的问题,再行贴出!

上一页 1 2 下一页

评论


技术专区

关闭