智能车制作
标题:
采集到的数据每隔十几个点就有灰度值较低的出现?
[打印本页]
作者:
rong
时间:
2009-6-17 08:12
标题:
采集到的数据每隔十几个点就有灰度值较低的出现?
我用的是CMOA摄像头,用串口调试助手显示采集到数组,很奇怪的是每隔13或14个点就有几个灰度值低的点,有一行采集到的数据如下:
178 168 168 179 175 205 205 192
0 0 10
170 170 170 181 171 173 173 176 197 209 209 60
0 0 11
160 169 169 174 173 179 179 185 207 207 204
10 10 10
100 165 179 179 182 175 175 179 173 205 205 200
0 12 12
155 168 168 176 163 174 174 182 197 209 209 49
0 13 13
183 187 187 209 209 209
14 12
89 89 173 171 170 170 170 180 180 176 210 205 205
0 13
164 164 169 176 176 181 173
其他行的数据也都差不多,不知道为什么,麻烦大家看看,谢谢了!
作者:
albertmf
时间:
2009-6-17 09:05
发程序上来
作者:
rong
时间:
2009-6-17 15:46
下面的分别是初始化和采集程序,麻烦了,谢谢!
void ATD0_init(void) //AD转换模块初始化
{ int i;
ATD0CTL2=0X80; /*AD模块上电 手动清除转换完成位 无等待模式 中断禁止 禁止外部触发*/
for(i=0;i<100;i++);
ATD0CTL3=0X08; /*每序列长度为1 无FIFO转换结果放在相应的寄存器中 冷冻状态下继续工作*/
ATD0CTL4=0X85; //八位精度 采样时间:2个时钟时间,12倍分频2MHz
ATD0CTL5=0XA0; //结果寄存器数据对齐方式 右对齐 无符号 连续队列转换 单通道 通道0
ATD0CTL5_SCAN=1;
ATD0DIEN=0X00; //当作为模拟量输入时禁止数字输入
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 8 Port0_interrupt(void) //行中断
{ int i;
s_row++;
if((s_row>40)&&(s_row%5==0))
{
for(i=0;i<=250;i++); //为图像信号滞后行同步信号时间 需根据时钟具体设置
for(i=0;i<100;i++){
while(!ATD0STAT0_SCF);
signal[row][i]=ATD0DR0L;
ATD0STAT0_SCF=1;
}
row++;
}
if(row>15) {
frameover=1;
s_row=0;
row=0;
TIE=0X00;
}
}
下面的是主函数中的显示函数
while(PORTA_BIT0==1&&frameover==0)
TIE=0X01;
if(frameover==1){
for(i=0;i<15;i++) {
for(j=0;j<100;j++)
printp("%d ",signal[i][j]) ;
printp("d \n");
}
TIE=0X01;
frameover==0;
}
作者:
rong
时间:
2009-6-18 21:01
不知道是不是摄像头问题,还是采集时序不对?会不会是信号噪声,采集信号就是这样?
作者:
albertmf
时间:
2009-6-18 23:34
for(i=0;i<=250;i++); //为图像信号滞后行同步信号时间 需根据时钟具体设置
for(i=0;i<100;i++){
这句怎么回事?
还有把你的printp 也发上来,估计那里也有问题
作者:
whut_wj
时间:
2009-6-19 09:04
首先保证串口不会乱发数据,建议先在RAM里看,不要动不动就发一串数据到PC。
作者:
benny
时间:
2009-11-28 16:31
?
作者:
longslr
时间:
2011-5-4 17:15
回复
1#
rong
麻烦问一下 你的问题解决了没?
我也出现了同样的问题
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2