智能车制作

标题: 摄像头采集串口看的效果,求高手帮忙。。。 [打印本页]

作者: xhlove555    时间: 2011-4-14 10:37
标题: 摄像头采集串口看的效果,求高手帮忙。。。
求高手帮忙看下,为什么串口出来会是这个样子???
作者: xhlove555    时间: 2011-4-14 10:37
每行的开始都是这个样子,求高手帮忙,谢了
作者: nasri8hao    时间: 2011-4-14 12:35
新手,想问问串口怎么用呀!
作者: nasri8hao    时间: 2011-4-14 12:35
新手,想问问串口怎么用呀!
作者: jeremylt    时间: 2011-4-14 13:38
回复 4# nasri8hao


    串口?你是指SCI口?
   单片机上的PS0和PS1 对应R和T,再连电脑串口啊…
   楼主用的什么摄像头啊
作者: xhlove555    时间: 2011-4-14 13:57
回复 5# jeremylt


   还是用的6620呢
作者: nasri8hao    时间: 2011-4-14 15:21
回复 5# jeremylt


    那电脑串口是用什么连得呀,单片与电脑只有bdm连着的呀?这方面一点不懂,希望指点。拜谢......
作者: 狂野时速    时间: 2011-4-14 17:31
我的数据也很乱,估计是有噪吧,我们是直接读出来的没有放在SD卡里可能是传输的太慢了
作者: kayats    时间: 2011-4-15 02:57
好像怪兽...
作者: helibingbingo    时间: 2011-4-15 11:05
原本图像是什么样子的
作者: xhlove555    时间: 2011-4-15 12:14
回复 10# helibingbingo


    原来没有旁边的1,只有中间的,旁边全是0,能帮忙解释下么?
作者: jeremylt    时间: 2011-4-15 12:30
回复 7# nasri8hao


    嗯…你可以去买一根USB转串口线,一头是USB可以连接电脑,一头是9针串口…
  然后五针在上为第一排,四针在下为第二排,从左往右,第一排是1~5针
  用2针接PS1,3针接PS0,5针接单片机GND,其他六针不用管,就可以和电脑串口传输了
  我把初始化设置和发送接收数据函数一起给你吧,只要你是照我那么接的就可以用了
  电脑上要一个串口调试助手的,网上很容易下的
  COM口的话在【我的电脑】->【管理】->【设备管理器】 可以看到,选择相应的COM口就好了,原理和51的UART一样一样的
  下面是函数
  void uart_init(void){
        SCI0CR1 = 0x04;     //空闲 字符位计数开始于停止位后
        SCI0CR2 = 0x0c;     //设置接收发送器使能
        SCI0BDH = 0x01;     //波特率设置为9600
        SCI0BDL = 0x04;
}

void uart_SentChar(INT8U ch){         //发送数据
        while (!(SCI0SR1 & 0x80));
        SCI0DRL = ch;

}

INT8U uart_GetChar(void){           //接收数据
        while (!(SCI0SR1 & 0x20));
        return SCI0DRL;
}
作者: jeremylt    时间: 2011-4-15 12:33
我们也用的是OV6620啊
楼主的OV6620每场的行数都固定吗?我们这边的摄像头没场的行数竟然从 46~282行不等,很奇怪啊
楼主的二值化是直接设定一个阀值二值化了还是设定了阈值用用跳变检测的呀?
作者: nasri8hao    时间: 2011-4-15 13:16
回复 12# jeremylt


    太感谢了,这下明白了,真是活雷锋呀!!!!!
作者: nasri8hao    时间: 2011-4-15 13:18
回复 12# jeremylt


    要是想边跑边看数据,是不是要用无线或sd卡了
作者: jeremylt    时间: 2011-4-15 16:09
回复 15# nasri8hao


    活雷锋不敢当,我也只是略懂皮毛而已,能帮则帮
   跑的时候可以用无线吧,用个TI的射频单片机与s12用串口连起来就好了
   不过想要把所有的图像数据传出来应该是不可能的…
   因为SCI波特率是很有限的,即使设到最高… 一秒50帧*一帧30行*一行70个点*一个点10位数据得要1050‘000的波特率才能跟上…
   用SPI会快点,但估计也行不通吧,因为单片机采集数据处理数据也要时间啊
   用无线的只能传一些必要数据吧…
   SD卡系统结构很复杂,我前阵子看了些资料,准备尝试一下,但估计也处理不过来吧
   XS芯片貌似有内部的协处理器,如果那个可以用起来的话速度应该可以跟上吧,不过这方面资料缺缺啊,手头也没什么资料
   呵呵,大家一起努力哦,遇到什么问题一起交流下
作者: xhlove555    时间: 2011-4-15 18:31
回复 13# jeremylt


    我们每场采集的行数都是固定的,直接设定阈值二值化。。。。。唉,估计是程序问题。。。。
作者: nasri8hao    时间: 2011-4-15 19:43
回复 16# jeremylt


    那能不能把数据写在flash里面,在读到电脑上分析呢,flash虽然不够用,但只存某一弯道的数据进行单独分析,这样可以吗???
作者: jeremylt    时间: 2011-4-16 07:43
回复 17# xhlove555

   ………程序的问题?那楼主是怎样实现拍一张图片下来的呢?用串口传输一个特定的数字过去吗?
  单片机那边是怎么检测的?用串口中断程序?还是在while()循环里不停的检测?
  不过我想应该都没关系的吧?速度都应该很快啊,不至于行数变化的那么大…
  呵呵,请楼主帮忙看看我们的程序吧,在此万分感激!   
  下面是我的程序:(我是在while里判断的)
/************************************超频*****************************/
void SetBusCLK_40M(void)
{   
    CLKSEL=0X00;                                //disengage PLL to system
    PLLCTL_PLLON=1;                        //turn on PLL
    SYNR =0x40 | 0x04;  // SYNDIV + 1 = 5                     
    REFDV=0x80 | 0x01;  // REFDIV + 1 = 2
    POSTDIV=0x00;       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz;
    _asm(nop);          //BUS CLOCK=40M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));          //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;                        //engage PLL to system;
}
/***************************行场中断初始化************************************/
void vinterruptsinit(void)
{

      TSCR1=0x80;//TIMER 定时器使能
    TIE  =0x00;//禁止中断
    TCTL3=0x00;//EDGnB EDGnA 1表示上升沿, 2表示下降沿, 3表示任何沿      
    TCTL4=0x06;//通道0上升沿触发,通道1下降沿触发
    TIOS =0x00;//每一位对应通道的: 0输入捕捉,1输出比较
    //TIE_C0I=1;//中断使能
    //TIE_C1I=1;//中断使能

}
/************************场中断*************************/


#pragma CODE_SEG __NEAR_SEG NON_BANKED                                    
void interrupt 8 vIC2ISR(void) {
DisableInterrupts;
TFLG1_C0F=1;
if (flag3 == 0x66){
    flag3 = 0x33;
    row = 0;
    line = 0;      
    TIE_C1I=1; //使能行中断T1使能
   
}else if(flag3 == 0x33){
    flag3 = 0;
    flag2 = 0;
    flag1 = 1;
    flag4 = 0;
    TIE  =0x00;    //关闭两个中断T1,T0
    //byzn_Buffer1();  //二值化数组
    valve_Buffer1();
    uart_SentBuffer1();
}
EnableInterrupts;


}
#pragma CODE_SEG CODE_DEFAULT
                           

/************************行中断*************************/

#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 9 vIC1ISR(void)
{
    TFLG1_C1F=1;
    flag4 = 1;   
    row ++;
    line = 0;
    href ++;   
}
#pragma CODE_SEG CODE_DEFAULT

/************************主函数**************************/
void main(void) {
  /* put your own code here */
  INT8U ch,i;
  DisableInterrupts;
  SetBusCLK_40M();
  uart_init();
  vinterruptsinit();
  vIOPortInit();
  EnableInterrupts;
   
  while (1){
         
                                       i = 0;
                      if(flag1 == 1){       
                          DisableInterrupts;
                          TIOS =0x00;  //关闭场中断
                       EnableInterrupts;             
                          uart_SentChar(flag2);                                          
                                uart_SentChar(href/256);
                                uart_SentChar(href%256);
                                if(!(href == 0)){
                                    href = 0;                                   
                                }                                
                                 flag2 = uart_GetChar();                                
                                flag1 = 0;                    
                     }
                      if (flag2 == 0x55){  //如果上位机发送0x55指令,则初始化外部中断,并开始准备向串口传输数据;
                          TIE_C0I=1;            //使能场中断,在场中断中使能行中断
                          flag3 = 0x66;
                          flag1 = 1;
                           }else flag1 = 1;
                      while (flag2 == 0x55){
                          while (flag3 == 0x33){              //确定 行中断已经开启,并开始采集数据
                              while(flag4 == 1) {
                                  while(row <ROW_MAX+1 && line <LINE_MAX-1) {                                     
                                      Buffer1[row-1][line] = PORTB;
                                  line ++;
                                  }
                              }                       
                                                                  
                         }          
                     }                 
      }   
  /* please make sure that you never leave main */
  }
作者: jeremylt    时间: 2011-4-16 07:54
回复 18# nasri8hao


    呵呵,其实我没尝试过,也不知道呢…
  其实实践很重要,对吧,多实践实践,就能出真理的吧
  有机会我试试看…呵呵,最近在做一张魔兽地图,没怎么弄小车了…其实这个xs128,我也是前天才开始弄它的
  祝君可以成功
作者: nasri8hao    时间: 2011-4-16 12:16
回复 20# jeremylt


   好强呀!谢谢啊!
作者: helibingbingo    时间: 2011-4-16 13:23
我猜是你取的是两场图像,一场图像的上部,和另一场的下部,你看看把这幅图像上下调个个,这样图像是不是就对了
作者: 杨鹏    时间: 2011-4-16 16:17
明显的中间的数据是车头么,  你把车前的数据屏蔽掉  往远处采就好了  我以前也出现过那种情况  就是这样解决的  不知道你的怎么样
作者: songbingyu    时间: 2011-4-16 18:19
回复 7# nasri8hao


    max232电路吗,跟普通单片机一样
作者: 林典伟飞思卡尔    时间: 2011-4-16 18:28
2011飞思卡尔摄像头组交流群124532235,欢迎大家加入。。。
作者: 林典伟飞思卡尔    时间: 2011-4-16 18:28
2011飞思卡尔摄像头组交流群124532235,欢迎大家加入。。。
作者: 林典伟飞思卡尔    时间: 2011-4-16 18:28
2011飞思卡尔摄像头组交流群124532235,欢迎大家加入。。。
作者: 林典伟飞思卡尔    时间: 2011-4-16 18:28
2011飞思卡尔摄像头组交流群124532235,欢迎大家加入。。。
作者: 林典伟飞思卡尔    时间: 2011-4-16 18:28
2011飞思卡尔摄像头组交流群124532235,欢迎大家加入。。。
作者: beandy    时间: 2011-4-16 22:57
请问lz你的数据是用什么显示的???
作者: fengtian123    时间: 2011-4-17 14:03
看看
作者: kaikai08    时间: 2011-4-17 17:25
我的也是,该不会是摄像头的问题吧
作者: alex120    时间: 2011-4-18 11:49
看看!
作者: 小人物1988    时间: 2011-4-18 13:14
看看
作者: xhlove555    时间: 2011-4-18 18:01
回复 19# jeremylt


    我在这方面是新手,呵呵
作者: xhlove555    时间: 2011-4-18 18:01
回复 22# helibingbingo


    什么个意思???新手,呵呵
作者: xhlove555    时间: 2011-4-18 18:05
回复 23# 杨鹏


    请问下你们怎么解决的???谢谢
作者: 371274316    时间: 2011-4-18 18:55
这图像不错···
作者: fengtian123    时间: 2011-4-20 18:42
是不是因为反光的原因啊?
作者: oo7ak47666    时间: 2011-4-20 19:43
你给的信息太少了啊。
实际赛道是什么样的你也没说啊。
我只能凭我的猜测了。
你可能采的是一条直道,我对你的图做了下修改。

[attach]7073[/attach]
红色部分就是你原图的前几行,我觉得他应该在下面,
中间的那一簇“1”是赛道,由于你的摄像头是倒着放的,所以视场上面赛道要比下面的略宽一些,而且左右颠倒。
红色部分跑到上面去了,我猜测可能是你的同步性没有做好(是采集问题,还是发送问题要看你的具体情况了),
即红色部分应该是上一场图的结尾几行。
至于紫色由于不知道你的实际图像,所以有可能实际图像就是这样,那儿本来就是黑的。
若实际图像不是黑的,原因可能是这样,一部分可能是场消隐信号、一部分是可能因为阈值没设好,那里光线稍弱就被判断为了黑色。
作者: liu2010cq    时间: 2012-3-17 22:57
jeremylt 发表于 2011-4-15 12:30
回复 7# nasri8hao

楼主你说的XS128的PS1,PS0对应是TXD1,RTXD1还是RS232R0,RS232T0啊?
作者: 颓廢至极〇    时间: 2012-9-12 18:21
这个  原来图像不是这样的吗?可能已经差不多了
作者: 落叶归根    时间: 2013-6-22 12:52
jeremylt 发表于 2011-4-15 12:30
回复 7# nasri8hao

万分感谢,12楼太感谢了




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