智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4081|回复: 8
打印 上一主题 下一主题

摄像头模块A/D转换问题

[复制链接]

3

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
QQ
威望
239
贡献
30
兑换币
0
注册时间
2010-11-27
在线时间
3 小时
跳转到指定楼层
1#
发表于 2011-1-23 18:19:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么我们在对摄像头传回的信号进行A/D转换的时候,输出的数字矩阵中的数都是90多的,而且不插A/D口也会传回相同的数据,这是怎么回事呢?

7

主题

261

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4370

优秀会员奖章

威望
1034
贡献
3110
兑换币
232
注册时间
2010-10-3
在线时间
113 小时
2#
发表于 2011-1-25 11:35:51 | 只看该作者
你用的是片内的还是片外的A/D转换哦
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
QQ
威望
239
贡献
30
兑换币
0
注册时间
2010-11-27
在线时间
3 小时
3#
 楼主| 发表于 2011-1-25 13:45:56 | 只看该作者
回复 2# 近水楼台


    片内的A/D,//信号线接到AD00,行中断接到PORTT6,场中断接到PORTT7口

//锁相环设定
void PLL_Init(void)   
{                     //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
  CLKSEL=0X00; //PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)
  PLLCTL=0xe1;
  SYNR=2;
  REFDV=1;
  PLLCTL=0X60;
  asm  NOP;//空操作,进行简单的延时,等待锁相环的相应
  asm  NOP;
  asm  NOP;
  while((CRGFLG&0X08)==0); //时钟校正同步
  CLKSEL=0X80;
}
//AD设定
void AD_Init(void)
{
  ATD0CTL1=0x00;//禁止外部触发,
  ATD0CTL2=0x40;//标志位快速清零,中断禁止
  ATD0CTL3=0x88;//右对齐无符号.转换序列长度为1,No FIFO模式,Freeze模式下继续转换?
  ATD0CTL4=0x00;//4AD采样周期,ATDClock=[BusClock*0.5]/[PRS+1]  ; PRS=0, divider=12 ?
  ATD0CTL5=0xa0;//特殊通道禁止,单通道采样,扫描模式连续采样,ch AN0
  ATD0DIEN=0x00;//禁止数字输入
}

//compsite output行中断例程
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 14  PORTT6_ISR(void)
{   
  byte i, tem;

  DisableInterrupts;
  PORTB = 0xc3;  
  TFLG1_C6F = 1;
  ++ c;

  if(c%M || c<100 || c>400)
  {
  
    EnableInterrupts;
    return ;
  }
  for(i=0;i<ROW&&column<COLUMN;++i)  
  {   
    while(!ATD0STAT2_CCF0)
      ;   
    image[column] = ATD0DR0;
  }

  ++ column;
  EnableInterrupts;
}
这是部分代码,帮忙看看,谢谢大侠!
回复 支持 反对

使用道具 举报

3

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
936
QQ
威望
336
贡献
184
兑换币
0
注册时间
2009-10-8
在线时间
208 小时
4#
发表于 2011-2-26 02:25:10 | 只看该作者
怎么column都是一个数的,都没变化的。。。
回复 支持 反对

使用道具 举报

3

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
418
QQ
威望
250
贡献
162
兑换币
0
注册时间
2011-2-11
在线时间
3 小时
5#
发表于 2011-2-26 11:53:38 | 只看该作者
可能是你的参考电压设置的有问题。
回复 支持 反对

使用道具 举报

1

主题

123

帖子

0

精华

高级会员

Rank: 4

积分
526
QQ
威望
369
贡献
113
兑换币
6
注册时间
2010-4-7
在线时间
22 小时
6#
发表于 2011-3-8 09:36:50 | 只看该作者
void vADInit(void)//AD 转换初始化程序
{
//ATD1 设置
//上电,标志位快速清零,忽略外部触发,执行一次停止,中断禁止。
ATD1CTL2 = (ATD1CTL2_AFFC_MASK | ATD1CTL2_ADPU_MASK);
//转换序列长度为1,FIFO 模式,Freeze 模式下继续转换。|ATD0CTL3_FIFO_MASK
ATD1CTL3 = (ATD1CTL3_S1C_MASK);
//8 位精度,2AD 采样周期,采样长度8。
//ATDClock=[BusClock*0.5]/[PRS+1] ; PRS=15, divider=32
ATD1CTL4 =(ATD1CTL4_SRES8_MASK|ATD1CTL4_PRS0_MASK);
// 右对齐无符号, 扫描模式连续采样, 单通道采样// 多通道采样
|ATD0CTL5_MULT_MASK。
ATD1CTL5 = (ATD1CTL5_DJM_MASK|ATD1CTL5_SCAN_MASK);
//禁止数字输入缓冲
ATD1DIEN=0x00;
}
ATD1 的0 通道用于AD 转换
//当前采样图像的行和列。
unsigned int ui_SampleRow=0,ui_SampleColumn=0;
//图像数据缓存
unsigned char uca_Buffer1[IMAGE_ROW][IMAGE_COLUMN];
unsigned char uca_Buffer2[IMAGE_ROW][IMAGE_COLUMN];
//指向当前采集数据采样缓存首地址的指针
unsigned char *puca_BufferSample=&uca_Buffer1[0][0];
//指向当前处理数据采样缓存首地址的指针
unsigned char *puca_BufferProcess=&uca_Buffer2[0][0];
//用于图像采集和处理交换缓存。(注意:在每次交换指针后保证puca_BufferTemp 与
puca_BufferSample 相同)
unsigned char *puca_BufferTemp=&uca_Buffer1[0][0];
#pragma CODE_SEG NON_BANKED
//输入捕捉2 通道中断函数,行同步,用于数据采集。
void interrupt 10 vIC2ISR(void)
{
unsigned char ucTemp;
unsigned char *pucTemp;
TFLG1_C2F=1;
if(ui_SampleRow>=SAMP_ROW_START&&ui_SampleRow<SAMP_ROW_MAX)
{
if(ui_SampleRow%SAMP_ROW_SEP==0)
{
for(ui_SampleColumn=0;ui_SampleColumn<SAMP_COL_MAX;ui_SampleColumn++)
{
while(!ATD1STAT1_CCF0);
if(ui_SampleColumn>=SAMP_COL_START)
{
if(ui_SampleColumn%SAMP_COL_SEP==0)
{
pucTemp=puca_BufferSample
+((ui_SampleRow-
SAMP_ROW_START)/SAMP_ROW_SEP)*IMAGE_COLUMN
+(ui_SampleColumn-SAMP_COL_START)/SAMP_COL_SEP;
*pucTemp=ATD1DR0L;
}
}
}
}
}
ucTemp=ATD1DR0L;
ui_SampleRow++; //采样行坐标加一。
}
//输入捕捉1 通道中断函数,场同步,交换缓存以及图像处理和模型车控制。
void interrupt 9 vIC1ISR(void)
{
TFLG1_C1F=1;
ui_SampleRow=0; //把采样行坐标清零。
ui_SampleColumn=0;
//交换图像采集和处理缓存
puca_BufferSample=puca_BufferProcess;
puca_BufferProcess=puca_BufferTemp;
puca_BufferTemp=puca_BufferSample;
//系统时间加一。
ul_SystemTime+=1;
//开中断,允许行信号中断进行采样。
EnableInterrupts;
if(uc_CarState==STATE_START)
{
// PORTB_BIT1=1;
//分析图像,获取路径参数,根据路径参数控制模型车。。
vImageProcess();
//根据路径参数控制模型车。
vAutoControl();
// PORTB_BIT1=0;
}
回复 支持 反对

使用道具 举报

1

主题

123

帖子

0

精华

高级会员

Rank: 4

积分
526
QQ
威望
369
贡献
113
兑换币
6
注册时间
2010-4-7
在线时间
22 小时
7#
发表于 2011-3-8 09:37:07 | 只看该作者
看看这个有用么
回复 支持 反对

使用道具 举报

1

主题

136

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1532
威望
912
贡献
366
兑换币
114
注册时间
2011-8-3
在线时间
127 小时
8#
发表于 2011-8-7 02:43:35 | 只看该作者
知道啦》》》
回复 支持 反对

使用道具 举报

4

主题

273

帖子

0

精华

金牌会员

NO

Rank: 6Rank: 6

积分
1511
QQ
威望
532
贡献
721
兑换币
0
注册时间
2010-3-27
在线时间
129 小时
9#
发表于 2011-8-7 13:08:45 | 只看该作者
哇噻,这个问题……
你们学校的高手一堆一堆的,干嘛还来问论坛上的菜鸟啊??浪费资源很可齿啊
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 19:30 , Processed in 0.053161 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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