智能车制作

标题: 摄像头模块A/D转换问题 [打印本页]

作者: lioas    时间: 2011-1-23 18:19
标题: 摄像头模块A/D转换问题
为什么我们在对摄像头传回的信号进行A/D转换的时候,输出的数字矩阵中的数都是90多的,而且不插A/D口也会传回相同的数据,这是怎么回事呢?
作者: 近水楼台    时间: 2011-1-25 11:35
你用的是片内的还是片外的A/D转换哦
作者: lioas    时间: 2011-1-25 13:45
回复 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;
}
这是部分代码,帮忙看看,谢谢大侠!
作者: MRB    时间: 2011-2-26 02:25
怎么column都是一个数的,都没变化的。。。
作者: lzwzdh    时间: 2011-2-26 11:53
可能是你的参考电压设置的有问题。
作者: jay2765133    时间: 2011-3-8 09:36
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;
}
作者: jay2765133    时间: 2011-3-8 09:37
看看这个有用么

作者: 吴铭鸿    时间: 2011-8-7 02:43
知道啦》》》
作者: rolcye    时间: 2011-8-7 13:08
哇噻,这个问题……
你们学校的高手一堆一堆的,干嘛还来问论坛上的菜鸟啊??浪费资源很可齿啊




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2