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,自己编写一个上位机。

猜你喜欢

转载自blog.csdn.net/Dang_boy/article/details/74999640