5044|27

89

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于AD转换结果问题 [复制链接]

 
;***********************************************************
                               org                          000h          ;定义程序存放区域的起始地址
                        goto                        main
                        org                        0004h
                        bcf                        pir1,0
                        bcf                        t1con,0
                               movlw                tmr1lb
                        movwf                tmr1l
                        movlw                tmr1hb
                          movwf                tmr1h
                        bsf                        t1con,0
                        comf                r1
                        btfsc                r1,0
                        bsf                        adcon0,2
                        retfie
main        nop
                      bsf                          status,5
                       movlw                 0x00
                       movwf                  trisd
                movlw                0x01
                       movwf                  trisa
                bsf                        pie1,0
                movlw                0x0e
                movwf                adcon1
                       bcf                          status,5     ;恢复到文件寄存器体0
                clrf                decimal
                clrf                hundred
                clrf                thousand
                clrf                r0
                movlw                0x0
                movwf                porta
                movwf                portd
                movlw                0x34
                movwf                t1con
                movlw                0xc0
                movwf                intcon
                movlw                tmr1lb
                movwf                tmr1l
                movlw                tmr1hb
                movwf                tmr1h
                bsf                        t1con,0
                movlw            0x41
                movwf                adcon0
start                nop
                        call                display
                        call                ad_conversion
                        goto                start
;******************************************
;*************ad conversion value*************
ad_conversion
                        btfsc                adcon0,2
                        goto                exit
                        movf                adresh,0
                        movwf                ad_value
                        clrf                decimal
                        clrf                hundred
                        clrf                thousand
                        clrf                r0
                        clrf                r
;*********************************************
                        movf                ad_value,0
                        sublw                ad_4v
                        btfsc                status,0
                        goto                next
                        movlw                0x04
                        movwf                thousand
                        movlw                ad_4v
                        subwf                ad_value,1
                        btfsc                status,2
                        goto                exit
                        goto                result
;**********************************************
next                        movf                ad_value,0
                        sublw                ad_3v
                        btfsc                status,0
                        goto                next0
                        movlw                0x03
                        movwf                thousand
                        movlw                ad_3v
                        subwf                ad_value,1
                        btfsc                status,2
                        goto                exit
                        goto                result
;*********************************************
next0                movf                ad_value,0
                        sublw                ad_2v
                        btfsc                status,0
                        goto                next1
                        incf                thousand
                        incf                thousand
                        movlw                ad_2v
                        subwf                ad_value,1
                        btfsc                status,2
                        goto                exit
                        goto                result
;*********************************************
next1                movf                ad_value,0
                        sublw                ad_1v
                        btfsc                status,0
                        goto                result
                        incf                thousand
                        movlw                ad_1v
                        subwf                ad_value,1
                        btfsc                status,2
                        goto                exit
                        goto                result
;*********************************
result                clrf                status
result0                movlw                0x02
                        addwf                decimal,1
                        decfsz                ad_value,1
                        btfsc                status,2
                        goto                result0
;*********************************
                        movf                decimal,0
                        movwf                r0
lp_deci                movf                r0,0
                        movwf                decimal
                        movlw                0x0a
                        subwf                r0,1
                        btfsc                status,0
                        goto                exit
                        incf                hundred
                        goto                lp_deci
;*****************************************
exit                        nop
                        return
;******************************************
;                                Display
;******************************************
display
               
                        movf                  decimal,0
            call        numb
            movwf                  portd
            movlw                  0x08
            movwf                  porta
            call   delay
;******************************************
                        movf                  hundred,0
            call        numb
            movwf                  portd
            movlw                  0x10
            movwf                  porta
            call   delay
;******************************************
                        movf                  thousand,0
            call        numb
            movwf                  portd
            movlw                  0x20
            movwf                  porta
            call   delay
                        return
;******************************************
;                                Delay
;******************************************
delay                  
                                movlw   0xff
                          movwf   71h
lp1                            decfsz    71h,1
                               goto     lp1
                               return     
;******************************************
;                                Table
;******************************************
numb                      addwf        pcl,1
                retlw        0x3f
                retlw        0x06
                retlw        0x5b
                retlw        0x4f
                retlw        0x66
                retlw        0x6d
                retlw        0x7d
                retlw        0x07
                retlw        0x7f
                retlw        0x6f
                        end

最新回复

我用过16F72,16F676,690,887,1823,1828,44K22,18313,18323,18855,十位AD基本就是设置好端口,采集时钟,寄存器排列方式,开采集,读取寄存器数据,要想数据稳定,电源首先要稳定(基准源),采集时钟可以用独立RC时钟,数据进行过采集取平均值。  详情 回复 发表于 2017-9-28 17:13
点赞 关注
 

回复
举报

89

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
本帖最后由 windirection 于 2017-9-24 18:54 编辑

哪位大神帮忙看下,这程序里面有两个大问题:一是AD精度不高,现在还不知道问题在哪里;二是小数点后面两位显示的数字不会变化,好象是被赋了个固定值一样不会变,这个就是用红色显示的那段程序有问题。哪位大神帮忙看下啊
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
本帖最后由 windirection 于 2017-9-24 19:06 编辑

我的转换思路是这样的:首先让adresh的值去减4V的值的数据,如果没有进位,就说明比4V大,然后再看有没有Z置,如果有就说明是4V,否则剩下的数据每减一下movlw   0x02; addwf      decimal,1。3V,2V,1,一样的道理。最后decimal里面的值去减10,每减一次10,hundred里面就加1,从而得到最后的结果去显示。
我所说的精度差,并不是最低位为20mV,而是整位数显示就已经很大。
本来我是还设了一个mV位的,后面还有两位修正值。但程序总是不正常,调试都没有办法,所以全部减了
 
 
 

回复

3196

帖子

0

TA的资源

纯净的硅(高级)

4
 
看汇编让人头大

点评

大神,帮忙看下。  详情 回复 发表于 2017-9-24 18:57
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

89

帖子

0

TA的资源

一粒金砂(中级)

5
 

大神,帮忙看下。
 
 
 

回复

3196

帖子

0

TA的资源

纯净的硅(高级)

6
 
用什么显示啊?数码管吗?

点评

是的  详情 回复 发表于 2017-9-24 19:07
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

89

帖子

0

TA的资源

一粒金砂(中级)

7
 
chenbingjy 发表于 2017-9-24 19:02
用什么显示啊?数码管吗?

是的
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(中级)

8
 
这个样子,后面两个数字一动不动,那段程序看上去也没有什么问题啊

 
 
 

回复

3196

帖子

0

TA的资源

纯净的硅(高级)

9
 
前面的看懂了,result                clrf                status
result0                movlw                0x02
                        addwf                decimal,1
                        decfsz                ad_value,1
                        btfsc                status,2
                        goto                result0、
这几句不懂。

点评

这个是减整数剩的值啊,比如说4。XX,3。XX,2。XX,1。XX,0。XX减了整数,剩下了XX,里面的值再每减1,decimal就加2,就是20mV  详情 回复 发表于 2017-9-24 20:03
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

89

帖子

0

TA的资源

一粒金砂(中级)

10
 
chenbingjy 发表于 2017-9-24 19:24
前面的看懂了,result                clrf                status
result0                movlw         ...

这个是减整数剩的值啊,比如说4。XX,3。XX,2。XX,1。XX,0。XX减了整数,剩下了XX,里面的值再每减1,decimal就加2,就是20mV

点评

你显示调好了吗?比如单独显示123,不加AD  详情 回复 发表于 2017-9-24 20:16
 
 
 

回复

3196

帖子

0

TA的资源

纯净的硅(高级)

11
 
windirection 发表于 2017-9-24 20:03
这个是减整数剩的值啊,比如说4。XX,3。XX,2。XX,1。XX,0。XX减了整数,剩下了XX,里面的值再每减1, ...

你显示调好了吗?比如单独显示123,不加AD

点评

关掉AD就是全部显示0  详情 回复 发表于 2017-9-24 20:30
不加AD没有问题,这个程序都是复制过来,做电子钟里面的Display里面的程序。  详情 回复 发表于 2017-9-24 20:29
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

89

帖子

0

TA的资源

一粒金砂(中级)

12
 
chenbingjy 发表于 2017-9-24 20:16
你显示调好了吗?比如单独显示123,不加AD

不加AD没有问题,这个程序都是复制过来,做电子钟里面的Display里面的程序。
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(中级)

13
 
chenbingjy 发表于 2017-9-24 20:16
你显示调好了吗?比如单独显示123,不加AD

关掉AD就是全部显示0

点评

我以前也用过汇编的,时间很久了。 我有个想法,你可以先算整数,不管毫伏。粗略看看准不准 如果准了,再把后边毫伏加上。这样可能比较容易查问题。  详情 回复 发表于 2017-9-24 20:35
 
 
 

回复

3196

帖子

0

TA的资源

纯净的硅(高级)

14
 
windirection 发表于 2017-9-24 20:30
关掉AD就是全部显示0

我以前也用过汇编的,时间很久了。
我有个想法,你可以先算整数,不管毫伏。粗略看看准不准
如果准了,再把后边毫伏加上。这样可能比较容易查问题。

点评

现在这个程序就是这样啊。整数误差也很大,可以显示0,1,2,3,4啊,后面的数都显示不出来了  详情 回复 发表于 2017-9-24 20:51
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

89

帖子

0

TA的资源

一粒金砂(中级)

15
 
chenbingjy 发表于 2017-9-24 20:35
我以前也用过汇编的,时间很久了。
我有个想法,你可以先算整数,不管毫伏。粗略看看准不准
如果准了, ...

现在这个程序就是这样啊。整数误差也很大,可以显示0,1,2,3,4啊,后面的数都显示不出来了

点评

整数误差大,你就得检查你的算法了。 你可以仿真吗?如果可以仿真的话,你可以人为的赋给AD一个值,这个值你是知道的。、 然后,用你这个计算的程序跑一下,如果和你预期的一致,那就说明是AD采样的问题。 否则  详情 回复 发表于 2017-9-24 20:56
 
 
 

回复

3196

帖子

0

TA的资源

纯净的硅(高级)

16
 
windirection 发表于 2017-9-24 20:51
现在这个程序就是这样啊。整数误差也很大,可以显示0,1,2,3,4啊,后面的数都显示不出来了

整数误差大,你就得检查你的算法了。
你可以仿真吗?如果可以仿真的话,你可以人为的赋给AD一个值,这个值你是知道的。、

然后,用你这个计算的程序跑一下,如果和你预期的一致,那就说明是AD采样的问题。
否则,就是你这段计算程序有错。

点评

不会仿真啊。  详情 回复 发表于 2017-9-24 21:04
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

89

帖子

0

TA的资源

一粒金砂(中级)

17
 
chenbingjy 发表于 2017-9-24 20:56
整数误差大,你就得检查你的算法了。
你可以仿真吗?如果可以仿真的话,你可以人为的赋给AD一个值,这个 ...

不会仿真啊。

点评

软仿真也不会吗?就是不用接硬件的仿真,用MPLAB就可以。  详情 回复 发表于 2017-9-24 21:10
 
 
 

回复

3196

帖子

0

TA的资源

纯净的硅(高级)

18
 

软仿真也不会吗?就是不用接硬件的仿真,用MPLAB就可以。

点评

[attachimg]322907[/attachimg]刚刚仿真好了,在电脑上可以运行出结果,就是不知道下载到板子里面会如何。就是修改了一下红颜色的那段程序。  详情 回复 发表于 2017-9-25 09:27
没有搞过,  详情 回复 发表于 2017-9-24 21:18
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

89

帖子

0

TA的资源

一粒金砂(中级)

19
 
chenbingjy 发表于 2017-9-24 21:10
软仿真也不会吗?就是不用接硬件的仿真,用MPLAB就可以。

没有搞过,

点评

我现在用的就是MPLAB 8.92  详情 回复 发表于 2017-9-24 21:18
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(中级)

20
 

我现在用的就是MPLAB 8.92

点评

不会吧。你搞单片机,不会仿真。那样调试起来就麻烦了。 其实也很简单,就是设断点,单步运行,观察变量的值等等这些。 我觉得你应该有所了解。  详情 回复 发表于 2017-9-24 21:21
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表