智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3186|回复: 6
打印 上一主题 下一主题

摄像头采集黑线和白线得到的数据没什么区别??、求指教

[复制链接]

15

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1608
威望
436
贡献
1080
兑换币
30
注册时间
2012-3-3
在线时间
46 小时
跳转到指定楼层
1#
发表于 2012-3-15 19:28:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
15贡献
硬件方面经过检查没有问题,应该是程序错了,我用的是内部AD(具体是AD1引脚,8位精度)现在能采集数据,就是数据不对,估计是初始化,或者端口哪边错了,求指导。。。。

#include <MC9S12XS128.h> #include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include "CRP.h"

    int column;
   int row;
   unsigned int str[columnnum][row_max];
  
   void ATD0Init(void){ ATD0CTL1=0x01;   //AD 转换控制器1 初始设定,具体功能查表(比如 采样前不放电)                        ATD0CTL2=0x00;  
ATD0CTL3=0x80;                     
ATD0CTL4=0x80;  
ATD0CTL5=0x21;    //连续转         换,1通道转换,             }
                                
   void PLL_Init(void)       //初始化  
    {                                  //BUS-CLOCK=PLL-CLOCK/2=32M   
     REFDV = 31;  // set the REFDV register 16M*2*(3+1)/(1+1)=64M   
     SYNR = 63;    // set the SYNR register to give us a 64 MHz PLL-clock.            
     asm nop    // nops required for PLL stability.   
     asm nop     
     asm nop   
    asm nop   
     while ((CRGFLG&0x08)==0); // wait here till the PLL is locked.   
      CLKSEL|=0x80;             // switch the bus clock to the PLL.}

       void SCI_Init(void)
      {
         SCI0CR1=0x04;     //允许快速检测
         SCI0CR2=0x2C;    //允许RDRF或者 OR置1 产生SCI中断请求,允许发送,接收
         SCI0BDH=0x00;    //波特率控制寄存器 SCI0BDL=0xd0;
      }



        void Init(void)
         {
             PLL_Init();                     
             SCI_Init();  
             ATD0Init();
         }


    void main(void)      //主函数
{  

PPSH=0x00;    //H口对应的下降沿信号将使PIFH寄存器相应位置1
PIEH=0x01;    //H口引脚0中断使能
PIEJ=0x00;    //J口中断关闭  原来是关闭0口的

Init();
EnableInterrupts;
for(;;);
}




extern int column;      
extern int row;
extern unsigned int str[columnnum][row_max];   //定义一个36行,24列的数组

#pragma CODE_SEG NON_BANKED    //中断入口
void interrupt 24 PJI(void)
{                                 //行中断
  int i,j;

  PIFJ=0x01;                  //PIFJ为J口中断标志位寄存器,为1清除标志位,为0无效   
for(i=0; i<16; i++)
   {
    asm nop;
    }


  if (column%6==0&&column<276&&column>=60)   //行循环
  {
  for(row=0; row<24 ;row++)             //列循环
    {
    while (!ATD0STAT0_SCF);    //SCF ---转换序列完成标志,0 表示转换序列没有完成,1 转换序列完成
    str[(column-60)/6][row]=ATD0DR1;// AD转换结果寄存器
    ATD0STAT0_SCF=1;                //图像采集完成

    }


  }

  column++;
  if(column>=275)
{
  PIEJ=0x00;

  for(i=0; i<36; i++)
  {
   for(j=0; j<24 ;j++)
    {
      while(!(SCI0SR1&0x40));
      SCI0DRL= (unsigned char)str[j];
    }
  }
  PIEH=0x01;            //H口中断使能寄存器,为0关中断
}  
}

void interrupt 25 PHI(void)  //场中断入口
{
PIFH=0x01;            //H口标志位清除
EnableInterrupts;
PIEJ=0x01;            //允许行中断
PPSJ=0x00;            //J口极性选择寄存器某一位为零时j口对应引脚
                       //下降沿将使PIFJ寄存器相应位置1
column=0;
}                                                         







44

主题

1485

帖子

0

精华

版主

早川队队长

Rank: 9Rank: 9Rank: 9

积分
20210

资源大师奖章论坛骨干奖章推广达人奖章论坛元老奖章活跃会员奖章优秀会员奖章在线王奖章优秀版主奖章

QQ
威望
5864
贡献
12698
兑换币
630
注册时间
2009-8-18
在线时间
824 小时
2#
发表于 2012-3-15 20:25:18 | 只看该作者
示波器看看摄像头信号对不对,会不会连接线有短路
或者你测试一下AD对不对,给个模拟电压转换一下试一试
每一行前面有一点点是行消隐,要考虑延时消掉,场消隐也是要通过判断采样行搞掉
回复

使用道具 举报

15

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1608
威望
436
贡献
1080
兑换币
30
注册时间
2012-3-3
在线时间
46 小时
3#
 楼主| 发表于 2012-3-15 20:59:34 | 只看该作者
sonwendi 发表于 2012-3-15 20:25
示波器看看摄像头信号对不对,会不会连接线有短路
或者你测试一下AD对不对,给个模拟电压转换一下试一试
...

今天特地用电位器试了一下AD,转换过来没问题,数据出了点误差之外没问题。行消隐和场消隐虽然会影响数据了,但是对于黑白线转换过来的数据影响不大啊。现在感觉黑白没区别。。真郁闷。。
回复

使用道具 举报

0

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
102
威望
150
贡献
42
兑换币
0
注册时间
2012-2-21
在线时间
12 小时
毕业学校
没毕业……
4#
发表于 2012-3-26 22:24:01 | 只看该作者
这个问题解决了吗???我也出现这个问题了
回复

使用道具 举报

15

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1608
威望
436
贡献
1080
兑换币
30
注册时间
2012-3-3
在线时间
46 小时
5#
 楼主| 发表于 2012-3-27 11:29:31 | 只看该作者
新手学做车 发表于 2012-3-26 22:24
这个问题解决了吗???我也出现这个问题了

描述一下你的问题
回复

使用道具 举报

0

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
102
威望
150
贡献
42
兑换币
0
注册时间
2012-2-21
在线时间
12 小时
毕业学校
没毕业……
6#
发表于 2012-3-27 16:27:34 | 只看该作者
夏天C的微笑 发表于 2012-3-27 11:29
描述一下你的问题

用串口软件看到的图像一场内都是一个值,用的是CCD摄像头,用5110做外部AD转换
回复

使用道具 举报

15

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1608
威望
436
贡献
1080
兑换币
30
注册时间
2012-3-3
在线时间
46 小时
7#
 楼主| 发表于 2012-3-27 16:48:50 | 只看该作者
新手学做车 发表于 2012-3-27 16:27
用串口软件看到的图像一场内都是一个值,用的是CCD摄像头,用5110做外部AD转换

你把行和列的值改小点,比如说 就采5行10列。。数据少了容易分析。我们也遇到过出来一系列一样的值

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-31 05:54 , Processed in 0.049280 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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