智能车制作

 找回密码
 注册

扫一扫,访问微社区

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

【醒目求助】CCD到采集程序有问题,进度一直卡着。求大神拯救。

[复制链接]

8

主题

43

帖子

0

精华

高级会员

Rank: 4

积分
738
威望
406
贡献
194
兑换币
249
注册时间
2013-2-2
在线时间
69 小时
跳转到指定楼层
1#
发表于 2013-5-16 15:59:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
买的龙丘的CCD,然后用他们的测试程序和开发板做测试,采集到的数据变化幅度几乎为零。检测不到黑线。救命啊
程序如下,救命。。。
/********************************************
龙丘MC9S12XS多功能开发板--大家玩版本
Designed by Chiu Sir
E-mail:chiusir@yahoo.cn
软件版本:V1.1
最后更新:2012年10月31日
相关信息参考下列地址:
网站:  http://www.lqist.cn
淘宝店:http://shop36265907.taobao.com
------------------------------------
Code Warrior 5.1
Target : MC9S12XS128
Crystal: 16.000Mhz
busclock:32.000MHz
pllclock:64.000MHz  
============================================
TSL1401接线定义:
------------------------------------
单片机管脚 模块/芯片管脚
PORTB_PB0  CLK
PORTB_PB1  SI
PTAD_AD0   AO
============================================
LCD接线定义:
------------------------------------
单片机管脚 定义名称 LCD管脚
PORTA_PA4  LCD_SDA  DB7
PORTA_PA3  LCD_SCL  DB6
PORTA_PA2  LCD_CD          A0
PORTA_PA1  LCD_RST  RST
PORTA_PA0  LCD_CS   CS
============================================
TSL1401线性CCD测试步骤:
1.下载程序到开发板
2.插上液晶屏
3.接好TSL1401模块接线
4.复位即可看到屏幕显示
5.手动挡住镜头或者放摄像头到黑白线前,就可以看
  到液晶上黑色线条的宽度。
*********************************************/  

#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#include "LQ12864.h"
#include "LQprintp.h"
#include <stdio.h>

#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
extern const byte longqiu96x64[768];

byte ADV[128]={0,0};         //声明数组,用于存放采集的线性数值
word LCDD[128]={0,0};        //转换为LCD显示的数值
#define TSL_SI  PORTB_PB1    //定义线性传感器的端口 SI
#define TSL_CLK PORTB_PB0    //定义线性传感器的端口 CLK

//#define USEUART            //如果用户有大家玩开发板不选择这个宏定义,
                             //不用串口输出,否则液晶刷新太慢了

//短暂的延时
void Dly_us(void)
{
   int ii;   
   for(ii=0;ii<20;ii++); //32M
   //for(ii=0;ii<100;ii++); //64M      
}
//较长延时
void Dly_ms(int ms)
{
   int ii,jj;
   if (ms<1) ms=1;
   for(ii=0;ii<ms;ii++)
     for(jj=0;jj<2670;jj++);    //busclk:32MHz--1ms
     //for(jj=0;jj<5340;jj++);    //busclk:64MHz--1ms         
}
void SetBusCLK_32M(void)
{   
    CLKSEL=0X00;                                // disengage PLL to system
    PLLCTL_PLLON=1;                        // turn on PLL
    SYNR =0x40 | 0x03;  // pllclock=2*osc*(1+SYNR)/(1+REFDV)=64MHz;                     
    REFDV=0x80 | 0x01;
    POSTDIV=0x00;  
    _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 SetBusCLK_64M(void)
{   
    CLKSEL=0X00;                                //disengage PLL to system
    PLLCTL_PLLON=1;                        //turn on PLL
    SYNR =0xc0 | 0x07;                        
    REFDV=0x80 | 0x01;
    POSTDIV=0x00;       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=128MHz;
    _asm(nop);          //BUS CLOCK=64M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));          //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;                        //engage PLL to system;
}
//-----------------------------------------------------  
void AD_Init(void)
{  
  ATD0CTL1=0x00;   //7:1-外部触发,65:00-8位精度,4:放电,3210:ch
  ATD0CTL2=0x40;   //禁止外部触发, 中断禁止   
  ATD0CTL3=0xa0;   //右对齐无符号,每次转换4个序列, No FIFO, Freeze模式下继续转   
  ATD0CTL4=0x01;   //765:采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1]
  ATD0CTL5=0x30;   //6:0特殊通道禁止,5:1连续转换 ,4:1多通道轮流采样
  ATD0DIEN=0x00;   //禁止数字输入
}

void RD_TSL(void)
{
  byte i=0,tslp=0;
  
  TSL_CLK=1;//起始电平高
  TSL_SI=0; //起始电平低
  Dly_us(); //合理的延时
      
  TSL_SI=1; //上升沿
  TSL_CLK=0;//下降沿
  Dly_us(); //合理延时
      
  TSL_CLK=1;//上升沿
  TSL_SI=0; //下降沿
  Dly_us(); //合理延时      
  for(i=0;i<128;i++)
  {
    TSL_CLK=0;//下降沿   
    Dly_us(); //合理延时
    while(!ATD0STAT0_SCF);//等待转换结束
    ADV[tslp]=ATD0DR0L;  //AD采集
    ++tslp;
    TSL_CLK=1;//上升沿
    Dly_us(); //合理延时   
  }  
}
//单行显示
void SHOW_TSL8(void)
{   
  byte i=0,maxv=0,minv=0xff;
  word evv=0,tslp=0;
  char txt[16]="";   
  
  for(i=0;i<128;i++)
  {
    evv+=ADV;           
  }
  evv=evv/128;
  #ifdef USEUART
    printp("\n\n128 CCD data:");
  #endif
  for(i=0;i<128;i++)
  {
    #ifdef USEUART
      if(!(i%16)) printp("\n");  //每16个数据显示一行  
      printp("%02x ",ADV);      
      Dly_ms(1);
    #endif
    if(minv>ADV)  minv=ADV;
    if(maxv<ADV)  maxv=ADV;               
  }
  #ifdef USEUART
    printp("\nMax:0x%02x\n",maxv);
  #endif
  sprintf(txt,"Max:%03d",maxv);
  LCD_P6x8Str(31,4,txt);
  
  #ifdef USEUART
    printp("Evv:0x%02x\n",evv);
  #endif
  sprintf(txt,"Evv:%03d",evv);
  LCD_P6x8Str(31,5,txt);
  
  #ifdef USEUART
    printp("Min:0x%02x\n",minv);
  #endif
  sprintf(txt,"Min:%03d",minv);
  LCD_P6x8Str(31,6,txt);
  
  LCD_Set_Pos(0,7);   
  for(i=0;i<128;i++)
  {
    if(ADV< evv-5)  tslp=0xfe;      
    else tslp=0x80;      
    LCD_WrDat(tslp);           
  }  
}
void main(void)
{
  /* put your own code here */
  byte i=0;   
  
  SetBusCLK_32M();  //总线初始化
  uart_init();      //串口初始化 19200,8,n,1
  //SetBusCLK_64M();  //总线初始化   
  DisableInterrupts;//关闭中断
  AD_Init();        //AD初始化
  DDRA = 0xff;      //IO口初始化
  PORTA= 0x00;      //IO口初始化
  DDRB = 0xff;      //IO口初始化
  PORTB= 0xff;      //IO口初始化
  LCD_Init();       //LCD初始化              
  Draw_LQLogo();    //显示LOGO
  LCD_P6x8Str(16,7,"chiusir@yahoo.cn");  //显示字符串
  Dly_ms(500);                           //延时
  LCD_CLS();                             //清屏
  LCD_Print(36,0,"龙丘科技");            //显示汉字
  LCD_Print(31,2,"智能车CCD");           //显示混合字符串     
  Dly_ms(1000);   
  for(;;)
  {
     RD_TSL();   //读取线性传感器的数值
     SHOW_TSL8(); //液晶显示读取的数值
     //Dly_ms(10); //根据需要延时
     if(!(++i%10)) PORTB_PB7=~ PORTB_PB7;   //每循环10次,LED反转一次
  }
  /* please make sure that you never leave this function */
}

// ----------------------

0

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
威望
121
贡献
72
兑换币
82
注册时间
2012-12-10
在线时间
52 小时
毕业学校
bj
2#
发表于 2013-5-16 20:11:19 | 只看该作者
全部东西都是 卖家的,但功能实现不了,肯定是找卖家技术支持啊
回复 支持 反对

使用道具 举报

30

主题

585

帖子

1

精华

等待验证会员

积分
-8838
威望
-9931
贡献
77
兑换币
46
注册时间
2012-6-23
在线时间
508 小时
3#
发表于 2013-5-17 00:44:28 | 只看该作者
首先确定下你的硬件连接是否正确,我们使用龙丘的CCD效果不错,基本上镜头不要动,动了的话把它竟可能上进去,外面留一点,还有你程序好像始终没有宏定义啊不行了 在while大循环里加点延时试一下 相当于曝光时间加长点
回复 支持 反对

使用道具 举报

4

主题

16

帖子

0

精华

高级会员

Rank: 4

积分
730
QQ
威望
470
贡献
160
兑换币
68
注册时间
2011-12-19
在线时间
50 小时
4#
发表于 2013-5-17 10:42:55 | 只看该作者
兄弟,你有xs128的龙丘线阵ccd程序吗?能不能发到我邮箱1157238761@qq.com给我看一下。谢了……
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 07:17 , Processed in 0.094943 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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