TSL1401使用方法和心得

-------------------------------------------------------------------------------------------------------------

由于该资料在网上随便搜索便有,我就不再详细的介绍其电路原理和曝光时间的计算公式

我着重介绍一下驱动的代码,如果有更大的兴趣看完这篇文章后可以去看看电路原理,以及其他大神的博客

预备知识:单片机对电平的基本操作,ad转换

先说明一个问题:该模块可以基于任何运算速度足够的单片机(甚至是51)

参考资料:http://blog.csdn.net/u014545515/article/details/38363511

-------------------------------------------------------------------------------------------------------------

先介绍一下CCD模块:该模块有几个重要的针脚

VCC:接电源正极 3.3v-5v

GND:接地

CLK:时钟信号线

SI:逻辑信号线

AO:模拟信号输出

1. 接法

一般VCC和GND都是直接接在单片机的接口上,如果独立电源供电的话,注意要共地。AO接AD转换接口。

2. 用法

使用方法如上图所示

3. 代码(这里使用arduino)

  digitalWrite(CCD_SI,HIGH);//SI拉高电平
  digitalWrite(CCD_CLK,HIGH);//时钟高电平
  digitalWrite(CCD_SI,LOW);//SI低电平
  digitalWrite(CCD_CLK,LOW);//时钟低电平
  for(i=0;i<128;i++)
  {
    digitalWrite(CCD_CLK,HIGH);
    digitalWrite(CCD_CLK,LOW);
  }//从这里结束曝光
  delayMicroseconds(exp_time);//曝光时间
  digitalWrite(CCD_SI,HIGH);
  digitalWrite(CCD_CLK,HIGH);
  digitalWrite(CCD_SI,LOW);
  piexl[0]=analogRead(A0);//AD,注意这个函数的返回值是0-1024的,所以至少要用10bit的大小才不会导致溢出。
  if(piexl[0]==255) piexl[i]=254;
  digitalWrite(CCD_CLK,LOW);
  for(i=1;i<128;i++)
  {
    digitalWrite(CCD_CLK,HIGH);
    piexl[i]=analogRead(A0);
    digitalWrite(CCD_CLK,LOW);
  }
  digitalWrite(CCD_CLK,HIGH);
  digitalWrite(CCD_CLK,LOW);AD,注意这个函数的返回值是0-1024的,所以至少要用10bit的大小才不会导致溢出。
  if(piexl[0]==255) piexl[i]=254;
  digitalWrite(CCD_CLK,LOW);
  for(i=1;i<128;i++)
  {
    digitalWrite(CCD_CLK,HIGH);
    piexl[i]=analogRead(A0);
    digitalWrite(CCD_CLK,LOW);
  }
  digitalWrite(CCD_CLK,HIGH);
  digitalWrite(CCD_CLK,LOW);

4. 代码介绍

每次使用ccd扫描数据的时候要进行两次时序操作,数据输出在第二次。

第一次时序操作是用来初始化端口的电平,两次电平操作中间的是曝光时间设置。

输出结果一般转换成8比特位的数值,对应0-255的灰度值,白色是255,黑色是0

5. 常见问题解决

输出不了数据:检查线路是否错误。检查电平操作是否正确。检查是否有进行两次电平操作。

6. 数据查看

一般是使用串口将数据发送到上位机查看.

有现成的上位机软件也可以自己去了解一下串口编程的api,自己编写一个上位机。

 

你可能感兴趣的:(单片机,arduino,CCD,循迹,嵌入式)