智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3772|回复: 4
打印 上一主题 下一主题

哪位大哥帮忙看一下这个AD采样程序哪里出问题了么

[复制链接]

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
127
威望
175
贡献
22
兑换币
0
注册时间
2008-5-18
在线时间
0 小时
跳转到指定楼层
1#
发表于 2008-5-18 23:15:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
<>小弟第一次参加这个比赛,一组的同伴也是一样,都没有经验,老师整天忙他的项目,也不来管我们,不过问了也不知道就是。。。</P><P>动作比较慢,还在搞AD采样部分</P><P>选用的是CMOS黑白摄像头,摄像头视频线接1881&nbsp; 引脚2,行同步接PT3,&nbsp; 场同步接PT1,利用中断采集信号</P><P>利用串口调试助手将AD转化后的值 直接发送至PC上显示</P><P>应该是程序出问题了,无论对着什么地方照,输出的16进制AD转化的值总是有斜线产生(没有将AD值进行2值化比较,总是每隔几个点就会输出00,0E什么的,如果进行2值化,能更明显的看到许多条从右上往左下方的斜线。。。</P><P>超不超频都有这样的情况产生(用示波器看摄像头输出的视频信号是非常好的,根本没有这种干扰</P><P>&nbsp;</P><P>下面是同学利用PE编写的程序,麻烦哪位大人帮忙找找看问题吧(我们这组都是学机械的,对电还有程序这一块几乎完全不擅长Orz。。。</P><P>void ini_sci(void) {<BR>&nbsp;<BR>&nbsp;SCI0BD= 0x9C;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 波特率设为9600,与串口调试助手相同<BR>&nbsp;SCI0CR1=0X00;<BR>&nbsp;SCI0CR2=0X0C;<BR>&nbsp;}<BR>&nbsp;void AD_Init(void) <BR>{&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; ATD0CTL2 = 0xC0;&nbsp;&nbsp; //AD上电 快速标志位清零顺序&nbsp; 每次读取结果寄存器自动清零<BR>&nbsp;&nbsp;&nbsp; ATD0CTL3 = 0x08;&nbsp;&nbsp; //转换序列为1&nbsp; <BR>&nbsp;&nbsp;&nbsp; ATD0CTL4 = 0x85;&nbsp; //8位精度 预分频为6&nbsp; 采样时间为2个A/D时钟周期 2M<BR>&nbsp;&nbsp;&nbsp; ATD0CTL5 = 0xa0;&nbsp; //右对齐&nbsp; <BR>&nbsp;&nbsp;&nbsp; ATD0DIEN=0x00;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp; </P><P>void main(void)<BR>{<BR>&nbsp;&nbsp; ini_sci();<BR>&nbsp;&nbsp; AD_Init();<BR>&nbsp; /*** Processor Expert internal initialization. DON&#39;T REMOVE THIS CODE!!! ***/<BR>&nbsp; PE_low_level_init();<BR>&nbsp; /*** End of Processor Expert internal initialization.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ***/</P><P>&nbsp;&nbsp; PWME_PWME5=0x01;<BR>&nbsp;&nbsp; EnableInterrupts;<BR>&nbsp; <BR>&nbsp; /* please make sure that you never leave this function */<BR>&nbsp;<BR>&nbsp; /*** Processor Expert end of main routine. DON&#39;T MODIFY THIS CODE!!! ***/<BR>&nbsp; for(;;){}<BR>}</P><P>&nbsp;</P><P>==========上面是初始化还有一些什么的,下面是终端程序============================================</P><P><BR>#include "Cpu.h"<BR>#include "Events.h"</P><P>#pragma CODE_SEG DEFAULT<BR>#define EnableInterrupts&nbsp;&nbsp; {__asm CLI;}<BR>/*<BR>** ===================================================================<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Event&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; Cap1_OnCapture (module Events)<BR>**<BR>**&nbsp;&nbsp;&nbsp;&nbsp; From bean&nbsp;&nbsp; :&nbsp; Cap1 [Capture]<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Description :<BR>**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This event is called on capturing of Timer/Counter actual<BR>**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value (only when the bean is enabled - &lt;"Enable"&gt; and the<BR>**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; events are enabled - &lt;"EnableEvent"&gt;.<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Parameters&nbsp; : None<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Returns&nbsp;&nbsp;&nbsp;&nbsp; : Nothing<BR>** ===================================================================<BR>*/ </P><P>int&nbsp; ccd_data[8];<BR>int ccd_data1[24][8];<BR>int i,r,m;</P><P><BR>int row_num=0;<BR>int row_10;</P><P>&nbsp;</P><P>&nbsp;</P><P>&nbsp; void tx_sci(int tx_d)<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(SCI0SR1_TC!=1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(SCI0SR1_TDRE!=1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SCI0DRL=(byte)tx_d;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>}</P><P>&nbsp;</P><P>&nbsp;<BR>/*<BR>** ===================================================================<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Event&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; AD1_OnEnd (module Events)<BR>**<BR>**&nbsp;&nbsp;&nbsp;&nbsp; From bean&nbsp;&nbsp; :&nbsp; AD1 [ADC]<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Description :<BR>**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This event is called after the measurement (which<BR>**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; consists of &lt;1 or more conversions&gt;) is/are finished.<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Parameters&nbsp; : None<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Returns&nbsp;&nbsp;&nbsp;&nbsp; : Nothing<BR>** ===================================================================<BR>*/</P><P>/*<BR>** ===================================================================<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Event&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; Cap2_OnCapture (module Events)<BR>**<BR>**&nbsp;&nbsp;&nbsp;&nbsp; From bean&nbsp;&nbsp; :&nbsp; Cap2 [Capture]<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Description :<BR>**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This event is called on capturing of Timer/Counter actual<BR>**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value (only when the bean is enabled - &lt;"Enable"&gt; and the<BR>**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; events are enabled - &lt;"EnableEvent"&gt;.<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Parameters&nbsp; : None<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Returns&nbsp;&nbsp;&nbsp;&nbsp; : Nothing<BR>** ===================================================================<BR>*/<BR>void Cap2_OnCapture(void)<BR>{&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //场同步信号,场中断接pt1&nbsp; </P><P>&nbsp;&nbsp;&nbsp;&nbsp; row_num=0;&nbsp;&nbsp;&nbsp; //行记数器清零<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; tx_sci(0x42);&nbsp;&nbsp; // 场中断来临后向串口发送42,以表示换场<BR>&nbsp; <BR>&nbsp;&nbsp;&nbsp; TIE_C1I=0X00;<BR>&nbsp;&nbsp;&nbsp; TIE_C3I=0X01;&nbsp;&nbsp;&nbsp; //关场中断,打开行中断<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;/* Write your code here ... */<BR>}</P><P>/*<BR>** ===================================================================<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Event&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; Cap4_OnCapture (module Events)<BR>**<BR>**&nbsp;&nbsp;&nbsp;&nbsp; From bean&nbsp;&nbsp; :&nbsp; Cap4 [Capture]<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Description :<BR>**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This event is called on capturing of Timer/Counter actual<BR>**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value (only when the bean is enabled - &lt;"Enable"&gt; and the<BR>**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; events are enabled - &lt;"EnableEvent"&gt;.<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Parameters&nbsp; : None<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Returns&nbsp;&nbsp;&nbsp;&nbsp; : Nothing<BR>** ===================================================================<BR>*/<BR>void Cap4_OnCapture(void)<BR>{&nbsp;&nbsp; //行同步信号,行中断接pt3<BR>&nbsp;&nbsp;&nbsp; </P><P>&nbsp;&nbsp; <BR>&nbsp;&nbsp; row_num++;<BR>&nbsp; <BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; if(row_num&gt;=30&amp;&amp;row_num&lt;=260)<BR>&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; row_10=row_num%10;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(row_10==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; r=row_num-30;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r=r/10;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0;i&lt;8;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //时钟没有超频,2M转换速度,每次转换采8个点<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(!ATD0STAT1_CCF0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m=(byte)ATD0DR0L;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //AD转换后的值直接发送至m,然后输出到串口<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // if(m&gt;0x30)&nbsp; m=0; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m=1; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tx_sci(m);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ccd_data<i>=m;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ccd_data1[r]<i>=m;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tx_sci(0x41);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //每换一行向串口发送41,表示换行<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(row_num&gt;260)<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIE_C3I=0X00;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIE_C1I=0X01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//开场中断,关行中断<BR>&nbsp;&nbsp;&nbsp;&nbsp; }</P><P>&nbsp;&nbsp;&nbsp;&nbsp; /* Write your code here ... */<BR>}</P><P>/*<BR>** ===================================================================<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Event&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp; AD1_OnEnd (module Events)<BR>**<BR>**&nbsp;&nbsp;&nbsp;&nbsp; From bean&nbsp;&nbsp; :&nbsp; AD1 [ADC]<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Description :<BR>**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This event is called after the measurement (which<BR>**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; consists of &lt;1 or more conversions&gt;) is/are finished.<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Parameters&nbsp; : None<BR>**&nbsp;&nbsp;&nbsp;&nbsp; Returns&nbsp;&nbsp;&nbsp;&nbsp; : Nothing<BR>** ===================================================================<BR>*/<BR>void AD1_OnEnd(void)<BR>{<BR>&nbsp; /* Write your code here ... */<BR>}</P><P>&nbsp;</P><P>&nbsp;</P><P>以上,感谢大家先了。。。<BR></P>

14

主题

929

帖子

1

精华

功勋会员

WJ

Rank: 10Rank: 10Rank: 10

积分
6304

特殊贡献奖章

威望
1456
贡献
4674
兑换币
17
注册时间
2008-4-6
在线时间
87 小时
2#
发表于 2008-5-19 16:49:04 | 只看该作者

Re:哪位大哥帮忙看一下这个AD采样程序哪里出问题了么

没搞过模拟设像头,不过感觉可能是行中断的时序不对.
回复 支持 反对

使用道具 举报

0

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
430
威望
316
贡献
84
兑换币
16
注册时间
2008-3-27
在线时间
15 小时
3#
发表于 2008-5-19 20:53:44 | 只看该作者

Re:哪位大哥帮忙看一下这个AD采样程序哪里出问题了么

呵呵,我们出的问题和你一样,程序大部分的思路也和你的差不错,也正在改进中!有时间加我QQ344497631 一起讨论!
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
127
威望
175
贡献
22
兑换币
0
注册时间
2008-5-18
在线时间
0 小时
4#
 楼主| 发表于 2008-5-20 21:04:30 | 只看该作者

Re:Re:哪位大哥帮忙看一下这个AD采样程序哪里出问题了么

<blockquote><img border=0 src=images/icon-quote.gif> <b>yangyang:</b><br>呵呵,我们出的问题和你一样,程序大部分的思路也和你的差不错,也正在改进中!有时间加我QQ344497631 一起讨论!</blockquote><BR><BR>问题很诡异,后来主要把程序AD转换不用0口换成其他口似乎图像就好多了<BR>但是请教了其他做这个的人<BR>他们的中断用的是IRQ,AD用我们小板的AD0口,结果图像出的也没问题。。。<BR><BR>后来在程序里加了一些清中断标志的语句,似乎图像基本能出来了<BR><BR>但是似乎采集行数只能采到140行而不是理论上的300行,不知道为什么<BR><BR>才多了每隔一定行数就会出现两到3行的场消影区。。。<BR><BR>
回复 支持 反对

使用道具 举报

14

主题

87

帖子

0

精华

高级会员

Rank: 4

积分
765
QQ
威望
480
贡献
107
兑换币
0
注册时间
2011-11-1
在线时间
89 小时
5#
发表于 2012-5-30 22:32:54 | 只看该作者
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-9 14:16 , Processed in 0.054193 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表