找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1473|回复: 0
打印 上一主题 下一主题
收起左侧

TSL1401使用

[复制链接]
跳转到指定楼层
楼主
ID:668993 发表于 2019-12-20 10:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先介绍一下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,自己编写一个上位机。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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