智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1819|回复: 3
打印 上一主题 下一主题

我的红树伟业ccd采集的数据不正常啊

[复制链接]

1

主题

6

帖子

0

精华

注册会员

Rank: 2

积分
124
威望
70
贡献
36
兑换币
32
注册时间
2014-3-7
在线时间
9 小时
毕业学校
襄阳小学
跳转到指定楼层
1#
发表于 2014-4-16 08:46:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
正常位置采集,看不到黑线


吧黑线放到镜头前二厘米

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

1

主题

6

帖子

0

精华

注册会员

Rank: 2

积分
124
威望
70
贡献
36
兑换币
32
注册时间
2014-3-7
在线时间
9 小时
毕业学校
襄阳小学
2#
 楼主| 发表于 2014-4-16 08:51:48 | 只看该作者
我用的代码是拉普拉德的例程,只改了一点
/*
* 测试硬件平台:  Mc9s12xs128
* 版权所有:      北京拉普兰德电子技术有限公司
* 网络销售:      
* 公司门户:     :/
*
* 说明:    本工程基于Mc9s12xs128 开源底层开发包开发,
*         
*
* 用途:                拉普兰德TSL1401线性CCD模块使用例程
*                     
* 引脚连接:
*                      PORTA_PA0   --SI
*                      PORTA_PA1   --CLK
*                      AN00        --AO
*
* 串口显示:利用MC9S12XS128的SCI0作为串口
*                      PS1        --TXD
*                      PS0        --RXD
*
* 参数设置:
*                      PRINT_AD    --设置串口打印数据的类型,二值量或模拟量   
*                      THRESHOLD   --设置模拟量转二值量的阈值   
*                      WINDOW_WIDTH--设置串口打印采集数据的宽度   
*
*/
#include <hidef.h>            /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

#define TSL1401_SI(x)   (PORTA_PA0=(x))
#define TSL1401_CLK(x)  (PORTA_PA1=(x))

#define PRINT_AD        (1)       //设置串口打印数据类型,0:打印二值化数据,1:打印AD值
#define THRESHOLD       (100)     //设置二值化阈值
#define WINDOW_WIDTH    (128)     //设置串口打印的像素个数,最大128,最小0

void IO_Init(void);
void ADC_Init(void);
void UART0_Init(void);
void SetBusClock(void);
uint ADCValue(uchar channel);
void TSL1401_GetLine(uchar *pixel);
void UART0_SendByte(byte ch);
void UART0_SendPacket(byte *pBuf,int pBuf_Length);
void delay();
void DelayMs(int time);

//全局变量声明
uchar gPixel[128] = {0};

void main(void)
{

  uchar i;
  
        EnableInterrupts;
        //初始化系统时钟,使其配置在32Mhz
  SetBusClock();
  //初始化IO
  IO_Init();
  //初始化ADC
  ADC_Init();
  //初始化UART
  UART0_Init();
  
  for(;;)
  {
  
    _FEED_COP(); /* feeds the dog */
   
    //获得像素值
    TSL1401_GetLine(gPixel);
   
    //打印输出
    for(i=(64-WINDOW_WIDTH/2); i<(64+WINDOW_WIDTH/2); i++)
    {
#if(PRINT_AD==1)          //串口发送AD值,可用于线性CCD调试助手
      if(gPixel[i]==0xFF)
        gPixel[i] = 0xFE; //遇到FF用FE替换即可
      UART0_SendByte(gPixel[i]);
#else                     //串口发送而值量,方便用串口调试
      if(gPixel[i]>THRESHOLD)
        UART0_SendByte(1);
      else
        UART0_SendByte(0);
#endif     
    }
    UART0_SendByte(0xFF);
    DelayMs(100);
  }
  
}


//---------------------------------------------------------------------
// 函数功能:配置单片机锁相环,使其工作在32Mhz
// 形式参数:  无
// 函数返回值:无   
//---------------------------------------------------------------------
void SetBusClock(void)
{   
  CLKSEL=0x00;        //disengage PLL to system
  PLLCTL_PLLON=1;     //turn on PLL
  SYNR =0x40 | 0x03;  //VCOFRQ[7:6];SYNDIV[5:0];
  REFDV=0x80 | 0x01;  //REFFRQ[7:6];REFDIV[5:0]
  POSTDIV=0x00;
                      //fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1);fPLL= fVCO/(2 × POSTDIV);BUS= fPLL/2
                      //if POSTDIV=0, fPLL= fVCO
  _asm(nop);          //BUS CLOCK=32M
  _asm(nop);
  while(!(CRGFLG_LOCK==1));  //when pll is steady ,then use it;
  CLKSEL_PLLSEL =1;          //engage PLL to system;
}

//---------------------------------------------------------------------
// 函数功能:控制
// 形式参数:  无
// 函数返回值:无   
//---------------------------------------------------------------------
void IO_Init(void)
{

  DDRA_DDRA0 = 1; //配置IO为输出
  DDRA_DDRA1 = 1; //配置IO为输出
  PORTA_PA0  = 0; //配置IO的数据为0
  PORTA_PA1  = 0; //配置IO的数据为0
}

//---------------------------------------------------------------------
// 函数功能:UART0_Init初始化
// 形式参数:  无
// 函数返回值:无   
//---------------------------------------------------------------------
void UART0_Init(void)
{
  SCI0CR1 = 0x00;
  SCI0CR2 = 0x2C;     //接收中断使能,发送接收使能
  SCI0BD  = 208;     //波特率配置成38400
                      //When IREN = 0 then
                      //SCI baud rate = SCI bus clock / (16 x SBR[12:0])
}

//---------------------------------------------------------------------
// 函数功能:SCI0发送一个字节数据
// 形式参数:  byte ch:发送的一个字节数据
// 函数返回值:无   
//---------------------------------------------------------------------
void UART0_SendByte(byte ch)
{
  while(!(SCI0SR1&0x80));
  SCI0DRL = ch;
}

//---------------------------------------------------------------------
// 函数功能:SCI0发送字符串数据
// 形式参数:   byte *pBuff     发送缓冲区
//              int Length 发送字节的长度
// 函数返回值:无   
//---------------------------------------------------------------------
void UART0_SendPacket(byte *pBuf,int pBuf_Length)
{
  int i;
  for(i=0;i<pBuf_Length;i++)
  {
    while(!(SCI0SR1&0x80));
    SCI0DRL=*(pBuf+i);
  }
}


//---------------------------------------------------------------------
//函 数 名:ADCInit                                                      
//功    能:A/D转换初始化,设置A/D转换时钟频率为1MHz                     
//参    数:无                                                           
//返    回:无                                                           
//---------------------------------------------------------------------
void ADC_Init(void)
{

  //ATD0CTL4: SMP2=1,SMP1=1,SMP0=1,PRS4=0,PRS3=1,PRS2=1,PRS1=1,PRS0=1
  ATD0CTL4 = 0b11101111; //设置采样时间和频率,fATDCLK=fBUS/(2 ×(PRS + 1))
  
  //ATD0CTL3: DJM=1,S8C=0,S4C=0,S2C=0,S1C=1,FIFO=0,FRZ1=0,FRZ0=0
  ATD0CTL3 = 0b10001000; //采样结果右对齐,每个序列的转换个数为1
   
  //ATD0CTL0: ??=0,??=0,??=0,??=0,WRAP3=1,WRAP2=1,WRAP1=1,WRAP0=1
  ATD0CTL0 = 0b00000001; //AD循环采集到AN1后即可  
  
  //ATD0CTL1: ETRIGSEL=0,SRES1=0,SRES0=0,SMP_DIS=0,ETRIGCH3=1,ETRIGCH2=1
  //,ETRIGCH1=1,ETRIGCH0=1
  ATD0CTL1 = 0b00001111; //8位分辨率,采样前不卸载内部采样电容!⑼獠看シ⑹保?≡裢ǖ?5   
  
  //ATD0CTL2: ??=0,AFFC=1,ICLKSTP=0,ETRIGLE=0,ETRIGP=0,ETRIGE=0,ASCIE=0,
  //ACMPIE=0
  ATD0CTL2 = 0b01000000; //下降沿触发,不接受外部信号,禁用ATD比较中断请求      

}


//---------------------------------------------------------------------
//函 数 名:ADCValue                                                     
//功    能:1路A/D转换函数,获取通道channel的A/D转换结果                  
//参    数:channel = 通道号                                             
//返    回:该通道的12位A/D转换结果                                      
//---------------------------------------------------------------------
uint ADCValue(uchar channel)
{
  //暂存A/D转换的结果
  uint temp;                        
        ATD0CTL5 = channel;
        //取A/D转换结果                                 
  while(!ATD0STAT0_SCF);
  temp = ATD0DR0;
        return  temp;
}


//----------------------------------------------------------------------
//函 数 名:延时函数 delay(), DelayMs()                                                     
//功    能:延时函数                                                              
//返    回:无                                                                                       
//----------------------------------------------------------------------
void delay()
{
  unsigned int i;
  for(i=0;i<8;i++)
  {
    asm("nop");
  }
}

void DelayMs(int time)
{
  short x,y;
  for(x=0;x<4106;x++){
    for(y=time;y>0;y--){
    }
  }
}

//----------------------------------------------------------------------
//函 数 名:TSL1401_GetLine                                                      
//功    能:获得AD采样像素                                       
//参    数:*pixel  获得的像素值                          
//返    回:无                                                                                       
//----------------------------------------------------------------------
void TSL1401_GetLine(uchar *pixel)
{
  uchar i;                                                   
  
  //开始SI
  TSL1401_SI(0) ;
  TSL1401_CLK(0);
  delay();                //20time
  TSL1401_SI(1);
  delay();
  TSL1401_CLK(1);
  delay();
  TSL1401_SI(0);
  delay();
  //采集第1个点
  //AD配置成为8位精度,所以这里获得的是一个字节数据

  TSL1401_CLK(0);      pixel[0] = (uchar)ADCValue(0);
  
  //采集第2~128个点
  for(i=1; i<128; i++)
  {
    delay();
    TSL1401_CLK(1);
    delay();
  
    TSL1401_CLK(0);     pixel[i] = (uchar)ADCValue(0);
  }
  
  //发送第129个clk
   delay();
   TSL1401_CLK(1);
   delay();
   TSL1401_CLK(0);
   delay();
}


/********************************************************************/
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

注册会员

Rank: 2

积分
124
威望
70
贡献
36
兑换币
32
注册时间
2014-3-7
在线时间
9 小时
毕业学校
襄阳小学
3#
 楼主| 发表于 2014-4-16 08:59:12 | 只看该作者
上边的图片错了,把黑线方到镜头前

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

29

主题

777

帖子

0

精华

常驻嘉宾

简单的算法+完美的机械结构

Rank: 8Rank: 8

积分
4688

优秀会员奖章活跃会员奖章在线王奖章论坛元老奖章

QQ
威望
2219
贡献
1497
兑换币
1390
注册时间
2013-11-8
在线时间
486 小时
4#
发表于 2014-4-16 15:16:49 | 只看该作者
用红树伟业的上位机看图像,看图像有问题没
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 08:17 , Processed in 0.059775 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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