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