智能车制作
标题:
摄像头模块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