智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4280|回复: 19
打印 上一主题 下一主题

ccd单次曝光程序为啥改写一下会有两种不同结果呢?

  [复制链接]

1

主题

56

帖子

0

精华

高级会员

Rank: 4

积分
743
威望
373
贡献
182
兑换币
220
注册时间
2012-10-16
在线时间
94 小时
毕业学校
安徽理工大学
跳转到指定楼层
1#
发表于 2013-1-12 16:10:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
改写部分为for循环部分,见程序最后
byte ADV[128]={0,0};         //声明数组,用于存放采集的线性数值
#define TSL_SI  PORTA_PA0    //定义线性传感器的端口 SI
#define TSL_CLK PORTA_PA1   //定义线性传感器的端口 CLK   
#define BUSCLOCK24M          //根据单片机的总线频率选择相应的宏定义
      //短暂的延时
void Dly_us(byte us);
      //较长延时
void Dly_ms(int ms)
{
   int ii,jj;
   if (ms<1) ms=1;
   for(ii=0;ii<ms;ii++)
     for(jj=0;jj<2000;jj++);    //busclk:32MHz--1ms
     //for(jj=0;jj<5340;jj++);    //busclk:64MHz--1ms         
}
void SetBusCLK_24M(void)
{   
    MMCCTL1=0X00;   
    PKGCR  =0X06;   
    DIRECT =0x00;
    IVBR   =0xFF;   
    ECLKCTL=0xC0;   
    CPMUPROT   =0x26;   //停止保护时钟配置寄存器
    CPMUCLKS_PSTP=0;    //
    CPMUCLKS_PLLSEL=1;  //应用PLL      
    //CPMUSYNR   =nM-1;   //设置分频因子  
    CPMUSYNR   =0x40|23; //设置分频因子
    CPMUREFDIV =0x80|0x00;   //pllclock=2*(1+SYNR)= MHz;
    CPMUPOSTDIV=0x00;   // Set the post divider register      
    CPMUPOSTDIV=0x00;   // Set the post divider register  
    CPMUPLL    =0x10;   // Set the PLL frequency modulation  
    while(CPMUFLG_LOCK == 0); /* Wait until the PLL is within the desired tolerance of the target frequency */
    CPMUPROT=0x00;            /* Enable protection of clock configuration registers */
}
//-----------------------------------------------------  
void AD_Init(void)
{  
  
    ATDCTL1=0x00;   //7:1-外部触发,65:00-8位精度,4:放电,3210:ch
  ATDCTL2=0x40;   //禁止外部触发, 中断禁止   
  ATDCTL3=0xa0;   //右对齐无符号,每次转换4个序列, No FIFO, Freeze模式下继续转   
  ATDCTL4=0x01;   //765:采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1]
  ATDCTL5=0x38;   //6:0特殊通道禁止,5:1连续转换 ,4:1多通道轮流采样
  ATDDIEN=0x00;   //禁止数字输入
}
void RD_TSL1(void)
{
  byte i=0,tslp=0;
  TSL_CLK=1;//起始电平高
  TSL_SI=0; //起始电平低
  Dly_us(1); //合理的延时
      
  TSL_CLK=0; //上升沿
  Dly_us(1); //合理延时
  TSL_SI=1;//下降沿
  Dly_us(1); //合理延时
      
  TSL_CLK=1;//上升沿
  Dly_us(1); //合理延时
  TSL_SI=0; //下降沿
  Dly_us(1); //合理延时
  
  for(i=0;i<128;i++)
  {
    TSL_CLK=0;//下降沿   
    Dly_us(3); //合理延时
    while(!ATDSTAT0_SCF);//等待转换结束
    ADV[tslp]=ATDDR0L;  //AD采集
    ++tslp;
    TSL_CLK=1;//上升沿
    Dly_us(3); //合理延时   
  }
  
Dly_us(20);
}
void RD_TSL0(void)
{
  byte i=0;
  TSL_CLK=1;//起始电平高
  TSL_SI=0; //起始电平低
  Dly_us(1); //合理的延时
      
  TSL_CLK=0; //上升沿
  Dly_us(1); //合理延时
  TSL_SI=1;//下降沿
  Dly_us(1); //合理延时
      
  TSL_CLK=1;//上升沿
  Dly_us(1); //合理延时
  TSL_SI=0; //下降沿
  Dly_us(1); //合理延时
  
  for(i=0;i<128;i++)
  {
    TSL_CLK=0;//下降沿   
    Dly_us(3); //合理延时
   
    TSL_CLK=1;//上升沿
    Dly_us(3); //合理延时   
  }
  
   Dly_us(10);
}
   
void SendHex(unsigned char hex) {
  unsigned char temp;
  temp = hex >>4;
  if(temp < 10) {
    SCI_Write(temp + '0');
  } else {
    SCI_Write(temp - 10 + 'A');
  }
  temp = hex & 0x0F;
  if(temp < 10) {
    SCI_Write(temp + '0');
  } else {
    SCI_Write(temp - 10 + 'A');
  }
}
void SendImageData(unsigned char *ImageData) {
    unsigned char i;
    /* Send Data */
    SCI_Write('*');
    SCI_Write('L');
    SCI_Write('D');
    SendHex(0);
    SendHex(0);
    SendHex(0);
    SendHex(0);
    for(i=0; i<128; i++) {
   SendHex(*ImageData++);
    }
    SCI_Write(0);
    SCI_Write('#');
}
void main(void)
{
  /* put your own code here */  

  SetBusCLK_24M();  //总线初始化
  DisableInterrupts;//关闭中断
  //DDRA = 0xff;      //IO口初始化
  //PORTA= 0x00;      //IO口初始化
  DDRA = 0xff;      //IO口初始化
  PORTA= 0x01;      //IO口初始化  
  SCI_Init();      //串口初始化 9600,8,n,1     
  AD_Init();        //AD初始化
  for(;;)                                                          for(;;)            
  {                                                                   {  
     RD_TSL0();                                                         RD_TSL0();                                 
     Dly_ms(10);                                                          Dly_ms(10);
     //SendImageData(ADV);         改写为                       SendImageData(ADV);                              
     RD_TSL1();                                                            RD_TSL1();
     SendImageData(ADV);            改写为                       //SendImageData(ADV);      
  }                                                                      }                        
  /* please make sure that you never leave this function */
}

void Dly_us(byte us)
{
   byte ii;   
   for(ii=0;ii<us;ii++)
   {
      
#ifdef BUSCLOCK24M
      _asm(nop);_asm(nop);_asm(nop);_asm(nop);
      _asm(nop);_asm(nop);_asm(nop);_asm(nop);
      _asm(nop);_asm(nop);_asm(nop);_asm(nop);
      _asm(nop);_asm(nop);_asm(nop);_asm(nop);
      
      _asm(nop);_asm(nop);_asm(nop);_asm(nop);
      _asm(nop);_asm(nop);_asm(nop);_asm(nop);  
#endif
   }         
}

0

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
34
威望
31
贡献
3
兑换币
8
注册时间
2015-1-8
在线时间
1 小时
毕业学校
安徽理工大学
20#
发表于 2015-1-12 19:52:50 | 只看该作者
哥们,我也是安理大的
回复 支持 反对

使用道具 举报

1

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
威望
232
贡献
128
兑换币
153
注册时间
2013-11-27
在线时间
40 小时
19#
发表于 2014-6-25 16:25:32 | 只看该作者
回复 支持 反对

使用道具 举报

1

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
威望
172
贡献
96
兑换币
103
注册时间
2013-4-10
在线时间
47 小时
毕业学校
安徽建工
18#
发表于 2013-5-12 22:29:10 | 只看该作者
zyj 发表于 2013-5-9 20:05
曝光时间真的那么重要吗???

哥们 有没有好的曝光算法 我用的蓝宇的感觉不怎么好 凹槽检测的不明显 :)
回复 支持 反对

使用道具 举报

1

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
威望
172
贡献
96
兑换币
103
注册时间
2013-4-10
在线时间
47 小时
毕业学校
安徽建工
17#
发表于 2013-5-12 22:28:58 | 只看该作者
zyj 发表于 2013-5-9 20:05
曝光时间真的那么重要吗???

哥们 有没有好的曝光算法 我用的蓝宇的感觉不怎么好 凹槽检测的不明显 :)
回复 支持 反对

使用道具 举报

1

主题

56

帖子

0

精华

高级会员

Rank: 4

积分
743
威望
373
贡献
182
兑换币
220
注册时间
2012-10-16
在线时间
94 小时
毕业学校
安徽理工大学
16#
 楼主| 发表于 2013-5-12 13:03:19 | 只看该作者
十分重要
回复 支持 反对

使用道具 举报

114

主题

857

帖子

0

精华

跨届大侠

不想吃天鹅肉的癞蛤蟆不是好癞蛤蟆~!

Rank: 10Rank: 10Rank: 10

积分
8662

活跃会员奖章优秀会员奖章在线王奖章论坛骨干奖章论坛元老奖章资源大师奖章

威望
3956
贡献
2014
兑换币
1429
注册时间
2012-3-4
在线时间
1346 小时
15#
发表于 2013-5-9 20:05:14 | 只看该作者
曝光时间真的那么重要吗???
回复 支持 反对

使用道具 举报

0

主题

132

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1445
威望
666
贡献
387
兑换币
324
注册时间
2013-1-7
在线时间
196 小时
14#
发表于 2013-5-9 18:22:33 | 只看该作者
回复 支持 反对

使用道具 举报

1

主题

56

帖子

0

精华

高级会员

Rank: 4

积分
743
威望
373
贡献
182
兑换币
220
注册时间
2012-10-16
在线时间
94 小时
毕业学校
安徽理工大学
13#
 楼主| 发表于 2013-5-1 13:24:30 | 只看该作者
一个是积分清零,一个是数据采集不同的
回复 支持 反对

使用道具 举报

12

主题

174

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1156
威望
654
贡献
300
兑换币
157
注册时间
2012-2-21
在线时间
101 小时
12#
发表于 2013-4-30 22:40:57 | 只看该作者
想请教楼主RD_TSL0();    和 RD_TSL1();   有什么不一样?为什么要这样设置?                                                           
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 02:05 , Processed in 0.337456 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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