智能车制作
标题:
怎样计算ccd摄像头的采集点数
[打印本页]
作者:
duanjuan
时间:
2009-3-11 08:54
标题:
怎样计算ccd摄像头的采集点数
作者:
cys179
时间:
2009-3-11 17:54
计算采集点数?
你要怎么计算啊???
估计你可能还没有搞清楚摄像头的时序问题!
点数在你采集的时候是要用你的程序来试的,这和你的程序的效率有很大关系。c估计无法计算。只有用实际的采集来的看了。汇编估计可以,你好好在看看摄像头的时序吧。我刚开始的时候也想到过你的这个问题。
cys179@gmail.com
可以练习我。
补充内容 (2015-4-23 09:36):
真人游戏|足球篮球|时时彩| 六合投注|
网络赚钱去SO娱乐城:顶级信用,提现百分百即时到账SO.CC
作者:
whut_wj
时间:
2009-3-11 19:28
配合示波器看,
作者:
边荒
时间:
2009-3-11 20:47
C:\Documents and Settings\You chuanjiang\桌面\test0.7.25
作者:
边荒
时间:
2009-3-11 20:48
弄错了,呵呵
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
unsigned char imagin[40][70];
unsigned char guiji[40];
unsigned int sd_z[4]={450,500,550,600},z_sd,w_sd;
unsigned int sd_w[4]={280,300,310,320};
unsigned char jsd_z[4]={30,20,15,5},z_jsd,w_jsd;
unsigned char jsd_w[2]={30,20};
char i=0,j=0,k=0,complete=2;
unsigned char go,speed,cnt,flag_j,cnt2=210,cnt3=0;
int pingjun;
unsigned char *p;
unsigned int *addr;
//*******************图像分析函数****************************
void fenxi(void) {
unsigned char ii,jj,kk,buf2=0,buf3=3,sum=0;
char buf;
int sum1=0,sum2=0;
//cnt2=0;
/* for(ii=10;ii<60;ii++) {
sum1=0;
kk=0;
for(jj=20;jj<40;jj++) {
if((imagin[jj][ii]<55)&&(imagin[jj][ii-1]<55)){
kk++;
sum1+=jj;
}
}
if(kk)
hx[ii]=(char)(sum1/kk);
else hx[ii]=0;
}
buf2=0;
kk=0;
for(ii=11;ii<60;ii++) {
if(hx[ii]){
//if(buf3>10)
//buf3=0;
buf=hx[ii]-hx[ii-1];
if((buf<2)&&(buf>(-2))&&(buf3>2))
kk++;
else{
if(kk>4) {
buf3=0;
kk=0;
if(kk<20)
buf2++;
}
}
//else if(kk>8)
}
else {
if(kk>4) {
buf3=0;
buf2++;
}
buf3++;
kk=0;
}
}
if(kk>4)
buf2++;
if(buf2==2){
PORTK|=0x04;
cnt3++;
if(cnt3>0){
cnt3=0;
if((cnt2>200)&&go){
cnt2=0;
flag_q++;
}
if(flag_q>1){
PWMDTY0=0;
speed=0;
go=0;
PORTK&=0xfe;
flag_q=0;
}
}
}
else {
PORTK&=0xfb;
cnt3=0;
}*/
jj=39;
kk=0;
there:p=&imagin[jj][0];
for(ii=0;ii<70;ii++){
if(*(p++)<50) {
kk++;
}
else {
if(kk>13) {
pingjun=0;
return;
}
else if(kk>3)break;
else
kk=0;
}
}
if(kk<2){
if(jj>35)jj--;
else return;
goto there;
}
guiji[jj]=ii-1;
buf=ii-7;
if(buf<0)buf=0;
else if(buf>56)buf=56;
kk=0;
buf3=jj-2;
jj--;
for(;jj>18;jj--){
sum=0;
p=&imagin[jj][buf];
kk=0;
buf2=0;
for(ii=0;ii<14;ii++){
if((*(p++)<60)&&(*p<60)) {
kk++;
sum+=ii;
}
}
if(kk>0) {
guiji[jj]=sum/kk+buf;
}
else {
if(guiji[jj+1]>65){
pingjun=140;
flag_j=1;
goto here2;
}
else if(guiji[jj+1]<10){
pingjun=-140;
flag_j=1;
goto here2;
}
if(jj<38)
guiji[jj]=2*guiji[jj+1]-guiji[jj+2];
else guiji[jj]=guiji[jj+1];
}
//if(guiji[jj]>(guiji[jj+1]+1))
buf=guiji[jj]-7; //
//else if((guiji[jj]+1)<guiji[jj+1])
// buf=guiji[jj]-13;
// else buf=guiji[jj]-7;
if(buf<0)buf=0;
else if(buf>56)buf=56;
}
if(buf>50)buf=50;
for(jj=18;jj>0;jj--){
buf2=0;
p=&imagin[jj][buf];
kk=0;
for(ii=0;ii<20;ii++){
if(*p<65) {
kk++;
}
else {
if(kk>0)break;
else{
buf2=ii;
kk=0;
}
}
p++;
}
if(kk<1) {
guiji[jj]=guiji[jj+1];
continue;
}
else{
buf2+=buf;
buf+=ii;
if(buf<guiji[jj+1])
guiji[jj]=buf2;
else
guiji[jj]=buf;
}
buf=guiji[jj]-10;
if(buf<0)buf=0;
else if(buf>50)buf=50;
}
//求平均偏移量//
flag_j=0;
for(jj=3;jj<7;jj++){
if((guiji[jj]>60)||(guiji[jj]<10))
flag_j=1;
}
for(jj=8;jj<12;jj++){
sum1+=guiji[jj];
if((guiji[jj]>60)||(guiji[jj]<10))
flag_j=1;
}
sum1/=4;
for(jj=27;jj<30;jj++){
sum2+=guiji[jj];
}
sum2/=3;
pingjun=5*(sum1-35)-2*(sum1-sum2);
//pingjun=(sum2-35)*4;
if(pingjun>140)pingjun=140;
if(pingjun<(-140))pingjun=-140;
here2:
if(flag_j)PORTK|=0x08;
else PORTK&=0xf7;
}
//*****eeprom初始化*************************
void init_eeprom(void) {
ECLKDIV=0x15;
ECNFG=0;
while(ECLKDIV_EDIVLD==0);
}
//*****写eeprom*************************
char write_eeprom(unsigned int dat) {
while(ESTAT_CBEIF==0);
*addr=dat;
ECMD=0x60;
ESTAT=0x80;
while(ESTAT_CCIF==0);
if(ESTAT_ACCERR)return 0;
return 1;
}
//*****PWM初始化*************************
void init_pwm(void) {
PWME=0;
PWMPRCLK=0x53;
PWMSCLA=25;
PWMSCLB=50;
PWMCLK=0x03;
PWMDTY0=0;
PWMPER0=100;
PWMDTY67=1503;
PWMPER67=20000;
PWMPOL=0x80;
PWMCAE=0x00;
PWMCTL=0x80;
PWME=0x81;
}
//****************************************
void main(void) {
char flag=0;
int buf1;
INITEE = 0x61; /* lock EEPROM block to end at 0x0fff */
CLKSEL &= 0x7F;
REFDV = 1;
SYNR = 3;
while(!(CRGFLG&0x08));
CLKSEL |= 0x80;
init_eeprom();
addr=(unsigned int *)0x6002;
DDRK|=0x2f; //portk的低四位做能为输出
TSCR1=0x80;
TSCR2=0x83;
PACTL=0x40;
TCNT=0x00;
TIOS=0x00;
TCTL4=0x55;
TIE=0x06;
DLYCT=0x00;
INTCR=0xC0; //VSYNC下降沿触发
DDRH&=0xfe;
PPSH=0x01; //HREF上升沿触发
PIEH=0x01;
DDRA=0x00;
SCI0CR2=0x0c;
SCI0BDH=0x00;
SCI0BDL=104; //波特率=19200 208;
DDRM=0x00; //拨码开关设定为输入
PERM=0xff; //上下拉使能
PPSM=0x00; //上拉
init_pwm();
//if(*addr==1){
go=1;
PORTK|=0x01;
//}
buf1=PTM;
z_sd=sd_z[buf1&0x03];
buf1>>=2;
z_jsd=jsd_z[buf1&0x03];
buf1>>=2;
w_sd=sd_w[buf1&0x03];
buf1>>=1;
w_jsd=jsd_w[buf1&0x01];
//PLLCTL=0xf3;
//COPCTL=0x05;
EnableInterrupts;
for(;;) {
//ARMCOP=0X55;
if(complete==1) {
DisableInterrupts;
if(flag==1){
for(i=0;i<40;i++){ //////
while(!(SCI0SR1&0x80));
SCI0DRL=0;
for(j=0;j<70;j++) {
while(!(SCI0SR1&0x80));
SCI0DRL=imagin[i][j];
}
}
while(!(SCI0SR1&0x80));
SCI0DRL=0;
while(!(SCI0SR1&0x80));
SCI0DRL=0;
}
//ARMCOP=0XAA;
fenxi();
buf1=1503-pingjun;
PWMDTY67=buf1;
EnableInterrupts;
flag=0;
complete=2;
}
if(SCI0SR1&0x20) {
if(SCI0DRL==48) {
flag=1;
complete=2;
}
}
}
}
//*********************************************
#pragma CODE_SEG NON_BANKED
void interrupt VSYNC_ISR(void) //场信号中断
{
DisableInterrupts; //关中断
if(complete==2) {
i=0;
complete=0;
k=0;
p=&imagin[0][0];
}
}
void interrupt HREF_PH0(void) { //行信号中断
unsigned char jj;
DisableInterrupts; //关中断
if(complete==0) {
if(k>6) {
for(jj=0;jj<70;jj++){
k=0;
*(p++)= PORTA;
}
i++;
if(i>39) complete=1;
}
k++;
}
PIFH=0x01;
}
//******************************************************
void interrupt Timer(void) { //时间中断,调速
unsigned int buf;
int such;
DisableInterrupts; //关中断
TCNT=0;
buf=PACN32;
PACN32=0;
if(cnt2<210)cnt2++;
if(cnt)
cnt--;
else {
PORTK^=0x02;
if(go==1){
if(flag_j==0){
PORTK&=0xf7;
such=buf-z_sd;
if(such<0){
such/=z_jsd;
}
else such/=30;
}
else {
PORTK|=0x08;
if(buf>420){
cnt=4;
PORTK|=0x20;
PWMDTY0=65;
goto out;
}
if(buf>400){
cnt=4;
PORTK|=0x20;
PWMDTY0=60;
goto out;
}
if(buf>370){
cnt=3;
PORTK|=0x20;
PWMDTY0=60;
goto out;
}
such=buf-w_sd;
if(such>0)
such/=30;
else{
such/=w_jsd;
}
}
PORTK&=0xdf;
if(speed>such)speed-=such;
else speed=0;
if(speed>95)speed=95;
PWMDTY0=speed;
}
}
out: TFLG2=0x80;
}
//******************************************************
void interrupt IC1_ISR(void) {
DisableInterrupts; //关中断 C
TFLG1=0x02;
PORTK|=0x01;
go=1;
while(write_eeprom(1)==0);
}
void interrupt IC2_ISR(void) {
DisableInterrupts; //关中断 B
TFLG1=0x04;
PORTK&=0xfe;
go=0;
PWMDTY0=0;
speed=0;
while(write_eeprom(0)==0);
}试试这个程序
作者:
cys179
时间:
2009-3-14 15:40
大哥也不给个注释。把人往死里看啊
作者:
rocky
时间:
2009-3-15 18:09
好好了解ccd的工作原理后,你就会了,最直观的方法就是用示波器看时序图,强烈建议
作者:
xiaopang1989
时间:
2009-4-6 16:24
这程序可以直接仿真吧,看了一下,感觉有的循环太罗嗦,可以简练点的。
作者:
草竹
时间:
2009-4-6 20:31
大哥也不给个注释。把人往死里看啊
cys179 发表于 2009-3-14 15:40
作者:
sail0695
时间:
2009-5-15 10:23
太长了把。。。。。。。。。。
作者:
sail0695
时间:
2009-5-15 10:24
太长了把。。。。。。。。。。
作者:
sail0695
时间:
2009-5-15 10:24
太长了把。。。。。。。。。。
作者:
Woods
时间:
2009-5-16 21:42
看死了。。。。。。
作者:
tf1988712
时间:
2009-5-23 20:54
根据你自己设定的采集多少行 与列来进行计算
作者:
XGimi
时间:
2010-2-5 09:11
直接借助BDM看就行
作者:
wszf1988723
时间:
2010-2-12 12:08
这怎么看呀,不烦死啊,都不加点注释的
作者:
pig04
时间:
2010-2-25 00:13
咋办,晕了
作者:
zhizhi
时间:
2010-2-25 21:18
看不懂啊,有待加强
作者:
zhwbiao123
时间:
2010-2-26 12:04
根据系统频率
再结合摄像头输出数据速度!
作者:
zhwbiao123
时间:
2010-2-26 12:05
要计算,其实往届论文上都有
把采集到的数据发到PC上看
就可以看出来的
作者:
zouyf12
时间:
2010-2-26 13:13
对于模拟的摄像头,
你就弄一个大小为100的数组(一般40M时最多采70个点),然后全部把数组单元里数值初始化为255,当检测到一个行同步时,就开始根据AD转换完成标识位进行采集,采到下一个行同步为止,然后就看这个数组里已经不是255的单元是多少个。这样就是你一行的采集数了。 由于采集模拟摄像头的速度不仅和AD速度有关,还和搬运程序有关,所以测试程序和你最终的采集程序最好不要有太大的差别,不如,测试结果不准
作者:
573377313
时间:
2010-3-6 16:37
学习一下
作者:
dkmy
时间:
2010-3-12 16:14
还是用示波器看 (用黑线对着摄像头晃你就知道怎么回事了) 弄清楚时序再写程序吧
貌似往届的论文里就有啊~~~
作者:
wgseu
时间:
2010-3-18 20:34
作者:
lnwxlwc
时间:
2010-3-25 17:06
多看看 混点分
作者:
sailming
时间:
2010-3-25 22:11
看来好的程序员都是不屑于写注释的啊!!!
作者:
pengzhen_lin
时间:
2010-3-25 22:43
有点长,和乱
作者:
huachou
时间:
2010-4-20 19:06
就这个程序咋看啊
作者:
sunnylee
时间:
2010-4-23 13:32
作者:
明年今日
时间:
2010-4-30 16:20
太长了把。。。。。。。。。。
作者:
明年今日
时间:
2010-4-30 16:20
太长了把。。。。。。。。。。
作者:
liurui199011
时间:
2010-5-27 23:50
ca
作者:
lifenothing
时间:
2011-1-21 16:01
看懵了,太长了点吧
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2