5744|36

186

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

求助!改了一个基于F5529launchpad的 采一个口输入电压做AD转换的程序,可是总有问... [复制链接]

本帖最后由 Ben讨厌苦咖啡 于 2015-3-23 15:15 编辑

这个程序的功能就是从一个AD的口输入一个电压值,然后经过AD转换后由串口输出,本来是F149上面的程序,已经成功运行并且功能已经实现了,我现在有个F5529的板,移植过来也改了好些地方,应该是没什么问题了,编译也没有问题,可是总是实现不了功能 求助大神!!!


我把程序的详细部分贴上来 大家帮忙看看!谢谢了! 转换程序2.zip (406.13 KB, 下载次数: 19)

首先是主程序,while(1)里面是个输出的循环,输出到串口是一个数字的值和一个真实的模拟电压输入值。





接下来是AD中断函数,将采到的4次的值分别存入到result【】数组里面 然后用average做平均,最后将average输出到while(1)里面的两个计算的函数。





下面是我AD模块的设置,还有两个做转换的函数





好吧,那么问题来了,现在我用5529的板子仿真,可以进到AD中断,并且读取ADC12MEM6,可以看到采了值,但是,average却算不出来。没有值

而且用来存储采到数据的两个数组buffer1和buffer2都不对。。。。。。



这些函数的功能应改没问题,因为在149的板子上完全都实现了。可是不知道为什么在5529的板子上却不对,求大神帮忙啊!




最新回复

刚看了下那个芯片可以做的“心电传感器AD8232,主要完成心电信号前端放大差分和滤波等功能,输出的信号可以让MSP430FR5969采集”,可以看下这位坛友的帖子https://bbs.eeworld.com.cn/thread-453920-1-1.html   详情 回复 发表于 2015-4-7 20:45
 
点赞 关注

回复
举报

2549

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
看了下,那个中断里的循环,for语句进去没?

点评

那个for循环貌似进不去~~~额~~~~我也很无语 稍等哈~我传一下~  详情 回复 发表于 2015-3-23 14:39
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
你把完整的5529工程传上来吧
 
 
 

回复

613

帖子

2

TA的资源

纯净的硅(初级)

4
 
搞成文档附件,我用我的5529跑下看.

点评

已经传上来了~求帮忙看看~  详情 回复 发表于 2015-3-23 14:43
 
个人签名我是一头搞电子的猪,猪是一种好色的动物,猪八戒就是代表.       
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

5
 
数码小叶 发表于 2015-3-23 11:09
看了下,那个中断里的循环,for语句进去没?



那个for循环貌似进不去~~~额~~~~我也很无语 稍等哈~我传一下~
 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

6
 
数码小叶 发表于 2015-3-23 11:15
你把完整的5529工程传上来吧

转换程序2.zip (406.13 KB, 下载次数: 15)


 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

7
 
long521 发表于 2015-3-23 14:08
搞成文档附件,我用我的5529跑下看.


已经传上来了~求帮忙看看~

 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

8
 
你不是已经读出ADC的数据了吗?还说没有读错。
那么单步调试一下,看看哪一步偏离了预期不就得了?我看你断点也设置好了,已经开始跟踪调试了吧?
感觉是tcnt这个变量出问题了。因为你那要求tcnt==1的时候执行LPM1_EXIT语句,而在此之前执行了tcnt++。所以如果tcnt偏离了0或者1,那么很有可能将一直无法退出LPM1模式。

另外,ADC12属于高速外设,会不会是因为中断频率太高了?考虑在完成一轮采样转换之后暂停采样,直到数据处理完毕再重新采样。

还有,关于Hex2Dec函数,给出下面的优化算法:
  1. ptr[0]=Hex_Val/1000%10;
  2. ptr[1]=Hex_Val/100%10;
  3. ptr[2]=Hex_Val/10%10;
  4. ptr[3]=Hex_Val%10;
复制代码

点评

貌似程序就跑飞了 执行到断点处的时候第一次会执行完中断 会停下来 然后再单步运行的话就跑飞了。。。。。。 可是这个程序是从F149的一个AD的程序改过来的~~~之前在149的板子上面都已经完全没问题~~采到的数  详情 回复 发表于 2015-3-23 21:10
单步调试到断点处 按理说应该将四次采到的数值存入到result里面 但是程序只存一次 然后再运行就错误了。。。。。。  详情 回复 发表于 2015-3-23 20:57
感谢您的帮助,我按您说的再改一下程序试试~~  详情 回复 发表于 2015-3-23 15:05
 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

9
 
qiushenghua 发表于 2015-3-23 14:51
你不是已经读出ADC的数据了吗?还说没有读错。
那么单步调试一下,看看哪一步偏离了预期不就得了?我看你断点也设置好了,已经开始跟踪调试了吧?
感觉是tcnt这个变量出问题了。因为你那要求tcnt==1的时候执行LPM1_EXIT语句,而在此之前执行了tcnt++。所以如果tcnt偏离了0或者1,那么很有可能将一直无法退出LPM1模式。

另外,ADC12属于高速外设,会不会是因为中断频率太高了?考虑在完成一轮采样转换之后暂停采样,直到数据处理完毕再重新采样。

还有,关于Hex2Dec函数,给出下面的优化算法:



感谢您的帮助,我按您说的再改一下程序试试~~
 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

10
 
qiushenghua 发表于 2015-3-23 14:51
你不是已经读出ADC的数据了吗?还说没有读错。
那么单步调试一下,看看哪一步偏离了预期不就得了?我看你断点也设置好了,已经开始跟踪调试了吧?
感觉是tcnt这个变量出问题了。因为你那要求tcnt==1的时候执行LPM1_EXIT语句,而在此之前执行了tcnt++。所以如果tcnt偏离了0或者1,那么很有可能将一直无法退出LPM1模式。

另外,ADC12属于高速外设,会不会是因为中断频率太高了?考虑在完成一轮采样转换之后暂停采样,直到数据处理完毕再重新采样。

还有,关于Hex2Dec函数,给出下面的优化算法:

单步调试到断点处 按理说应该将四次采到的数值存入到result里面 但是程序只存一次 然后再运行就错误了。。。。。。
 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

11
 
qiushenghua 发表于 2015-3-23 14:51
你不是已经读出ADC的数据了吗?还说没有读错。
那么单步调试一下,看看哪一步偏离了预期不就得了?我看你断点也设置好了,已经开始跟踪调试了吧?
感觉是tcnt这个变量出问题了。因为你那要求tcnt==1的时候执行LPM1_EXIT语句,而在此之前执行了tcnt++。所以如果tcnt偏离了0或者1,那么很有可能将一直无法退出LPM1模式。

另外,ADC12属于高速外设,会不会是因为中断频率太高了?考虑在完成一轮采样转换之后暂停采样,直到数据处理完毕再重新采样。

还有,关于Hex2Dec函数,给出下面的优化算法:

貌似程序就跑飞了 执行到断点处的时候第一次会执行完中断 会停下来 然后再单步运行的话就跑飞了。。。。。。



可是这个程序是从F149的一个AD的程序改过来的~~~之前在149的板子上面都已经完全没问题~~采到的数据和程序都没问题 能跑~~~来这个板子上就不行了。。。。。。
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

12
 
你确定你的ADC配置对了?开启的是连续采样模式?
然后再运行就错误了——分析判断很有可能中断结束之后系统未退出低功耗模式,但是ADC采样已经停止了,没有第二次进入中断服务。故仿真器直接报错。

点评

配置没问题 单通道连续采样。。。。。。呃。。。。。。。 那如果是您说的这种情况的话 如何解决呢?  详情 回复 发表于 2015-3-24 08:36
 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

13
 
qiushenghua 发表于 2015-3-24 05:49
你确定你的ADC配置对了?开启的是连续采样模式?
然后再运行就错误了——分析判断很有可能中断结束之后系统未退出低功耗模式,但是ADC采样已经停止了,没有第二次进入中断服务。故仿真器直接报错。

配置没问题 单通道连续采样。。。。。。呃。。。。。。。

那如果是您说的这种情况的话 如何解决呢?

点评

中断服务里最后增加ADCInit函数即可,实际上直接再次开启ADC采样就够了。 如果没记错的话是下面这句: ADC12CTL0|=ADC12SC  详情 回复 发表于 2015-3-24 09:22
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

14
 
Ben讨厌苦咖啡 发表于 2015-3-24 08:36
配置没问题 单通道连续采样。。。。。。呃。。。。。。。

那如果是您说的这种情况的话 如何解决呢?

中断服务里最后增加ADCInit函数即可,实际上直接再次开启ADC采样就够了。
如果没记错的话是下面这句:


ADC12CTL0|=ADC12SC

点评

我貌似找到原因啦~是ADC12IFG那里没有设置~~~设置了之后就没问题了~中断那里就没问题了~~~~~ 不过整个程序现在又有问题了~就是buffer1和buffer2采不到。。。。。。看到的都是error 呃。。。。。。 [attach  详情 回复 发表于 2015-3-24 09:50
 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

15
 
qiushenghua 发表于 2015-3-24 09:22
中断服务里最后增加ADCInit函数即可,实际上直接再次开启ADC采样就够了。
如果没记错的话是下面这句:


ADC12CTL0|=ADC12SC

我貌似找到原因啦~是ADC12IFG那里没有设置~~~设置了之后就没问题了~中断那里就没问题了~~~~~


不过整个程序现在又有问题了~就是buffer1和buffer2采不到。。。。。。看到的都是error   呃。。。。。。


点评

你没执行到唤醒MCU语句的地方,buffer还没赋值,怎么可能有数据呢?  详情 回复 发表于 2015-3-24 19:51
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

16
 
Ben讨厌苦咖啡 发表于 2015-3-24 09:50
我貌似找到原因啦~是ADC12IFG那里没有设置~~~设置了之后就没问题了~中断那里就没问题了~~~~~


不过整个程序现在又有问题了~就是buffer1和buffer2采不到。。。。。。看到的都是error   呃。。。。。。

你没执行到唤醒MCU语句的地方,buffer还没赋值,怎么可能有数据呢?

点评

唤醒MCU的语句???这个我不太懂了诶。。。。。。请您详细解释下~~~~~  详情 回复 发表于 2015-3-26 09:54
 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

17
 
qiushenghua 发表于 2015-3-24 19:51
你没执行到唤醒MCU语句的地方,buffer还没赋值,怎么可能有数据呢?

唤醒MCU的语句???这个我不太懂了诶。。。。。。请您详细解释下~~~~~
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

18
 
就是那句LPM1_EXIT
退出低功耗1模式,唤醒单片机继续执行后面的操作。
你搞清楚程序执行的顺序没有?

点评

退出了低功耗模式1之后 应该是跳出了中断吧?跳出中断后继续执行main函数里面的while(1)吧~~~~~ 但是我在之前149上跑程序能行的时候貌似是一直在这个中断里面循环 单步执行就没有进到while(1)里面~  详情 回复 发表于 2015-3-26 15:00
 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

19
 
qiushenghua 发表于 2015-3-26 13:21
就是那句LPM1_EXIT
退出低功耗1模式,唤醒单片机继续执行后面的操作。
你搞清楚程序执行的顺序没有?

退出了低功耗模式1之后 应该是跳出了中断吧?跳出中断后继续执行main函数里面的while(1)吧~~~~~



但是我在之前149上跑程序能行的时候貌似是一直在这个中断里面循环 单步执行就没有进到while(1)里面~



这个地方我也有点莫名~~~
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

20
 
中断是从休眠模式唤醒进入的。只要你在中断函数中不执行LPM1_EXIT,那么就不会退出休眠状态,中断完成之后继续进入休眠模式。直到下一次中断到来。
所以你的程序一直在中断服务里循环。

点评

现在有几个问题 1.我把tcnt这个变量改成1之后 debug程序 程序就直接从断点那里开始执行了 而如果把tcnt改的大一些 程序就从main函数那里开始 特别奇怪 而且 给results数组赋值时 先从results【1】开始 而不是resul  详情 回复 发表于 2015-3-27 09:42
可是中断里面最后又LPM_EXIT这个语句呀?那么就退出低功耗模式了 应该跳出中断了吧? 可是为啥一直在中断里跳不出呢还是?  详情 回复 发表于 2015-3-27 08:22
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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